From: Avery Pennarun Date: Sun, 26 Apr 2009 20:28:56 +0000 (-0400) Subject: Add some basic assertions to test.sh. X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=1490e1546a380814fdd68dc3776023e58da60d48;p=git.git Add some basic assertions to test.sh. --- diff --git a/test.sh b/test.sh index 276f40d1d..4f2b674e5 100755 --- a/test.sh +++ b/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" +