Skip to content

Commit

Permalink
Even more aggressive commit trimming.
Browse files Browse the repository at this point in the history
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...
  • Loading branch information
apenwarr committed Apr 25, 2009
1 parent 210d083 commit d691265
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 11 deletions.
34 changes: 24 additions & 10 deletions git-subtree.sh
Expand Up @@ -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..."
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion test.sh
Expand Up @@ -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

0 comments on commit d691265

Please sign in to comment.