summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 0ad3dd8)
raw | patch | inline | side by side (parent: 0ad3dd8)
author | Avery Pennarun <apenwarr@gmail.com> | |
Sun, 26 Apr 2009 20:28:56 +0000 (16:28 -0400) | ||
committer | Avery Pennarun <apenwarr@gmail.com> | |
Sun, 26 Apr 2009 20:31:27 +0000 (16:31 -0400) |
test.sh | patch | blob | history |
index 276f40d1daffe3157baa886232510a154d32678c..4f2b674e5de6e4b9c8c4ab9fd9684d99aa1cae50 100755 (executable)
--- a/test.sh
+++ b/test.sh
-#!/bin/bash -x
+#!/bin/bash
. shellopts.sh
set -e
git add "$1"
}
+check()
+{
+ echo
+ echo "check:" "$@"
+ if "$@"; then
+ echo ok
+ return 0
+ else
+ echo FAILED
+ exit 1
+ fi
+}
+
+check_equal()
+{
+ echo
+ echo "check a:" "$1"
+ echo " b:" "$2"
+ if [ "$1" = "$2" ]; then
+ return 0
+ else
+ echo FAILED
+ exit 1
+ fi
+}
+
+fixnl()
+{
+ t=""
+ while read x; do
+ t="$t$x "
+ done
+ echo $t
+}
+
+multiline()
+{
+ while read x; do
+ set -- $x
+ for d in "$@"; do
+ echo "$d"
+ done
+ done
+}
rm -rf mainline subproj
mkdir mainline subproj
git commit -m 'sub1'
git branch sub1
git branch -m master subproj
+check true
create sub2
git commit -m 'sub2'
git merge FETCH_HEAD
git branch subproj-merge-split3
+chkm="main4 main6"
+chkms="main-sub10 main-sub5 main-sub7 main-sub8"
+chkms_sub=$(echo $chkms | multiline | sed 's,^,subdir/,' | fixnl)
+chks="sub1 sub2 sub3 sub9"
+chks_sub=$(echo $chks | multiline | sed 's,^,subdir/,' | fixnl)
+
+# make sure exactly the right set of files ends up in the subproj
+subfiles=$(git ls-files | fixnl)
+check_equal "$subfiles" "$chkms $chks"
+
+# make sure the subproj history *only* contains commits that affect the subdir.
+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
+
+# make sure exactly the right set of files ends up in the mainline
+mainfiles=$(git ls-files | fixnl)
+check_equal "$mainfiles" "$chkm $chkms_sub $chks_sub"
+
+# make sure each filename changed exactly once in the entire history.
+# 'main-sub??' and '/subdir/main-sub??' both change, because those are the
+# changes that were split into their own history. And 'subdir/sub??' never
+# change, since they were *only* changed in the subtree branch.
+allchanges=$(git log --name-only --pretty=format:'' | sort | fixnl)
+check_equal "$allchanges" "$chkm $chkms $chks $chkms_sub"
+