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_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" && 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' ' 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 yomin - not in H or M
' '
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-read-tree.sh . "$TEST_DIRECTORY"/lib-read-tree.sh
@ -38,11 +37,12 @@ compare_change () {
} }
check_cache_at () { 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 case "$clean_if_empty" in
'') echo "$1: clean" ;; '') echo "$1: clean" ;;
?*) echo "$1: dirty" ;; ?*) echo "$1: dirty" ;;
esac esac &&
case "$2,$clean_if_empty" in case "$2,$clean_if_empty" in
clean,) : ;; clean,) : ;;
clean,?*) false ;; 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-lib.sh
. "$TEST_DIRECTORY"/lib-read-tree.sh . "$TEST_DIRECTORY"/lib-read-tree.sh
@ -23,11 +22,12 @@ compare_change () {
} }
check_cache_at () { 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 case "$clean_if_empty" in
'') echo "$1: clean" ;; '') echo "$1: clean" ;;
?*) echo "$1: dirty" ;; ?*) echo "$1: dirty" ;;
esac esac &&
case "$2,$clean_if_empty" in case "$2,$clean_if_empty" in
clean,) : ;; clean,) : ;;
clean,?*) false ;; clean,?*) false ;;

View File

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

View File

@ -21,14 +21,20 @@ test_expect_success 'first branch switch' '
git checkout other 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' ' test_expect_success '"checkout -" switches back' '
git checkout - && git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main" test_cmp_symbolic_HEAD_ref main
' '
test_expect_success '"checkout -" switches forth' ' test_expect_success '"checkout -" switches forth' '
git checkout - && git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/other" test_cmp_symbolic_HEAD_ref other
' '
test_expect_success 'detach HEAD' ' test_expect_success 'detach HEAD' '
@ -37,12 +43,16 @@ test_expect_success 'detach HEAD' '
test_expect_success '"checkout -" attaches again' ' test_expect_success '"checkout -" attaches again' '
git checkout - && git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/other" test_cmp_symbolic_HEAD_ref other
' '
test_expect_success '"checkout -" detaches again' ' test_expect_success '"checkout -" detaches again' '
git checkout - && 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 test_must_fail git symbolic-ref HEAD
' '
@ -63,31 +73,31 @@ more_switches () {
test_expect_success 'switch to the last' ' test_expect_success 'switch to the last' '
more_switches && more_switches &&
git checkout @{-1} && 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' ' test_expect_success 'switch to second from the last' '
more_switches && more_switches &&
git checkout @{-2} && 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' ' test_expect_success 'switch to third from the last' '
more_switches && more_switches &&
git checkout @{-3} && 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' ' test_expect_success 'switch to fourth from the last' '
more_switches && more_switches &&
git checkout @{-4} && 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' ' test_expect_success 'switch to twelfth from the last' '
more_switches && more_switches &&
git checkout @{-12} && 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' ' test_expect_success 'merge base test setup' '
@ -98,19 +108,28 @@ test_expect_success 'merge base test setup' '
test_expect_success 'another...main' ' test_expect_success 'another...main' '
git checkout another && git checkout another &&
git checkout another...main && 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' ' test_expect_success '...main' '
git checkout another && git checkout another &&
git checkout ...main && 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...' ' test_expect_success 'main...' '
git checkout another && git checkout another &&
git checkout main... && 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' ' 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 checkout other &&
git rebase main && git rebase main &&
git checkout - && 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' ' 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 checkout other &&
git rebase main moodle && git rebase main moodle &&
git checkout - && 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' ' 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 checkout other &&
git rebase -i main && git rebase -i main &&
git checkout - && 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' ' 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 checkout other &&
git rebase main foodle && git rebase main foodle &&
git checkout - && git checkout - &&
test "z$(git symbolic-ref HEAD)" = "zrefs/heads/main" test_cmp_symbolic_HEAD_ref main
' '
test_done 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" Also tested are "git add -u" without limiting, and "git add -u"
without contents changes, and other conditions' without contents changes, and other conditions'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh
test_expect_success setup ' test_expect_success setup '
@ -41,20 +40,28 @@ test_expect_success update '
' '
test_expect_success 'update noticed a removal' ' 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_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_expect_success 'update did not touch other tracked files' '
test "$(git diff-files --name-status check)" = "M check" && echo "M check" >expect &&
test "$(git diff-files --name-status top)" = "M top" 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_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' ' 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_expect_success 'change gets noticed' '
git diff-files --name-status dir1 >out &&
test "$(git diff-files --name-status dir1)" = "" test_must_be_empty out
' '
test_expect_success 'non-qualified update in subdir updates from the root' ' 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' ' test_expect_success 'add everything changed' '
git add -u && 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 && touch check &&
git add -u && 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 && touch check &&
git add 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 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh
create_repo () { create_repo () {
@ -65,7 +64,8 @@ create_repo () {
test_notes () { test_notes () {
count=$1 && count=$1 &&
git config core.notesRef refs/notes/commits && git config core.notesRef refs/notes/commits &&
git log | grep "^ " >output && git log >tmp &&
grep "^ " tmp >output &&
i=$count && i=$count &&
while test $i -gt 0 while test $i -gt 0
do do
@ -90,7 +90,7 @@ write_script time_notes <<\EOF
unset GIT_NOTES_REF unset GIT_NOTES_REF
;; ;;
esac esac
git log git log || exit $?
i=$(($i+1)) i=$(($i+1))
done >/dev/null done >/dev/null
EOF EOF

View File

@ -5,7 +5,6 @@ test_description='Test commit notes organized in subtrees'
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh
number_of_commits=100 number_of_commits=100
@ -79,7 +78,7 @@ test_sha1_based () {
( (
start_note_commit && start_note_commit &&
nr=$number_of_commits && nr=$number_of_commits &&
git rev-list refs/heads/main | git rev-list refs/heads/main >out &&
while read sha1; do while read sha1; do
note_path=$(echo "$sha1" | sed "$1") note_path=$(echo "$sha1" | sed "$1")
cat <<INPUT_END && cat <<INPUT_END &&
@ -91,9 +90,9 @@ EOF
INPUT_END INPUT_END
nr=$(($nr-1)) nr=$(($nr-1))
done done <out
) | ) >gfi &&
git fast-import --quiet git fast-import --quiet <gfi
} }
test_expect_success 'test notes in 2/38-fanout' 'test_sha1_based "s|^..|&/|"' 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_description='Test that adding/removing many notes triggers automatic fanout restructuring'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh
path_has_fanout() { path_has_fanout() {
@ -24,7 +23,7 @@ touched_one_note_with_fanout() {
all_notes_have_fanout() { all_notes_have_fanout() {
notes_commit=$1 && notes_commit=$1 &&
fanout=$2 && fanout=$2 &&
git ls-tree -r --name-only $notes_commit 2>/dev/null | git ls-tree -r --name-only $notes_commit |
while read path while read path
do do
path_has_fanout $path $fanout || return 1 path_has_fanout $path $fanout || return 1
@ -51,8 +50,9 @@ test_expect_success 'creating many notes with git-notes' '
done done
' '
test_expect_success 'many notes created correctly with git-notes' ' test_expect_success !SANITIZE_LEAK 'many notes created correctly with git-notes' '
git log | grep "^ " > output && git log >output.raw &&
grep "^ " output.raw >output &&
i=$num_notes && i=$num_notes &&
while test $i -gt 0 while test $i -gt 0
do 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' ' test_expect_success 'deleting most notes with git-notes' '
remove_notes=285 && remove_notes=285 &&
i=0 && i=0 &&
git rev-list HEAD | git rev-list HEAD >revs &&
while test $i -lt $remove_notes && read sha1 while test $i -lt $remove_notes && read sha1
do do
i=$(($i + 1)) && i=$(($i + 1)) &&
test_tick && test_tick &&
git notes remove "$sha1" 2>/dev/null || return 1 git notes remove "$sha1" || return 1
done done <revs
' '
test_expect_success 'most notes deleted correctly with git-notes' ' 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' ' test_expect_success 'GIT_EXTERNAL_DIFF environment' '
cat >expect <<-EOF &&
GIT_EXTERNAL_DIFF=echo git diff | { file $(git rev-parse --verify HEAD:file) 100644 file $(test_oid zero) 100644
read path oldfile oldhex oldmode newfile newhex newmode && EOF
test "z$path" = zfile && GIT_EXTERNAL_DIFF=echo git diff >out &&
test "z$oldmode" = z100644 && cut -d" " -f1,3- <out >actual &&
test "z$newhex" = "z$ZERO_OID" && test_cmp expect actual
test "z$newmode" = z100644 &&
oh=$(git rev-parse --verify HEAD:file) &&
test "z$oh" = "z$oldhex"
}
' '
test_expect_success 'GIT_EXTERNAL_DIFF environment should apply only to diff' ' test_expect_success !SANITIZE_LEAK 'GIT_EXTERNAL_DIFF environment should apply only to diff' '
GIT_EXTERNAL_DIFF=echo git log -p -1 HEAD >out &&
GIT_EXTERNAL_DIFF=echo git log -p -1 HEAD | grep "^diff --git a/file b/file" out
grep "^diff --git a/file b/file"
' '
test_expect_success 'GIT_EXTERNAL_DIFF environment and --no-ext-diff' ' test_expect_success 'GIT_EXTERNAL_DIFF environment and --no-ext-diff' '
GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff >out &&
GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff | grep "^diff --git a/file b/file" out
grep "^diff --git a/file b/file"
' '
test_expect_success SYMLINKS 'typechange diff' ' test_expect_success SYMLINKS 'typechange diff' '
rm -f file && rm -f file &&
ln -s elif file && ln -s elif file &&
GIT_EXTERNAL_DIFF=echo git diff | {
read path oldfile oldhex oldmode newfile newhex newmode && cat >expect <<-EOF &&
test "z$path" = zfile && file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 120000
test "z$oldmode" = z100644 && EOF
test "z$newhex" = "z$ZERO_OID" && GIT_EXTERNAL_DIFF=echo git diff >out &&
test "z$newmode" = z120000 && cut -d" " -f1,3-4,6- <out >actual &&
oh=$(git rev-parse --verify HEAD:file) && test_cmp expect actual &&
test "z$oh" = "z$oldhex"
} &&
GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff >actual && GIT_EXTERNAL_DIFF=echo git diff --no-ext-diff >actual &&
git diff >expect && git diff >expect &&
test_cmp expect actual test_cmp expect actual
@ -72,27 +65,25 @@ test_expect_success 'diff.external' '
git reset --hard && git reset --hard &&
echo third >file && echo third >file &&
test_config diff.external echo && test_config diff.external echo &&
git diff | {
read path oldfile oldhex oldmode newfile newhex newmode && cat >expect <<-EOF &&
test "z$path" = zfile && file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
test "z$oldmode" = z100644 && EOF
test "z$newhex" = "z$ZERO_OID" && git diff >out &&
test "z$newmode" = z100644 && cut -d" " -f1,3-4,6- <out >actual &&
oh=$(git rev-parse --verify HEAD:file) && test_cmp expect actual
test "z$oh" = "z$oldhex"
}
' '
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 && test_config diff.external echo &&
git log -p -1 HEAD | git log -p -1 HEAD >out &&
grep "^diff --git a/file b/file" grep "^diff --git a/file b/file" out
' '
test_expect_success 'diff.external and --no-ext-diff' ' test_expect_success 'diff.external and --no-ext-diff' '
test_config diff.external echo && test_config diff.external echo &&
git diff --no-ext-diff | git diff --no-ext-diff >out &&
grep "^diff --git a/file b/file" grep "^diff --git a/file b/file" out
' '
test_expect_success 'diff attribute' ' test_expect_success 'diff attribute' '
@ -103,29 +94,23 @@ test_expect_success 'diff attribute' '
echo >.gitattributes "file diff=parrot" && echo >.gitattributes "file diff=parrot" &&
git diff | { cat >expect <<-EOF &&
read path oldfile oldhex oldmode newfile newhex newmode && file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
test "z$path" = zfile && EOF
test "z$oldmode" = z100644 && git diff >out &&
test "z$newhex" = "z$ZERO_OID" && cut -d" " -f1,3-4,6- <out >actual &&
test "z$newmode" = z100644 && test_cmp expect actual
oh=$(git rev-parse --verify HEAD:file) &&
test "z$oh" = "z$oldhex"
}
' '
test_expect_success 'diff attribute should apply only to diff' ' test_expect_success !SANITIZE_LEAK 'diff attribute should apply only to diff' '
git log -p -1 HEAD >out &&
git log -p -1 HEAD | grep "^diff --git a/file b/file" out
grep "^diff --git a/file b/file"
' '
test_expect_success 'diff attribute and --no-ext-diff' ' test_expect_success 'diff attribute and --no-ext-diff' '
git diff --no-ext-diff >out &&
git diff --no-ext-diff | grep "^diff --git a/file b/file" out
grep "^diff --git a/file b/file"
' '
@ -136,48 +121,55 @@ test_expect_success 'diff attribute' '
echo >.gitattributes "file diff=color" && echo >.gitattributes "file diff=color" &&
git diff | { cat >expect <<-EOF &&
read path oldfile oldhex oldmode newfile newhex newmode && file $(git rev-parse --verify HEAD:file) 100644 $(test_oid zero) 100644
test "z$path" = zfile && EOF
test "z$oldmode" = z100644 && git diff >out &&
test "z$newhex" = "z$ZERO_OID" && cut -d" " -f1,3-4,6- <out >actual &&
test "z$newmode" = z100644 && test_cmp expect actual
oh=$(git rev-parse --verify HEAD:file) &&
test "z$oh" = "z$oldhex"
}
' '
test_expect_success 'diff attribute should apply only to diff' ' test_expect_success !SANITIZE_LEAK 'diff attribute should apply only to diff' '
git log -p -1 HEAD >out &&
git log -p -1 HEAD | grep "^diff --git a/file b/file" out
grep "^diff --git a/file b/file"
' '
test_expect_success 'diff attribute and --no-ext-diff' ' test_expect_success 'diff attribute and --no-ext-diff' '
git diff --no-ext-diff >out &&
git diff --no-ext-diff | grep "^diff --git a/file b/file" out
grep "^diff --git a/file b/file"
' '
test_expect_success 'GIT_EXTERNAL_DIFF trumps diff.external' ' test_expect_success 'GIT_EXTERNAL_DIFF trumps diff.external' '
>.gitattributes && >.gitattributes &&
test_config diff.external "echo ext-global" && 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_expect_success 'attributes trump GIT_EXTERNAL_DIFF and diff.external' '
test_config diff.foo.command "echo ext-attribute" && test_config diff.foo.command "echo ext-attribute" &&
test_config diff.external "echo ext-global" && test_config diff.external "echo ext-global" &&
echo "file diff=foo" >.gitattributes && 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' ' test_expect_success 'no diff with -diff' '
echo >.gitattributes "file -diff" && echo >.gitattributes "file -diff" &&
git diff | grep Binary git diff >out &&
grep Binary out
' '
echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file echo NULZbetweenZwords | perl -pe 'y/Z/\000/' > file
@ -217,7 +209,12 @@ test_expect_success 'GIT_EXTERNAL_DIFF generates pretty paths' '
touch file.ext && touch file.ext &&
git add file.ext && git add file.ext &&
echo with extension > 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 && git update-index --force-remove file.ext &&
rm file.ext rm file.ext
' '

View File

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

View File

@ -2,8 +2,6 @@
test_description='apply a patch that is larger than the preimage' test_description='apply a patch that is larger than the preimage'
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh
cat >F <<\EOF cat >F <<\EOF
@ -41,20 +39,8 @@ test_expect_success setup '
' '
test_expect_success 'apply should fail gracefully' ' test_expect_success 'apply should fail gracefully' '
test_must_fail git apply --index patch &&
if git apply --index patch test_path_is_missing .git/index.lock
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_done test_done

View File

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

View File

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

View File

@ -12,7 +12,9 @@ note () {
} }
unnote () { 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 && shift &&
param="$*" && param="$*" &&
test_expect_$outcome "log $param" ' test_expect_$outcome "log $param" '
git log --pretty="$FMT" --parents $param | git log --pretty="$FMT" --parents $param >out &&
unnote >actual && unnote >actual <out &&
sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual && sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual &&
test_cmp expect check 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 check_result 'E C B A' --full-history E -- lost
test_expect_success 'full history simplification without parent' ' test_expect_success 'full history simplification without parent' '
printf "%s\n" E C B A >expect && printf "%s\n" E C B A >expect &&
git log --pretty="$FMT" --full-history E -- lost | git log --pretty="$FMT" --full-history E -- lost >out &&
unnote >actual && unnote >actual <out &&
sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual && sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual &&
test_cmp expect check 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)" broken_tree="$(git hash-object -w --literally -t tree broken-tree)"
' '
test_expect_failure 'traverse unexpected non-blob entry (lone)' ' test_expect_success !SANITIZE_LEAK 'TODO (should fail!): traverse unexpected non-blob entry (lone)' '
test_must_fail git rev-list --objects $broken_tree 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)' ' 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) tag=$(git hash-object -w --literally -t tag broken-tag)
' '
test_expect_failure 'traverse unexpected non-blob tag (lone)' ' test_expect_success !SANITIZE_LEAK 'TODO (should fail!): traverse unexpected non-blob tag (lone)' '
test_must_fail git rev-list --objects $tag git rev-list --objects $tag
' '
test_expect_success 'traverse unexpected non-blob tag (seen)' ' test_expect_success 'traverse unexpected non-blob tag (seen)' '

View File

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

View File

@ -11,9 +11,19 @@ test_expect_success GETTEXT_LOCALE 'setup' '
export LC_ALL export LC_ALL
' '
test_have_prereq GETTEXT_LOCALE && test_expect_success GETTEXT_LOCALE 'setup REGEX_LOCALE prerequisite' '
test-tool regex "HALLÓ" "Halló" ICASE && # This "test-tool" invocation is identical...
if test-tool regex "HALLÓ" "Halló" ICASE
then
test_set_prereq REGEX_LOCALE 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' ' test_expect_success REGEX_LOCALE 'grep literal string, no -F' '
git grep -i "TILRAUN: Halló Heimur!" && git grep -i "TILRAUN: Halló Heimur!" &&