Add some basic assertions to test.sh.
This commit is contained in:
parent
0ad3dd8534
commit
1490e1546a
73
test.sh
73
test.sh
@ -1,4 +1,4 @@
|
||||
#!/bin/bash -x
|
||||
#!/bin/bash
|
||||
. shellopts.sh
|
||||
set -e
|
||||
|
||||
@ -8,6 +8,50 @@ create()
|
||||
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
|
||||
@ -19,6 +63,7 @@ create sub1
|
||||
git commit -m 'sub1'
|
||||
git branch sub1
|
||||
git branch -m master subproj
|
||||
check true
|
||||
|
||||
create sub2
|
||||
git commit -m 'sub2'
|
||||
@ -86,7 +131,33 @@ git branch split3 FETCH_HEAD
|
||||
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"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user