1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-20 08:46:07 +02:00

Merge branch 'ab/avoid-losing-exit-codes-in-tests'

Test clean-up.

* ab/avoid-losing-exit-codes-in-tests:
  tests: don't lose misc "git" exit codes
  tests: don't lose exit status with "test <op> $(git ...)"
  tests: don't lose "git" exit codes in "! ( git ... | grep )"
  tests: don't lose exit status with "(cd ...; test <op> $(git ...))"
  t/lib-patch-mode.sh: fix ignored exit codes
  auto-crlf tests: don't lose exit code in loops and outside tests
This commit is contained in:
Junio C Hamano 2023-03-19 15:03:10 -07:00
commit 6f54213718
21 changed files with 245 additions and 112 deletions

View File

@ -228,8 +228,12 @@ test_http_push_nonff () {
git commit -a -m path2 --amend &&
test_must_fail git push -v origin >output 2>&1 &&
(cd "$REMOTE_REPO" &&
test $HEAD = $(git rev-parse --verify HEAD))
(
cd "$REMOTE_REPO" &&
echo "$HEAD" >expect &&
git rev-parse --verify HEAD >actual &&
test_cmp expect actual
)
'
test_expect_success 'non-fast-forward push show ref status' '

View File

@ -29,8 +29,12 @@ set_and_save_state () {
# verify_state <path> <expected-worktree-content> <expected-index-content>
verify_state () {
test "$(cat "$1")" = "$2" &&
test "$(git show :"$1")" = "$3"
echo "$2" >expect &&
test_cmp expect "$1" &&
echo "$3" >expect &&
git show :"$1" >actual &&
test_cmp expect actual
}
# verify_saved_state <path>
@ -46,5 +50,6 @@ save_head () {
}
verify_saved_head () {
test "$(cat _head)" = "$(git rev-parse HEAD)"
git rev-parse HEAD >actual &&
test_cmp _head actual
}

View File

@ -168,20 +168,16 @@ replace_gitfile_with_git_dir () {
# Note that this only supports submodules at the root level of the
# superproject, with the default name, i.e. same as its path.
test_git_directory_is_unchanged () {
(
cd ".git/modules/$1" &&
# does core.worktree point at the right place?
test "$(git config core.worktree)" = "../../../$1" &&
# remove it temporarily before comparing, as
# "$1/.git/config" lacks it...
git config --unset core.worktree
) &&
# does core.worktree point at the right place?
echo "../../../$1" >expect &&
git -C ".git/modules/$1" config core.worktree >actual &&
test_cmp expect actual &&
# remove it temporarily before comparing, as
# "$1/.git/config" lacks it...
git -C ".git/modules/$1" config --unset core.worktree &&
diff -r ".git/modules/$1" "$1/.git" &&
(
# ... and then restore.
cd ".git/modules/$1" &&
git config core.worktree "../../../$1"
)
# ... and then restore.
git -C ".git/modules/$1" config core.worktree "../../../$1"
}
test_git_directory_exists () {
@ -189,7 +185,9 @@ test_git_directory_exists () {
if test -f sub1/.git
then
# does core.worktree point at the right place?
test "$(git -C .git/modules/$1 config core.worktree)" = "../../../$1"
echo "../../../$1" >expect &&
git -C ".git/modules/$1" config core.worktree >actual &&
test_cmp expect actual
fi
}

View File

@ -598,9 +598,14 @@ test_expect_success 'invalid default branch name' '
test_expect_success 'branch -m with the initial branch' '
git init rename-initial &&
git -C rename-initial branch -m renamed &&
test renamed = $(git -C rename-initial symbolic-ref --short HEAD) &&
echo renamed >expect &&
git -C rename-initial symbolic-ref --short HEAD >actual &&
test_cmp expect actual &&
git -C rename-initial branch -m renamed again &&
test again = $(git -C rename-initial symbolic-ref --short HEAD)
echo again >expect &&
git -C rename-initial symbolic-ref --short HEAD >actual &&
test_cmp expect actual
'
test_done

View File

@ -33,7 +33,9 @@ test_expect_success 'bad setup: invalid .git file path' '
test_expect_success 'final setup + check rev-parse --git-dir' '
echo "gitdir: $REAL" >.git &&
test "$REAL" = "$(git rev-parse --git-dir)"
echo "$REAL" >expect &&
git rev-parse --git-dir >actual &&
test_cmp expect actual
'
test_expect_success 'check hash-object' '

View File

@ -70,7 +70,8 @@ create_NNO_MIX_files () {
cp CRLF ${pfx}_CRLF.txt &&
cp CRLF_mix_LF ${pfx}_CRLF_mix_LF.txt &&
cp LF_mix_CR ${pfx}_LF_mix_CR.txt &&
cp CRLF_nul ${pfx}_CRLF_nul.txt
cp CRLF_nul ${pfx}_CRLF_nul.txt ||
return 1
done
done
done
@ -101,7 +102,8 @@ commit_check_warn () {
do
fname=${pfx}_$f.txt &&
cp $f $fname &&
git -c core.autocrlf=$crlf add $fname 2>"${pfx}_$f.err"
git -c core.autocrlf=$crlf add $fname 2>"${pfx}_$f.err" ||
return 1
done &&
git commit -m "core.autocrlf $crlf" &&
check_warning "$lfname" ${pfx}_LF.err &&
@ -121,15 +123,19 @@ commit_chk_wrnNNO () {
lfmixcr=$1 ; shift
crlfnul=$1 ; shift
pfx=NNO_attr_${attr}_aeol_${aeol}_${crlf}
#Commit files on top of existing file
create_gitattributes "$attr" $aeol &&
for f in LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
do
fname=${pfx}_$f.txt &&
cp $f $fname &&
printf Z >>"$fname" &&
git -c core.autocrlf=$crlf add $fname 2>"${pfx}_$f.err"
done
test_expect_success 'setup commit NNO files' '
#Commit files on top of existing file
create_gitattributes "$attr" $aeol &&
for f in LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
do
fname=${pfx}_$f.txt &&
cp $f $fname &&
printf Z >>"$fname" &&
git -c core.autocrlf=$crlf add $fname 2>"${pfx}_$f.err" ||
return 1
done
'
test_expect_success "commit NNO files crlf=$crlf attr=$attr LF" '
check_warning "$lfwarn" ${pfx}_LF.err
@ -163,15 +169,19 @@ commit_MIX_chkwrn () {
lfmixcr=$1 ; shift
crlfnul=$1 ; shift
pfx=MIX_attr_${attr}_aeol_${aeol}_${crlf}
#Commit file with CLRF_mix_LF on top of existing file
create_gitattributes "$attr" $aeol &&
for f in LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
do
fname=${pfx}_$f.txt &&
cp CRLF_mix_LF $fname &&
printf Z >>"$fname" &&
git -c core.autocrlf=$crlf add $fname 2>"${pfx}_$f.err"
done
test_expect_success 'setup commit file with mixed EOL' '
#Commit file with CLRF_mix_LF on top of existing file
create_gitattributes "$attr" $aeol &&
for f in LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
do
fname=${pfx}_$f.txt &&
cp CRLF_mix_LF $fname &&
printf Z >>"$fname" &&
git -c core.autocrlf=$crlf add $fname 2>"${pfx}_$f.err" ||
return 1
done
'
test_expect_success "commit file with mixed EOL onto LF crlf=$crlf attr=$attr" '
check_warning "$lfwarn" ${pfx}_LF.err
@ -289,17 +299,17 @@ checkout_files () {
lfmixcrlf=$1 ; shift
lfmixcr=$1 ; shift
crlfnul=$1 ; shift
create_gitattributes "$attr" $ident $aeol &&
git config core.autocrlf $crlf &&
test_expect_success "setup config for checkout attr=$attr ident=$ident aeol=$aeol core.autocrlf=$crlf" '
create_gitattributes "$attr" $ident $aeol &&
git config core.autocrlf $crlf
'
pfx=eol_${ceol}_crlf_${crlf}_attr_${attr}_ &&
for f in LF CRLF LF_mix_CR CRLF_mix_LF LF_nul
do
rm crlf_false_attr__$f.txt &&
if test -z "$ceol"; then
git checkout -- crlf_false_attr__$f.txt
else
git -c core.eol=$ceol checkout -- crlf_false_attr__$f.txt
fi
test_expect_success "setup $f checkout ${ceol:+ with -c core.eol=$ceol}" '
rm -f crlf_false_attr__$f.txt &&
git ${ceol:+-c core.eol=$ceol} checkout -- crlf_false_attr__$f.txt
'
done
test_expect_success "ls-files --eol attr=$attr $ident aeol=$aeol core.autocrlf=$crlf core.eol=$ceol" '

View File

@ -15,12 +15,22 @@ test_expect_success SYMLINKS setup '
test_expect_success SYMLINKS 'update-index --add beyond symlinks' '
test_must_fail git update-index --add c/d &&
! ( git ls-files | grep c/d )
cat >expect <<-\EOF &&
a
b/d
EOF
git ls-files >actual &&
test_cmp expect actual
'
test_expect_success SYMLINKS 'add beyond symlinks' '
test_must_fail git add c/d &&
! ( git ls-files | grep c/d )
cat >expect <<-\EOF &&
a
b/d
EOF
git ls-files >actual &&
test_cmp expect actual
'
test_done

View File

@ -10,20 +10,27 @@ TEST_PASSES_SANITIZE_LEAK=true
norm_path() {
expected=$(test-tool path-utils print_path "$2")
test_expect_success $3 "normalize path: $1 => $2" \
"test \"\$(test-tool path-utils normalize_path_copy '$1')\" = '$expected'"
test_expect_success $3 "normalize path: $1 => $2" "
echo '$expected' >expect &&
test-tool path-utils normalize_path_copy '$1' >actual &&
test_cmp expect actual
"
}
relative_path() {
expected=$(test-tool path-utils print_path "$3")
test_expect_success $4 "relative path: $1 $2 => $3" \
"test \"\$(test-tool path-utils relative_path '$1' '$2')\" = '$expected'"
test_expect_success $4 "relative path: $1 $2 => $3" "
echo '$expected' >expect &&
test-tool path-utils relative_path '$1' '$2' >actual &&
test_cmp expect actual
"
}
test_submodule_relative_url() {
test_expect_success "test_submodule_relative_url: $1 $2 $3 => $4" "
actual=\$(test-tool submodule resolve-relative-url '$1' '$2' '$3') &&
test \"\$actual\" = '$4'
echo '$4' >expect &&
test-tool submodule resolve-relative-url '$1' '$2' '$3' >actual &&
test_cmp expect actual
"
}
@ -64,9 +71,11 @@ ancestor() {
expected=$(($expected-$rootslash+$rootoff))
;;
esac
test_expect_success $4 "longest ancestor: $1 $2 => $expected" \
"actual=\$(test-tool path-utils longest_ancestor_length '$1' '$2') &&
test \"\$actual\" = '$expected'"
test_expect_success $4 "longest ancestor: $1 $2 => $expected" "
echo '$expected' >expect &&
test-tool path-utils longest_ancestor_length '$1' '$2' >actual &&
test_cmp expect actual
"
}
# Some absolute path tests should be skipped on Windows due to path mangling
@ -166,8 +175,10 @@ ancestor D:/Users/me C:/ -1 MINGW
ancestor //server/share/my-directory //server/share/ 14 MINGW
test_expect_success 'strip_path_suffix' '
test c:/msysgit = $(test-tool path-utils strip_path_suffix \
c:/msysgit/libexec//git-core libexec/git-core)
echo c:/msysgit >expect &&
test-tool path-utils strip_path_suffix \
c:/msysgit/libexec//git-core libexec/git-core >actual &&
test_cmp expect actual
'
test_expect_success 'absolute path rejects the empty string' '
@ -188,35 +199,61 @@ test_expect_success 'real path rejects the empty string' '
'
test_expect_success POSIX 'real path works on absolute paths 1' '
echo / >expect &&
test-tool path-utils real_path "/" >actual &&
test_cmp expect actual &&
nopath="hopefully-absent-path" &&
test "/" = "$(test-tool path-utils real_path "/")" &&
test "/$nopath" = "$(test-tool path-utils real_path "/$nopath")"
echo "/$nopath" >expect &&
test-tool path-utils real_path "/$nopath" >actual &&
test_cmp expect actual
'
test_expect_success 'real path works on absolute paths 2' '
nopath="hopefully-absent-path" &&
# Find an existing top-level directory for the remaining tests:
d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
test "$d" = "$(test-tool path-utils real_path "$d")" &&
test "$d/$nopath" = "$(test-tool path-utils real_path "$d/$nopath")"
echo "$d" >expect &&
test-tool path-utils real_path "$d" >actual &&
test_cmp expect actual &&
nopath="hopefully-absent-path" &&
echo "$d/$nopath" >expect &&
test-tool path-utils real_path "$d/$nopath" >actual &&
test_cmp expect actual
'
test_expect_success POSIX 'real path removes extra leading slashes' '
echo "/" >expect &&
test-tool path-utils real_path "///" >actual &&
test_cmp expect actual &&
nopath="hopefully-absent-path" &&
test "/" = "$(test-tool path-utils real_path "///")" &&
test "/$nopath" = "$(test-tool path-utils real_path "///$nopath")" &&
echo "/$nopath" >expect &&
test-tool path-utils real_path "///$nopath" >actual &&
test_cmp expect actual &&
# Find an existing top-level directory for the remaining tests:
d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
test "$d" = "$(test-tool path-utils real_path "//$d")" &&
test "$d/$nopath" = "$(test-tool path-utils real_path "//$d/$nopath")"
echo "$d" >expect &&
test-tool path-utils real_path "//$d" >actual &&
test_cmp expect actual &&
echo "$d/$nopath" >expect &&
test-tool path-utils real_path "//$d/$nopath" >actual &&
test_cmp expect actual
'
test_expect_success 'real path removes other extra slashes' '
nopath="hopefully-absent-path" &&
# Find an existing top-level directory for the remaining tests:
d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
test "$d" = "$(test-tool path-utils real_path "$d///")" &&
test "$d/$nopath" = "$(test-tool path-utils real_path "$d///$nopath")"
echo "$d" >expect &&
test-tool path-utils real_path "$d///" >actual &&
test_cmp expect actual &&
nopath="hopefully-absent-path" &&
echo "$d/$nopath" >expect &&
test-tool path-utils real_path "$d///$nopath" >actual &&
test_cmp expect actual
'
test_expect_success SYMLINKS 'real path works on symlinks' '
@ -227,19 +264,29 @@ test_expect_success SYMLINKS 'real path works on symlinks' '
mkdir third &&
dir="$(cd .git && pwd -P)" &&
dir2=third/../second/other/.git &&
test "$dir" = "$(test-tool path-utils real_path $dir2)" &&
echo "$dir" >expect &&
test-tool path-utils real_path $dir2 >actual &&
test_cmp expect actual &&
file="$dir"/index &&
test "$file" = "$(test-tool path-utils real_path $dir2/index)" &&
echo "$file" >expect &&
test-tool path-utils real_path $dir2/index >actual &&
test_cmp expect actual &&
basename=blub &&
test "$dir/$basename" = "$(cd .git && test-tool path-utils real_path "$basename")" &&
echo "$dir/$basename" >expect &&
test-tool -C .git path-utils real_path "$basename" >actual &&
test_cmp expect actual &&
ln -s ../first/file .git/syml &&
sym="$(cd first && pwd -P)"/file &&
test "$sym" = "$(test-tool path-utils real_path "$dir2/syml")"
echo "$sym" >expect &&
test-tool path-utils real_path "$dir2/syml" >actual &&
test_cmp expect actual
'
test_expect_success SYMLINKS 'prefix_path works with absolute paths to work tree symlinks' '
ln -s target symlink &&
test "$(test-tool path-utils prefix_path prefix "$(pwd)/symlink")" = "symlink"
echo "symlink" >expect &&
test-tool path-utils prefix_path prefix "$(pwd)/symlink" >actual &&
test_cmp expect actual
'
test_expect_success 'prefix_path works with only absolute path to work tree' '
@ -255,7 +302,10 @@ test_expect_success 'prefix_path rejects absolute path to dir with same beginnin
test_expect_success SYMLINKS 'prefix_path works with absolute path to a symlink to work tree having same beginning as work tree' '
git init repo &&
ln -s repo repolink &&
test "a" = "$(cd repo && test-tool path-utils prefix_path prefix "$(pwd)/../repolink/a")"
echo "a" >expect &&
repo_path="$(cd repo && pwd)" &&
test-tool -C repo path-utils prefix_path prefix "$repo_path/../repolink/a" >actual &&
test_cmp expect actual
'
relative_path /foo/a/b/c/ /foo/a/b/ c/

View File

@ -12,7 +12,9 @@ test_expect_success 'branch -d @{-1}' '
test_commit A &&
git checkout -b junk &&
git checkout - &&
test "$(git symbolic-ref HEAD)" = refs/heads/main &&
echo refs/heads/main >expect &&
git symbolic-ref HEAD >actual &&
test_cmp expect actual &&
git branch -d @{-1} &&
test_must_fail git rev-parse --verify refs/heads/junk
'
@ -21,7 +23,9 @@ test_expect_success 'branch -d @{-12} when there is not enough switches yet' '
git reflog expire --expire=now &&
git checkout -b junk2 &&
git checkout - &&
test "$(git symbolic-ref HEAD)" = refs/heads/main &&
echo refs/heads/main >expect &&
git symbolic-ref HEAD >actual &&
test_cmp expect actual &&
test_must_fail git branch -d @{-12} &&
git rev-parse --verify refs/heads/main
'

View File

@ -33,7 +33,8 @@ test_expect_success 'symbolic-ref refuses non-ref for HEAD' '
reset_to_sane
test_expect_success 'symbolic-ref refuses bare sha1' '
test_must_fail git symbolic-ref HEAD $(git rev-parse HEAD)
rev=$(git rev-parse HEAD) &&
test_must_fail git symbolic-ref HEAD "$rev"
'
reset_to_sane

View File

@ -6,8 +6,12 @@ TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
test_prefix() {
test_expect_success "$1" \
"test '$2' = \"\$(git rev-parse --show-prefix)\""
local expect="$2" &&
test_expect_success "$1: git rev-parse --show-prefix is '$2'" '
echo "$expect" >expect &&
git rev-parse --show-prefix >actual &&
test_cmp expect actual
'
}
test_fail() {

View File

@ -22,8 +22,10 @@ test_expect_success \
git checkout-index symlink &&
test -f symlink'
test_expect_success \
'the file must be the blob we added during the setup' '
test "$(git hash-object -t blob symlink)" = $l'
test_expect_success 'the file must be the blob we added during the setup' '
echo "$l" >expect &&
git hash-object -t blob symlink >actual &&
test_cmp expect actual
'
test_done

View File

@ -245,9 +245,13 @@ test_expect_success 'git branch -M baz bam should succeed within a worktree in w
(
cd bazdir &&
git branch -M baz bam &&
test $(git rev-parse --abbrev-ref HEAD) = bam
echo bam >expect &&
git rev-parse --abbrev-ref HEAD >actual &&
test_cmp expect actual
) &&
test $(git rev-parse --abbrev-ref HEAD) = bam &&
echo bam >expect &&
git rev-parse --abbrev-ref HEAD >actual &&
test_cmp expect actual &&
rm -r bazdir &&
git worktree prune
'

View File

@ -106,24 +106,32 @@ test_expect_success '.gitignore test setup' '
test_expect_success '.gitignore is honored' '
git add . &&
! (git ls-files | grep "\\.ig")
git ls-files >files &&
sed -n "/\\.ig/p" <files >actual &&
test_must_be_empty actual
'
test_expect_success 'error out when attempting to add ignored ones without -f' '
test_must_fail git add a.?? &&
! (git ls-files | grep "\\.ig")
git ls-files >files &&
sed -n "/\\.ig/p" <files >actual &&
test_must_be_empty actual
'
test_expect_success 'error out when attempting to add ignored ones without -f' '
test_must_fail git add d.?? &&
! (git ls-files | grep "\\.ig")
git ls-files >files &&
sed -n "/\\.ig/p" <files >actual &&
test_must_be_empty actual
'
test_expect_success 'error out when attempting to add ignored ones but add others' '
touch a.if &&
test_must_fail git add a.?? &&
! (git ls-files | grep "\\.ig") &&
(git ls-files | grep a.if)
git ls-files >files &&
sed -n "/\\.ig/p" <files >actual &&
test_must_be_empty actual &&
grep a.if files
'
test_expect_success 'add ignored ones with -f' '

View File

@ -311,9 +311,11 @@ test_expect_success FILEMODE 'stage mode and hunk' '
echo content >>file &&
chmod +x file &&
printf "y\\ny\\n" | git add -p &&
git diff --cached file | grep "new mode" &&
git diff --cached file | grep "+content" &&
test -z "$(git diff file)"
git diff --cached file >out &&
grep "new mode" out &&
grep "+content" out &&
git diff file >out &&
test_must_be_empty out
'
# end of tests disabled when filemode is not usable

View File

@ -79,7 +79,9 @@ test_expect_success SYMLINKS 'pushing from symlinked subdir' '
git commit -m push ./file &&
git push
) &&
test push = $(git show HEAD:subdir/file)
echo push >expect &&
git show HEAD:subdir/file >actual &&
test_cmp expect actual
'
test_done

View File

@ -15,8 +15,12 @@ test_expect_success 'preparing origin repository' '
: >file && git add . && git commit -m1 &&
git clone --bare . a.git &&
git clone --bare . x &&
test "$(cd a.git && git config --bool core.bare)" = true &&
test "$(cd x && git config --bool core.bare)" = true &&
echo true >expect &&
git -C a.git config --bool core.bare >actual &&
test_cmp expect actual &&
echo true >expect &&
git -C x config --bool core.bare >actual &&
test_cmp expect actual &&
git bundle create b1.bundle --all &&
git bundle create b2.bundle main &&
mkdir dir &&
@ -29,7 +33,9 @@ test_expect_success 'preparing origin repository' '
test_expect_success 'local clone without .git suffix' '
git clone -l -s a b &&
(cd b &&
test "$(git config --bool core.bare)" = false &&
echo false >expect &&
git config --bool core.bare >actual &&
test_cmp expect actual &&
git fetch)
'

View File

@ -56,12 +56,15 @@ chmod a+x fake-editor.sh
test_expect_success 'interactive rebase with a dirty submodule' '
test submodule = $(git diff --name-only) &&
echo submodule >expect &&
git diff --name-only >actual &&
test_cmp expect actual &&
HEAD=$(git rev-parse HEAD) &&
GIT_EDITOR="\"$(pwd)/fake-editor.sh\"" EDITOR_TEXT="pick $HEAD" \
git rebase -i HEAD^ &&
test submodule = $(git diff --name-only)
echo submodule >expect &&
git diff --name-only >actual &&
test_cmp expect actual
'
test_expect_success 'rebase with dirty file and submodule fails' '
@ -83,11 +86,19 @@ test_expect_success 'stash with a dirty submodule' '
CURRENT=$(cd submodule && git rev-parse HEAD) &&
git stash &&
test new != $(cat file) &&
test submodule = $(git diff --name-only) &&
test $CURRENT = $(cd submodule && git rev-parse HEAD) &&
echo submodule >expect &&
git diff --name-only >actual &&
test_cmp expect actual &&
echo "$CURRENT" >expect &&
git -C submodule rev-parse HEAD >actual &&
test_cmp expect actual &&
git stash apply &&
test new = $(cat file) &&
test $CURRENT = $(cd submodule && git rev-parse HEAD)
echo "$CURRENT" >expect &&
git -C submodule rev-parse HEAD >actual &&
test_cmp expect actual
'

View File

@ -102,7 +102,9 @@ test_expect_success 'setup: commit-msg hook that always fails' '
'
commit_msg_is () {
test "$(git log --pretty=format:%s%b -1)" = "$1"
printf "%s" "$1" >expect &&
git log --pretty=format:%s%b -1 >actual &&
test_cmp expect actual
}
test_expect_success 'with failing hook' '

View File

@ -10,7 +10,8 @@ test_expect_success 'race to create orphan commit' '
test_must_fail env EDITOR=./hare-editor git commit --allow-empty -m tortoise -e &&
git show -s --pretty=format:%s >subject &&
grep hare subject &&
test -z "$(git show -s --pretty=format:%P)"
git show -s --pretty=format:%P >out &&
test_must_be_empty out
'
test_expect_success 'race to create non-orphan commit' '

View File

@ -1001,7 +1001,9 @@ test_expect_success 'log --committer does not search in timestamp' '
test_expect_success 'grep with CE_VALID file' '
git update-index --assume-unchanged t/t &&
rm t/t &&
test "$(git grep test)" = "t/t:test" &&
echo "t/t:test" >expect &&
git grep test >actual &&
test_cmp expect actual &&
git update-index --no-assume-unchanged t/t &&
git checkout t/t
'