diff options
author | Avery Pennarun <apenwarr@gmail.com> | 2009-04-24 22:05:30 -0400 |
---|---|---|
committer | Avery Pennarun <apenwarr@gmail.com> | 2009-04-24 22:05:30 -0400 |
commit | d691265880abea4428783beb858683be56f3b340 (patch) | |
tree | f7750f07776f31350dfb84679b45fb82dd809f79 | |
parent | Prune out some extra merge commits by comparing their parents correctly. (diff) | |
download | tgif-d691265880abea4428783beb858683be56f3b340.tar.xz |
Even more aggressive commit trimming.
Now we cut out a commit if any of its parents had the same tree; just use
that parent in its place. This makes the history look nice, but I don't
think it's quite right...
-rwxr-xr-x | git-subtree.sh | 34 | ||||
-rwxr-xr-x | test.sh | 2 |
2 files changed, 25 insertions, 11 deletions
diff --git a/git-subtree.sh b/git-subtree.sh index e6d8ce8817..03107e2251 100755 --- a/git-subtree.sh +++ b/git-subtree.sh @@ -202,6 +202,29 @@ tree_changed() fi } +copy_or_skip() +{ + rev="$1" + tree="$2" + newparents="$3" + assert [ -n "$tree" ] + + p="" + for parent in $newparents; do + ptree=$(toptree_for_commit $parent) || exit $? + if [ "$ptree" = "$tree" ]; then + # any identical parent means this commit is unnecessary + echo $parent + return 0 + elif [ -n "$ptree" ]; then + # an existing, non-identical parent is important + p="$p -p $parent" + fi + done + + copy_commit $rev $tree "$p" || exit $? +} + cmd_split() { debug "Splitting $dir..." @@ -238,16 +261,7 @@ cmd_split() debug " tree is: $tree" [ -z $tree ] && continue - p="" - for parent in $newparents; do - p="$p -p $parent" - done - - if tree_changed $tree $newparents; then - newrev=$(copy_commit $rev $tree "$p") || exit $? - else - newrev="$newparents" - fi + newrev=$(copy_or_skip "$rev" "$tree" "$newparents") || exit $? debug " newrev is: $newrev" cache_set $rev $newrev cache_set latest_new $newrev @@ -93,4 +93,4 @@ git branch subproj-merge-split3 cd ../mainline git fetch ../subproj subproj-merge-split3 git branch subproj-merge-split3 FETCH_HEAD -git merge subproj-merge-split3 +git merge -s subtree subproj-merge-split3 |