summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Avery Pennarun <apenwarr@gmail.com>2009-04-24 21:49:19 -0400
committerLibravatar Avery Pennarun <apenwarr@gmail.com>2009-04-24 21:49:19 -0400
commit210d083904914dd4668e032870f92ff0d5d441cc (patch)
tree7dde7f558131c04f7d3a6b222f398fb29f2c6a99
parentQuick test script for generating reasonably complex merge scenarios. (diff)
downloadtgif-210d083904914dd4668e032870f92ff0d5d441cc.tar.xz
Prune out some extra merge commits by comparing their parents correctly.
-rwxr-xr-xgit-subtree.sh18
1 files changed, 13 insertions, 5 deletions
diff --git a/git-subtree.sh b/git-subtree.sh
index ffffb5ed88..e6d8ce8817 100755
--- a/git-subtree.sh
+++ b/git-subtree.sh
@@ -168,9 +168,17 @@ merge_msg()
EOF
}
-tree_for_commit()
+toptree_for_commit()
{
- git ls-tree "$1" -- "$dir" |
+ commit="$1"
+ git log -1 --pretty=format:'%T' "$commit" -- || exit $?
+}
+
+subtree_for_commit()
+{
+ commit="$1"
+ dir="$2"
+ git ls-tree "$commit" -- "$dir" |
while read mode type tree name; do
assert [ "$name" = "$dir" ]
echo $tree
@@ -185,7 +193,7 @@ tree_changed()
if [ $# -ne 1 ]; then
return 0 # weird parents, consider it changed
else
- ptree=$(tree_for_commit $1)
+ ptree=$(toptree_for_commit $1)
if [ "$ptree" != "$tree" ]; then
return 0 # changed
else
@@ -226,7 +234,7 @@ cmd_split()
newparents=$(cache_get $parents)
debug " newparents: $newparents"
- tree=$(tree_for_commit $rev)
+ tree=$(subtree_for_commit $rev "$dir")
debug " tree is: $tree"
[ -z $tree ] && continue
@@ -235,7 +243,7 @@ cmd_split()
p="$p -p $parent"
done
- if tree_changed $tree $parents; then
+ if tree_changed $tree $newparents; then
newrev=$(copy_commit $rev $tree "$p") || exit $?
else
newrev="$newparents"