Merge branch 'ab/keep-git-exit-codes-in-tests'

Updates tests around the use of "test $(git cmd) = constant".

* ab/keep-git-exit-codes-in-tests:
  rev-list simplify tests: don't ignore "git" exit code
  checkout tests: don't ignore "git <cmd>" exit code
  apply tests: don't ignore "git ls-files" exit code, drop sub-shell
  gettext tests: don't ignore "test-tool regex" exit code
  rev-list tests: don't hide abort() in "test_expect_failure"
  diff tests: don't ignore "git rev-list" exit code
  notes tests: don't ignore "git" exit code
  rev-parse tests: don't ignore "git reflog" exit code
  merge tests: use "test_must_fail" instead of ad-hoc pattern
  apply tests: use "test_must_fail" instead of ad-hoc pattern
  diff tests: don't ignore "git diff" exit code in "read" loop
  diff tests: don't ignore "git diff" exit code
  read-tree tests: check "diff-files" exit code on failure
  tests: use "test_stdout_line_count", not "test $(git [...] | wc -l)"
  tests: change some 'test $(git) = "x"' to test_cmp
This commit is contained in:
Junio C Hamano 2022-03-16 17:53:09 -07:00
commit ea05fd5fbf
19 changed files with 245 additions and 218 deletions

View File

@ -65,9 +65,11 @@ test_expect_success 'check commit-tree' '
test_path_is_file "$REAL/objects/$(objpath $SHA)"
'
test_expect_success 'check rev-list' '
test_expect_success !SANITIZE_LEAK 'check rev-list' '
git update-ref "HEAD" "$SHA" &&
test "$SHA" = "$(git rev-list HEAD)"
git rev-list HEAD >actual &&
echo $SHA >expected &&
test_cmp expected actual
'
test_expect_success 'setup_git_dir twice in subdir' '

View File

@ -21,7 +21,6 @@ In the test, these paths are used:
yomin - not in H or M
'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-read-tree.sh
@ -38,11 +37,12 @@ compare_change () {
}
check_cache_at () {
clean_if_empty=$(git diff-files -- "$1")
git diff-files -- "$1" >out &&
clean_if_empty=$(cat out) &&
case "$clean_if_empty" in
'') echo "$1: clean" ;;
?*) echo "$1: dirty" ;;
esac
esac &&
case "$2,$clean_if_empty" in
clean,) : ;;
clean,?*) false ;;

View File

@ -9,7 +9,6 @@ This is identical to t1001, but uses -u to update the work tree as well.
'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-read-tree.sh
@ -23,11 +22,12 @@ compare_change () {
}
check_cache_at () {
clean_if_empty=$(git diff-files -- "$1")
git diff-files -- "$1" >out &&
clean_if_empty=$(cat out) &&
case "$clean_if_empty" in
'') echo "$1: clean" ;;
?*) echo "$1: dirty" ;;
esac
esac &&
case "$2,$clean_if_empty" in
clean,) : ;;
clean,?*) false ;;

View File

@ -132,8 +132,9 @@ test_expect_success 'use --default' '
test_must_fail git rev-parse --verify --default bar
'
test_expect_success 'main@{n} for various n' '
N=$(git reflog | wc -l) &&
test_expect_success !SANITIZE_LEAK 'main@{n} for various n' '
git reflog >out &&
N=$(wc -l <out) &&
Nm1=$(($N-1)) &&
Np1=$(($N+1)) &&
git rev-parse --verify main@{0} &&

View File

@ -21,14 +21,20 @@ test_expect_success 'first branch switch' '
git checkout other
'
test_cmp_symbolic_HEAD_ref () {
echo refs/heads/"$1" >expect &&
git symbolic-ref HEAD >actual &&
test_cmp expect actual
}
test_expect_success '"checkout -" switches back' '
git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main"
test_cmp_symbolic_HEAD_ref main
'
test_expect_success '"checkout -" switches forth' '
git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/other"
test_cmp_symbolic_HEAD_ref other
'
test_expect_success 'detach HEAD' '
@ -37,12 +43,16 @@ test_expect_success 'detach HEAD' '
test_expect_success '"checkout -" attaches again' '
git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/other"
test_cmp_symbolic_HEAD_ref other
'
test_expect_success '"checkout -" detaches again' '
git checkout - &&
test "z$(git rev-parse HEAD)" = "z$(git rev-parse other)" &&
git rev-parse other >expect &&
git rev-parse HEAD >actual &&
test_cmp expect actual &&
test_must_fail git symbolic-ref HEAD
'
@ -63,31 +73,31 @@ more_switches () {
test_expect_success 'switch to the last' '
more_switches &&
git checkout @{-1} &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch2"
test_cmp_symbolic_HEAD_ref branch2
'
test_expect_success 'switch to second from the last' '
more_switches &&
git checkout @{-2} &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch3"
test_cmp_symbolic_HEAD_ref branch3
'
test_expect_success 'switch to third from the last' '
more_switches &&
git checkout @{-3} &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch4"
test_cmp_symbolic_HEAD_ref branch4
'
test_expect_success 'switch to fourth from the last' '
more_switches &&
git checkout @{-4} &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch5"
test_cmp_symbolic_HEAD_ref branch5
'
test_expect_success 'switch to twelfth from the last' '
more_switches &&
git checkout @{-12} &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/branch13"
test_cmp_symbolic_HEAD_ref branch13
'
test_expect_success 'merge base test setup' '
@ -98,19 +108,28 @@ test_expect_success 'merge base test setup' '
test_expect_success 'another...main' '
git checkout another &&
git checkout another...main &&
test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify main^)"
git rev-parse --verify main^ >expect &&
git rev-parse --verify HEAD >actual &&
test_cmp expect actual
'
test_expect_success '...main' '
git checkout another &&
git checkout ...main &&
test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify main^)"
git rev-parse --verify main^ >expect &&
git rev-parse --verify HEAD >actual &&
test_cmp expect actual
'
test_expect_success 'main...' '
git checkout another &&
git checkout main... &&
test "z$(git rev-parse --verify HEAD)" = "z$(git rev-parse --verify main^)"
git rev-parse --verify main^ >expect &&
git rev-parse --verify HEAD >actual &&
test_cmp expect actual
'
test_expect_success '"checkout -" works after a rebase A' '
@ -118,7 +137,7 @@ test_expect_success '"checkout -" works after a rebase A' '
git checkout other &&
git rebase main &&
git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main"
test_cmp_symbolic_HEAD_ref main
'
test_expect_success '"checkout -" works after a rebase A B' '
@ -127,7 +146,7 @@ test_expect_success '"checkout -" works after a rebase A B' '
git checkout other &&
git rebase main moodle &&
git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main"
test_cmp_symbolic_HEAD_ref main
'
test_expect_success '"checkout -" works after a rebase -i A' '
@ -135,7 +154,7 @@ test_expect_success '"checkout -" works after a rebase -i A' '
git checkout other &&
git rebase -i main &&
git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main"
test_cmp_symbolic_HEAD_ref main
'
test_expect_success '"checkout -" works after a rebase -i A B' '
@ -144,7 +163,7 @@ test_expect_success '"checkout -" works after a rebase -i A B' '
git checkout other &&
git rebase main foodle &&
git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main"
test_cmp_symbolic_HEAD_ref main
'
test_done

View File

@ -14,7 +14,6 @@ only the updates to dir/sub.
Also tested are "git add -u" without limiting, and "git add -u"
without contents changes, and other conditions'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
test_expect_success setup '
@ -41,20 +40,28 @@ test_expect_success update '
'
test_expect_success 'update noticed a removal' '
test "$(git ls-files dir1/sub1)" = ""
git ls-files dir1/sub1 >out &&
test_must_be_empty out
'
test_expect_success 'update touched correct path' '
test "$(git diff-files --name-status dir2/sub3)" = ""
git diff-files --name-status dir2/sub3 >out &&
test_must_be_empty out
'
test_expect_success 'update did not touch other tracked files' '
test "$(git diff-files --name-status check)" = "M check" &&
test "$(git diff-files --name-status top)" = "M top"
echo "M check" >expect &&
git diff-files --name-status check >actual &&
test_cmp expect actual &&
echo "M top" >expect &&
git diff-files --name-status top >actual &&
test_cmp expect actual
'
test_expect_success 'update did not touch untracked files' '
test "$(git ls-files dir2/other)" = ""
git ls-files dir2/other >out &&
test_must_be_empty out
'
test_expect_success 'cache tree has not been corrupted' '
@ -76,9 +83,8 @@ test_expect_success 'update from a subdirectory' '
'
test_expect_success 'change gets noticed' '
test "$(git diff-files --name-status dir1)" = ""
git diff-files --name-status dir1 >out &&
test_must_be_empty out
'
test_expect_success 'non-qualified update in subdir updates from the root' '
@ -103,7 +109,8 @@ test_expect_success 'replace a file with a symlink' '
test_expect_success 'add everything changed' '
git add -u &&
test -z "$(git diff-files)"
git diff-files >out &&
test_must_be_empty out
'
@ -111,7 +118,8 @@ test_expect_success 'touch and then add -u' '
touch check &&
git add -u &&
test -z "$(git diff-files)"
git diff-files >out &&
test_must_be_empty out
'
@ -119,7 +127,8 @@ test_expect_success 'touch and then add explicitly' '
touch check &&
git add check &&
test -z "$(git diff-files)"
git diff-files >out &&
test_must_be_empty out
'

View File

@ -8,7 +8,6 @@ test_description='Test commit notes index (expensive!)'
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
create_repo () {
@ -65,7 +64,8 @@ create_repo () {
test_notes () {
count=$1 &&
git config core.notesRef refs/notes/commits &&
git log | grep "^ " >output &&
git log >tmp &&
grep "^ " tmp >output &&
i=$count &&
while test $i -gt 0
do
@ -90,7 +90,7 @@ write_script time_notes <<\EOF
unset GIT_NOTES_REF
;;
esac
git log
git log || exit $?
i=$(($i+1))
done >/dev/null
EOF

View File

@ -5,7 +5,6 @@ test_description='Test commit notes organized in subtrees'
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
number_of_commits=100
@ -79,7 +78,7 @@ test_sha1_based () {
(
start_note_commit &&
nr=$number_of_commits &&
git rev-list refs/heads/main |
git rev-list refs/heads/main >out &&
while read sha1; do
note_path=$(echo "$sha1" | sed "$1")
cat <<INPUT_END &&
@ -91,9 +90,9 @@ EOF
INPUT_END
nr=$(($nr-1))
done
) |
git fast-import --quiet
done <out
) >gfi &&
git fast-import --quiet <gfi
}
test_expect_success 'test notes in 2/38-fanout' 'test_sha1_based "s|^..|&/|"'

View File

@ -2,7 +2,6 @@
test_description='Test that adding/removing many notes triggers automatic fanout restructuring'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
path_has_fanout() {
@ -24,7 +23,7 @@ touched_one_note_with_fanout() {
all_notes_have_fanout() {
notes_commit=$1 &&
fanout=$2 &&
git ls-tree -r --name-only $notes_commit 2>/dev/null |
git ls-tree -r --name-only $notes_commit |
while read path
do
path_has_fanout $path $fanout || return 1
@ -51,8 +50,9 @@ test_expect_success 'creating many notes with git-notes' '
done
'
test_expect_success 'many notes created correctly with git-notes' '
git log | grep "^ " > output &&
test_expect_success !SANITIZE_LEAK 'many notes created correctly with git-notes' '
git log >output.raw &&
grep "^ " output.raw >output &&
i=$num_notes &&
while test $i -gt 0
do
@ -91,13 +91,13 @@ test_expect_success 'stable fanout 0 is followed by stable fanout 1' '
test_expect_success 'deleting most notes with git-notes' '
remove_notes=285 &&
i=0 &&
git rev-list HEAD |
git rev-list HEAD >revs &&
while test $i -lt $remove_notes && read sha1
do
i=$(($i + 1)) &&
test_tick &&
git notes remove "$sha1" 2>/dev/null || return 1
done
git notes remove "$sha1" || return 1
done <revs
'
test_expect_success 'most notes deleted correctly with git-notes' '

View File

@ -24,45 +24,38 @@ test_expect_success setup '
'
test_expect_success 'GIT_EXTERNAL_DIFF environment' '
GIT_EXTERNAL_DIFF=echo git diff | {
read path oldfile oldhex oldmode newfile newhex newmode &&
test "z$path" = zfile &&
test "z$oldmode" = z100644 &&
test "z$newhex" = "z$ZERO_OID" &&
test "z$newmode" = z100644 &&
oh=$(git rev-parse --verify HEAD:file) &&
test "z$oh" = "z$oldhex"
}
cat >expect <<-EOF &&
file $(git rev-parse --verify HEAD:file) 100644 file $(test_oid zero) 100644
EOF
GIT_EXTERNAL_DIFF=echo git diff >out &&
cut -d" " -f1,3- <out >actual &&
test_cmp expect actual
'
test_expect_success 'GIT_EXTERNAL_DIFF environment should apply only to diff' '
GIT_EXTERNAL_DIFF=echo git log -p -1 HEAD |
grep "^diff --git a/file b/file"
test_expect_success !SANITIZE_LEAK 'GIT_EXTERNAL_DIFF environment should apply only to diff' '
GIT_EXTERNAL_DIFF=echo git log -p -1 HEAD >out &&
grep "^diff --git a/file b/file" out
'
test_expect_success 'GIT_EXTERNAL_DIFF environment and --no-ext-diff' '
GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff |
grep "^diff --git a/file b/file"
GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff >out &&
grep "^diff --git a/file b/file" out
'
test_expect_success SYMLINKS 'typechange diff' '
rm -f file &&
ln -s elif file &&
GIT_EXTERNAL_DIFF=echo git diff | {
read path oldfile oldhex oldmode newfile newhex newmode &&
test "z$path" = zfile &&
test "z$oldmode" = z100644 &&
test "z$newhex" = "z$ZERO_OID" &&
test "z$newmode" = z120000 &&
oh=$(git rev-parse --verify HEAD:file) &&
test "z$oh" = "z$oldhex"
} &&
cat >expect <<-EOF &&
file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 120000
EOF
GIT_EXTERNAL_DIFF=echo git diff >out &&
cut -d" " -f1,3-4,6- <out >actual &&
test_cmp expect actual &&
GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff >actual &&
git diff >expect &&
test_cmp expect actual
@ -72,27 +65,25 @@ test_expect_success 'diff.external' '
git reset --hard &&
echo third >file &&
test_config diff.external echo &&
git diff | {
read path oldfile oldhex oldmode newfile newhex newmode &&
test "z$path" = zfile &&
test "z$oldmode" = z100644 &&
test "z$newhex" = "z$ZERO_OID" &&
test "z$newmode" = z100644 &&
oh=$(git rev-parse --verify HEAD:file) &&
test "z$oh" = "z$oldhex"
}
cat >expect <<-EOF &&
file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
EOF
git diff >out &&
cut -d" " -f1,3-4,6- <out >actual &&
test_cmp expect actual
'
test_expect_success 'diff.external should apply only to diff' '
test_expect_success !SANITIZE_LEAK 'diff.external should apply only to diff' '
test_config diff.external echo &&
git log -p -1 HEAD |
grep "^diff --git a/file b/file"
git log -p -1 HEAD >out &&
grep "^diff --git a/file b/file" out
'
test_expect_success 'diff.external and --no-ext-diff' '
test_config diff.external echo &&
git diff --no-ext-diff |
grep "^diff --git a/file b/file"
git diff --no-ext-diff >out &&
grep "^diff --git a/file b/file" out
'
test_expect_success 'diff attribute' '
@ -103,29 +94,23 @@ test_expect_success 'diff attribute' '
echo >.gitattributes "file diff=parrot" &&
git diff | {
read path oldfile oldhex oldmode newfile newhex newmode &&
test "z$path" = zfile &&
test "z$oldmode" = z100644 &&
test "z$newhex" = "z$ZERO_OID" &&
test "z$newmode" = z100644 &&
oh=$(git rev-parse --verify HEAD:file) &&
test "z$oh" = "z$oldhex"
}
cat >expect <<-EOF &&
file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
EOF
git diff >out &&
cut -d" " -f1,3-4,6- <out >actual &&
test_cmp expect actual
'
test_expect_success 'diff attribute should apply only to diff' '
git log -p -1 HEAD |
grep "^diff --git a/file b/file"
test_expect_success !SANITIZE_LEAK 'diff attribute should apply only to diff' '
git log -p -1 HEAD >out &&
grep "^diff --git a/file b/file" out
'
test_expect_success 'diff attribute and --no-ext-diff' '
git diff --no-ext-diff |
grep "^diff --git a/file b/file"
git diff --no-ext-diff >out &&
grep "^diff --git a/file b/file" out
'
@ -136,48 +121,55 @@ test_expect_success 'diff attribute' '
echo >.gitattributes "file diff=color" &&
git diff | {
read path oldfile oldhex oldmode newfile newhex newmode &&
test "z$path" = zfile &&
test "z$oldmode" = z100644 &&
test "z$newhex" = "z$ZERO_OID" &&
test "z$newmode" = z100644 &&
oh=$(git rev-parse --verify HEAD:file) &&
test "z$oh" = "z$oldhex"
}
cat >expect <<-EOF &&
file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
EOF
git diff >out &&
cut -d" " -f1,3-4,6- <out >actual &&
test_cmp expect actual
'
test_expect_success 'diff attribute should apply only to diff' '
git log -p -1 HEAD |
grep "^diff --git a/file b/file"
test_expect_success !SANITIZE_LEAK 'diff attribute should apply only to diff' '
git log -p -1 HEAD >out &&
grep "^diff --git a/file b/file" out
'
test_expect_success 'diff attribute and --no-ext-diff' '
git diff --no-ext-diff |
grep "^diff --git a/file b/file"
git diff --no-ext-diff >out &&
grep "^diff --git a/file b/file" out
'
test_expect_success 'GIT_EXTERNAL_DIFF trumps diff.external' '
>.gitattributes &&
test_config diff.external "echo ext-global" &&
GIT_EXTERNAL_DIFF="echo ext-env" git diff | grep ext-env
cat >expect <<-EOF &&
ext-env file $(git rev-parse --verify HEAD:file) 100644 file $(test_oid zero) 100644
EOF
GIT_EXTERNAL_DIFF="echo ext-env" git diff >out &&
cut -d" " -f1-2,4- <out >actual &&
test_cmp expect actual
'
test_expect_success 'attributes trump GIT_EXTERNAL_DIFF and diff.external' '
test_config diff.foo.command "echo ext-attribute" &&
test_config diff.external "echo ext-global" &&
echo "file diff=foo" >.gitattributes &&
GIT_EXTERNAL_DIFF="echo ext-env" git diff | grep ext-attribute
cat >expect <<-EOF &&
ext-attribute file $(git rev-parse --verify HEAD:file) 100644 file $(test_oid zero) 100644
EOF
GIT_EXTERNAL_DIFF="echo ext-env" git diff >out &&
cut -d" " -f1-2,4- <out >actual &&
test_cmp expect actual
'
test_expect_success 'no diff with -diff' '
echo >.gitattributes "file -diff" &&
git diff | grep Binary
git diff >out &&
grep Binary out
'
echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
@ -217,7 +209,12 @@ test_expect_success 'GIT_EXTERNAL_DIFF generates pretty paths' '
touch file.ext &&
git add file.ext &&
echo with extension > file.ext &&
GIT_EXTERNAL_DIFF=echo git diff file.ext | grep ......_file\.ext &&
cat >expect <<-EOF &&
file.ext file $(git rev-parse --verify HEAD:file) 100644 file.ext $(test_oid zero) 100644
EOF
GIT_EXTERNAL_DIFF=echo git diff file.ext >out &&
cut -d" " -f1,3- <out >actual &&
git update-index --force-remove file.ext &&
rm file.ext
'

View File

@ -2,7 +2,6 @@
test_description='difference in submodules'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-diff.sh
@ -28,10 +27,8 @@ test_expect_success setup '
git commit -m "submodule #2"
) &&
set x $(
cd sub &&
git rev-list HEAD
) &&
git -C sub rev-list HEAD >revs &&
set x $(cat revs) &&
echo ":160000 160000 $3 $ZERO_OID M sub" >expect &&
subtip=$3 subprev=$2
'

View File

@ -2,8 +2,6 @@
test_description='apply a patch that is larger than the preimage'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
cat >F <<\EOF
@ -41,20 +39,8 @@ test_expect_success setup '
'
test_expect_success 'apply should fail gracefully' '
if git apply --index patch
then
echo Oops, should not have succeeded
false
else
status=$? &&
echo "Status was $status" &&
if test -f .git/index.lock
then
echo Oops, should not have crashed
false
fi
fi
test_must_fail git apply --index patch &&
test_path_is_missing .git/index.lock
'
test_done

View File

@ -2,8 +2,6 @@
test_description='apply same filename'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
test_expect_success 'setup' '
@ -26,10 +24,11 @@ diff a/bla/blub/dir/file b/bla/blub/dir/file
EOF
test_expect_success 'apply --directory -p (1)' '
git apply --directory=some/sub -p3 --index patch &&
test Bello = $(git show :some/sub/dir/file) &&
test Bello = $(cat some/sub/dir/file)
echo Bello >expect &&
git show :some/sub/dir/file >actual &&
test_cmp expect actual &&
test_cmp expect some/sub/dir/file
'
@ -37,8 +36,10 @@ test_expect_success 'apply --directory -p (2) ' '
git reset --hard initial &&
git apply --directory=some/sub/ -p3 --index patch &&
test Bello = $(git show :some/sub/dir/file) &&
test Bello = $(cat some/sub/dir/file)
echo Bello >expect &&
git show :some/sub/dir/file >actual &&
test_cmp expect actual &&
test_cmp expect some/sub/dir/file
'
@ -55,8 +56,10 @@ EOF
test_expect_success 'apply --directory (new file)' '
git reset --hard initial &&
git apply --directory=some/sub/dir/ --index patch &&
test content = $(git show :some/sub/dir/newfile) &&
test content = $(cat some/sub/dir/newfile)
echo content >expect &&
git show :some/sub/dir/newfile >actual &&
test_cmp expect actual &&
test_cmp expect some/sub/dir/newfile
'
cat > patch << EOF
@ -72,8 +75,10 @@ EOF
test_expect_success 'apply --directory -p (new file)' '
git reset --hard initial &&
git apply -p2 --directory=some/sub/dir/ --index patch &&
test content = $(git show :some/sub/dir/newfile2) &&
test content = $(cat some/sub/dir/newfile2)
echo content >expect &&
git show :some/sub/dir/newfile2 >actual &&
test_cmp expect actual &&
test_cmp expect some/sub/dir/newfile2
'
cat > patch << EOF
@ -91,7 +96,8 @@ test_expect_success 'apply --directory (delete file)' '
echo content >some/sub/dir/delfile &&
git add some/sub/dir/delfile &&
git apply --directory=some/sub/dir/ --index patch &&
! (git ls-files | grep delfile)
git ls-files >out &&
! grep delfile out
'
cat > patch << 'EOF'
@ -107,8 +113,10 @@ EOF
test_expect_success 'apply --directory (quoted filename)' '
git reset --hard initial &&
git apply --directory=some/sub/dir/ --index patch &&
test content = $(git show :some/sub/dir/quotefile) &&
test content = $(cat some/sub/dir/quotefile)
echo content >expect &&
git show :some/sub/dir/quotefile >actual &&
test_cmp expect actual &&
test_cmp expect some/sub/dir/quotefile
'
test_done

View File

@ -2,7 +2,6 @@
test_description='git rev-list --max-count and --skip test'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
test_expect_success 'setup' '
@ -14,39 +13,39 @@ test_expect_success 'setup' '
'
test_expect_success 'no options' '
test $(git rev-list HEAD | wc -l) = 5
test_stdout_line_count = 5 git rev-list HEAD
'
test_expect_success '--max-count' '
test $(git rev-list HEAD --max-count=0 | wc -l) = 0 &&
test $(git rev-list HEAD --max-count=3 | wc -l) = 3 &&
test $(git rev-list HEAD --max-count=5 | wc -l) = 5 &&
test $(git rev-list HEAD --max-count=10 | wc -l) = 5
test_stdout_line_count = 0 git rev-list HEAD --max-count=0 &&
test_stdout_line_count = 3 git rev-list HEAD --max-count=3 &&
test_stdout_line_count = 5 git rev-list HEAD --max-count=5 &&
test_stdout_line_count = 5 git rev-list HEAD --max-count=10
'
test_expect_success '--max-count all forms' '
test $(git rev-list HEAD --max-count=1 | wc -l) = 1 &&
test $(git rev-list HEAD -1 | wc -l) = 1 &&
test $(git rev-list HEAD -n1 | wc -l) = 1 &&
test $(git rev-list HEAD -n 1 | wc -l) = 1
test_stdout_line_count = 1 git rev-list HEAD --max-count=1 &&
test_stdout_line_count = 1 git rev-list HEAD -1 &&
test_stdout_line_count = 1 git rev-list HEAD -n1 &&
test_stdout_line_count = 1 git rev-list HEAD -n 1
'
test_expect_success '--skip' '
test $(git rev-list HEAD --skip=0 | wc -l) = 5 &&
test $(git rev-list HEAD --skip=3 | wc -l) = 2 &&
test $(git rev-list HEAD --skip=5 | wc -l) = 0 &&
test $(git rev-list HEAD --skip=10 | wc -l) = 0
test_stdout_line_count = 5 git rev-list HEAD --skip=0 &&
test_stdout_line_count = 2 git rev-list HEAD --skip=3 &&
test_stdout_line_count = 0 git rev-list HEAD --skip=5 &&
test_stdout_line_count = 0 git rev-list HEAD --skip=10
'
test_expect_success '--skip --max-count' '
test $(git rev-list HEAD --skip=0 --max-count=0 | wc -l) = 0 &&
test $(git rev-list HEAD --skip=0 --max-count=10 | wc -l) = 5 &&
test $(git rev-list HEAD --skip=3 --max-count=0 | wc -l) = 0 &&
test $(git rev-list HEAD --skip=3 --max-count=1 | wc -l) = 1 &&
test $(git rev-list HEAD --skip=3 --max-count=2 | wc -l) = 2 &&
test $(git rev-list HEAD --skip=3 --max-count=10 | wc -l) = 2 &&
test $(git rev-list HEAD --skip=5 --max-count=10 | wc -l) = 0 &&
test $(git rev-list HEAD --skip=10 --max-count=10 | wc -l) = 0
test_stdout_line_count = 0 git rev-list HEAD --skip=0 --max-count=0 &&
test_stdout_line_count = 5 git rev-list HEAD --skip=0 --max-count=10 &&
test_stdout_line_count = 0 git rev-list HEAD --skip=3 --max-count=0 &&
test_stdout_line_count = 1 git rev-list HEAD --skip=3 --max-count=1 &&
test_stdout_line_count = 2 git rev-list HEAD --skip=3 --max-count=2 &&
test_stdout_line_count = 2 git rev-list HEAD --skip=3 --max-count=10 &&
test_stdout_line_count = 0 git rev-list HEAD --skip=5 --max-count=10 &&
test_stdout_line_count = 0 git rev-list HEAD --skip=10 --max-count=10
'
test_done

View File

@ -12,7 +12,9 @@ note () {
}
unnote () {
git name-rev --tags --annotate-stdin | sed -e "s|$OID_REGEX (tags/\([^)]*\)) |\1 |g"
test_when_finished "rm -f tmp" &&
git name-rev --tags --annotate-stdin >tmp &&
sed -e "s|$OID_REGEX (tags/\([^)]*\)) |\1 |g" <tmp
}
#
@ -111,8 +113,8 @@ check_outcome () {
shift &&
param="$*" &&
test_expect_$outcome "log $param" '
git log --pretty="$FMT" --parents $param |
unnote >actual &&
git log --pretty="$FMT" --parents $param >out &&
unnote >actual <out &&
sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual &&
test_cmp expect check
'
@ -151,8 +153,8 @@ check_result 'L K I H G B' --exclude-first-parent-only --first-parent L ^F
check_result 'E C B A' --full-history E -- lost
test_expect_success 'full history simplification without parent' '
printf "%s\n" E C B A >expect &&
git log --pretty="$FMT" --full-history E -- lost |
unnote >actual &&
git log --pretty="$FMT" --full-history E -- lost >out &&
unnote >actual <out &&
sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual &&
test_cmp expect check
'

View File

@ -17,8 +17,13 @@ test_expect_success 'setup unexpected non-blob entry' '
broken_tree="$(git hash-object -w --literally -t tree broken-tree)"
'
test_expect_failure 'traverse unexpected non-blob entry (lone)' '
test_must_fail git rev-list --objects $broken_tree
test_expect_success !SANITIZE_LEAK 'TODO (should fail!): traverse unexpected non-blob entry (lone)' '
sed "s/Z$//" >expect <<-EOF &&
$broken_tree Z
$tree foo
EOF
git rev-list --objects $broken_tree >actual &&
test_cmp expect actual
'
test_expect_success 'traverse unexpected non-blob entry (seen)' '
@ -116,8 +121,8 @@ test_expect_success 'setup unexpected non-blob tag' '
tag=$(git hash-object -w --literally -t tag broken-tag)
'
test_expect_failure 'traverse unexpected non-blob tag (lone)' '
test_must_fail git rev-list --objects $tag
test_expect_success !SANITIZE_LEAK 'TODO (should fail!): traverse unexpected non-blob tag (lone)' '
git rev-list --objects $tag
'
test_expect_success 'traverse unexpected non-blob tag (seen)' '

View File

@ -43,14 +43,9 @@ test_expect_success resolve '
rm -f a* m* &&
git reset --hard anchor &&
if git merge -s resolve main
then
echo Oops, should not have succeeded
false
else
test_must_fail git merge -s resolve main &&
git ls-files -s >current &&
test_cmp expect current
fi
'
test_expect_success recursive '
@ -58,14 +53,9 @@ test_expect_success recursive '
rm -f a* m* &&
git reset --hard anchor &&
if git merge -s recursive main
then
echo Oops, should not have succeeded
false
else
test_must_fail git merge -s recursive main &&
git ls-files -s >current &&
test_cmp expect current
fi
'
test_done

View File

@ -63,9 +63,12 @@ test_expect_success '"mixed" reset is not allowed in bare' '
test_must_fail git reset --mixed HEAD^
'
test_expect_success '"soft" reset is allowed in bare' '
test_expect_success !SANITIZE_LEAK '"soft" reset is allowed in bare' '
git reset --soft HEAD^ &&
test "$(git show --pretty=format:%s | head -n 1)" = "one"
git show --pretty=format:%s >out &&
echo one >expect &&
head -n 1 out >actual &&
test_cmp expect actual
'
test_done

View File

@ -11,9 +11,19 @@ test_expect_success GETTEXT_LOCALE 'setup' '
export LC_ALL
'
test_have_prereq GETTEXT_LOCALE &&
test-tool regex "HALLÓ" "Halló" ICASE &&
test_expect_success GETTEXT_LOCALE 'setup REGEX_LOCALE prerequisite' '
# This "test-tool" invocation is identical...
if test-tool regex "HALLÓ" "Halló" ICASE
then
test_set_prereq REGEX_LOCALE
else
# ... to this one, but this way "test_must_fail" will
# tell a segfault or abort() from the regexec() test
# itself
test_must_fail test-tool regex "HALLÓ" "Halló" ICASE
fi
'
test_expect_success REGEX_LOCALE 'grep literal string, no -F' '
git grep -i "TILRAUN: Halló Heimur!" &&