Browse Source

Trim some extra merge commits that don't need to go into the split tree.

...and update test.sh to test for this.
maint
Avery Pennarun 16 years ago
parent
commit
a64f3a7286
  1. 19
      git-subtree.sh
  2. 37
      test.sh

19
git-subtree.sh

@ -168,6 +168,7 @@ copy_commit() @@ -168,6 +168,7 @@ copy_commit()
{
# We're doing to set some environment vars here, so
# do it in a subshell to get rid of them safely later
debug copy_commit "{$1}" "{$2}" "{$3}"
git log -1 --pretty=format:'%an%n%ae%n%ad%n%cn%n%ce%n%cd%n%s%n%n%b' "$1" |
(
read GIT_AUTHOR_NAME
@ -258,19 +259,31 @@ copy_or_skip() @@ -258,19 +259,31 @@ copy_or_skip()

identical=
p=
gotparents=
for parent in $newparents; do
ptree=$(toptree_for_commit $parent) || exit $?
[ -z "$ptree" ] && continue
if [ "$ptree" = "$tree" ]; then
# an identical parent could be used in place of this rev.
identical="$parent"
fi
if [ -n "$ptree" ]; then
parentmatch="$parentmatch$parent"
# sometimes both old parents map to the same newparent;
# eliminate duplicates
is_new=1
for gp in $gotparents; do
if [ "$gp" = "$parent" ]; then
is_new=
break
fi
done
if [ -n "$is_new" ]; then
gotparents="$gotparents $parent"
p="$p -p $parent"
fi
done
if [ -n "$identical" -a "$parentmatch" = "$identical" ]; then
if [ -n "$identical" -a "$gotparents" = " $identical" ]; then
echo $identical
else
copy_commit $rev $tree "$p" || exit $?

37
test.sh

@ -24,8 +24,8 @@ check() @@ -24,8 +24,8 @@ check()
check_equal()
{
echo
echo "check a:" "$1"
echo " b:" "$2"
echo "check a:" "{$1}"
echo " b:" "{$2}"
if [ "$1" = "$2" ]; then
return 0
else
@ -100,17 +100,17 @@ git branch sub2 FETCH_HEAD @@ -100,17 +100,17 @@ git branch sub2 FETCH_HEAD
git subtree merge --prefix=subdir FETCH_HEAD
git branch pre-split

split1=$(git subtree split --annotate='*' \
spl1=$(git subtree split --annotate='*' \
--prefix subdir --onto FETCH_HEAD --rejoin)
echo "split1={$split1}"
git branch split1 "$split1"
echo "spl1={$spl1}"
git branch spl1 "$spl1"

create subdir/main-sub8
git commit -m 'main-sub8'

cd ../subproj
git fetch ../mainline split1
git branch split1 FETCH_HEAD
git fetch ../mainline spl1
git branch spl1 FETCH_HEAD
git merge FETCH_HEAD

create sub9
@ -123,14 +123,14 @@ git branch split2 "$split2" @@ -123,14 +123,14 @@ git branch split2 "$split2"
create subdir/main-sub10
git commit -m 'main-sub10'

split3=$(git subtree split --annotate='*' --prefix subdir --rejoin)
git branch split3 "$split3"
spl3=$(git subtree split --annotate='*' --prefix subdir --rejoin)
git branch spl3 "$spl3"

cd ../subproj
git fetch ../mainline split3
git branch split3 FETCH_HEAD
git fetch ../mainline spl3
git branch spl3 FETCH_HEAD
git merge FETCH_HEAD
git branch subproj-merge-split3
git branch subproj-merge-spl3

chkm="main4 main6"
chkms="main-sub10 main-sub5 main-sub7 main-sub8"
@ -147,9 +147,9 @@ allchanges=$(git log --name-only --pretty=format:'' | sort | fixnl) @@ -147,9 +147,9 @@ allchanges=$(git log --name-only --pretty=format:'' | sort | fixnl)
check_equal "$allchanges" "$chkms $chks"

cd ../mainline
git fetch ../subproj subproj-merge-split3
git branch subproj-merge-split3 FETCH_HEAD
git subtree pull --prefix=subdir ../subproj subproj-merge-split3
git fetch ../subproj subproj-merge-spl3
git branch subproj-merge-spl3 FETCH_HEAD
git subtree pull --prefix=subdir ../subproj subproj-merge-spl3

# make sure exactly the right set of files ends up in the mainline
mainfiles=$(git ls-files | fixnl)
@ -162,5 +162,12 @@ check_equal "$mainfiles" "$chkm $chkms_sub $chks_sub" @@ -162,5 +162,12 @@ check_equal "$mainfiles" "$chkm $chkms_sub $chks_sub"
allchanges=$(git log --name-only --pretty=format:'' | sort | fixnl)
check_equal "$allchanges" "$chkm $chkms $chks $chkms_sub"

# make sure the --rejoin commits never make it into subproj
check_equal "$(git log --pretty=format:'%s' HEAD^2 | grep -i split)" ""

# make sure no 'git subtree' tagged commits make it into subproj. (They're
# meaningless to subproj since one side of the merge refers to the mainline)
check_equal "$(git log --pretty=format:'%s%n%b' HEAD^2 | grep 'git-subtree.*:')" ""

echo
echo 'ok'

Loading…
Cancel
Save