1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-06-02 22:16:11 +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 && git commit -a -m path2 --amend &&
test_must_fail git push -v origin >output 2>&1 && 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' ' 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 <path> <expected-worktree-content> <expected-index-content>
verify_state () { verify_state () {
test "$(cat "$1")" = "$2" && echo "$2" >expect &&
test "$(git show :"$1")" = "$3" test_cmp expect "$1" &&
echo "$3" >expect &&
git show :"$1" >actual &&
test_cmp expect actual
} }
# verify_saved_state <path> # verify_saved_state <path>
@ -46,5 +50,6 @@ save_head () {
} }
verify_saved_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 # Note that this only supports submodules at the root level of the
# superproject, with the default name, i.e. same as its path. # superproject, with the default name, i.e. same as its path.
test_git_directory_is_unchanged () { test_git_directory_is_unchanged () {
( # does core.worktree point at the right place?
cd ".git/modules/$1" && echo "../../../$1" >expect &&
# does core.worktree point at the right place? git -C ".git/modules/$1" config core.worktree >actual &&
test "$(git config core.worktree)" = "../../../$1" && test_cmp expect actual &&
# remove it temporarily before comparing, as # remove it temporarily before comparing, as
# "$1/.git/config" lacks it... # "$1/.git/config" lacks it...
git config --unset core.worktree git -C ".git/modules/$1" config --unset core.worktree &&
) &&
diff -r ".git/modules/$1" "$1/.git" && diff -r ".git/modules/$1" "$1/.git" &&
( # ... and then restore.
# ... and then restore. git -C ".git/modules/$1" config core.worktree "../../../$1"
cd ".git/modules/$1" &&
git config core.worktree "../../../$1"
)
} }
test_git_directory_exists () { test_git_directory_exists () {
@ -189,7 +185,9 @@ test_git_directory_exists () {
if test -f sub1/.git if test -f sub1/.git
then then
# does core.worktree point at the right place? # 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 fi
} }

View File

@ -598,9 +598,14 @@ test_expect_success 'invalid default branch name' '
test_expect_success 'branch -m with the initial branch' ' test_expect_success 'branch -m with the initial branch' '
git init rename-initial && git init rename-initial &&
git -C rename-initial branch -m renamed && 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 && 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 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' ' test_expect_success 'final setup + check rev-parse --git-dir' '
echo "gitdir: $REAL" >.git && 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' ' test_expect_success 'check hash-object' '

View File

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

View File

@ -10,20 +10,27 @@ TEST_PASSES_SANITIZE_LEAK=true
norm_path() { norm_path() {
expected=$(test-tool path-utils print_path "$2") expected=$(test-tool path-utils print_path "$2")
test_expect_success $3 "normalize path: $1 => $2" \ test_expect_success $3 "normalize path: $1 => $2" "
"test \"\$(test-tool path-utils normalize_path_copy '$1')\" = '$expected'" echo '$expected' >expect &&
test-tool path-utils normalize_path_copy '$1' >actual &&
test_cmp expect actual
"
} }
relative_path() { relative_path() {
expected=$(test-tool path-utils print_path "$3") expected=$(test-tool path-utils print_path "$3")
test_expect_success $4 "relative path: $1 $2 => $3" \ test_expect_success $4 "relative path: $1 $2 => $3" "
"test \"\$(test-tool path-utils relative_path '$1' '$2')\" = '$expected'" echo '$expected' >expect &&
test-tool path-utils relative_path '$1' '$2' >actual &&
test_cmp expect actual
"
} }
test_submodule_relative_url() { test_submodule_relative_url() {
test_expect_success "test_submodule_relative_url: $1 $2 $3 => $4" " test_expect_success "test_submodule_relative_url: $1 $2 $3 => $4" "
actual=\$(test-tool submodule resolve-relative-url '$1' '$2' '$3') && echo '$4' >expect &&
test \"\$actual\" = '$4' test-tool submodule resolve-relative-url '$1' '$2' '$3' >actual &&
test_cmp expect actual
" "
} }
@ -64,9 +71,11 @@ ancestor() {
expected=$(($expected-$rootslash+$rootoff)) expected=$(($expected-$rootslash+$rootoff))
;; ;;
esac esac
test_expect_success $4 "longest ancestor: $1 $2 => $expected" \ test_expect_success $4 "longest ancestor: $1 $2 => $expected" "
"actual=\$(test-tool path-utils longest_ancestor_length '$1' '$2') && echo '$expected' >expect &&
test \"\$actual\" = '$expected'" 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 # 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 ancestor //server/share/my-directory //server/share/ 14 MINGW
test_expect_success 'strip_path_suffix' ' test_expect_success 'strip_path_suffix' '
test c:/msysgit = $(test-tool path-utils strip_path_suffix \ echo c:/msysgit >expect &&
c:/msysgit/libexec//git-core libexec/git-core) 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' ' 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' ' 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" && nopath="hopefully-absent-path" &&
test "/" = "$(test-tool path-utils real_path "/")" && echo "/$nopath" >expect &&
test "/$nopath" = "$(test-tool path-utils real_path "/$nopath")" test-tool path-utils real_path "/$nopath" >actual &&
test_cmp expect actual
' '
test_expect_success 'real path works on absolute paths 2' ' test_expect_success 'real path works on absolute paths 2' '
nopath="hopefully-absent-path" &&
# Find an existing top-level directory for the remaining tests: # Find an existing top-level directory for the remaining tests:
d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
test "$d" = "$(test-tool path-utils real_path "$d")" && echo "$d" >expect &&
test "$d/$nopath" = "$(test-tool path-utils real_path "$d/$nopath")" 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' ' 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" && nopath="hopefully-absent-path" &&
test "/" = "$(test-tool path-utils real_path "///")" && echo "/$nopath" >expect &&
test "/$nopath" = "$(test-tool path-utils real_path "///$nopath")" && test-tool path-utils real_path "///$nopath" >actual &&
test_cmp expect actual &&
# Find an existing top-level directory for the remaining tests: # Find an existing top-level directory for the remaining tests:
d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
test "$d" = "$(test-tool path-utils real_path "//$d")" && echo "$d" >expect &&
test "$d/$nopath" = "$(test-tool path-utils real_path "//$d/$nopath")" 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' ' test_expect_success 'real path removes other extra slashes' '
nopath="hopefully-absent-path" &&
# Find an existing top-level directory for the remaining tests: # Find an existing top-level directory for the remaining tests:
d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") &&
test "$d" = "$(test-tool path-utils real_path "$d///")" && echo "$d" >expect &&
test "$d/$nopath" = "$(test-tool path-utils real_path "$d///$nopath")" 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' ' test_expect_success SYMLINKS 'real path works on symlinks' '
@ -227,19 +264,29 @@ test_expect_success SYMLINKS 'real path works on symlinks' '
mkdir third && mkdir third &&
dir="$(cd .git && pwd -P)" && dir="$(cd .git && pwd -P)" &&
dir2=third/../second/other/.git && 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 && 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 && 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 && ln -s ../first/file .git/syml &&
sym="$(cd first && pwd -P)"/file && 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' ' test_expect_success SYMLINKS 'prefix_path works with absolute paths to work tree symlinks' '
ln -s target symlink && 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' ' 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' ' 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 && git init repo &&
ln -s repo repolink && 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/ 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 && test_commit A &&
git checkout -b junk && git checkout -b junk &&
git checkout - && 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} && git branch -d @{-1} &&
test_must_fail git rev-parse --verify refs/heads/junk 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 reflog expire --expire=now &&
git checkout -b junk2 && git checkout -b junk2 &&
git checkout - && 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} && test_must_fail git branch -d @{-12} &&
git rev-parse --verify refs/heads/main 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 reset_to_sane
test_expect_success 'symbolic-ref refuses bare sha1' ' 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 reset_to_sane

View File

@ -6,8 +6,12 @@ TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh . ./test-lib.sh
test_prefix() { test_prefix() {
test_expect_success "$1" \ local expect="$2" &&
"test '$2' = \"\$(git rev-parse --show-prefix)\"" 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() { test_fail() {

View File

@ -22,8 +22,10 @@ test_expect_success \
git checkout-index symlink && git checkout-index symlink &&
test -f symlink' test -f symlink'
test_expect_success \ test_expect_success 'the file must be the blob we added during the setup' '
'the file must be the blob we added during the setup' ' echo "$l" >expect &&
test "$(git hash-object -t blob symlink)" = $l' git hash-object -t blob symlink >actual &&
test_cmp expect actual
'
test_done 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 && cd bazdir &&
git branch -M baz bam && 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 && rm -r bazdir &&
git worktree prune git worktree prune
' '

View File

@ -106,24 +106,32 @@ test_expect_success '.gitignore test setup' '
test_expect_success '.gitignore is honored' ' test_expect_success '.gitignore is honored' '
git add . && 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_expect_success 'error out when attempting to add ignored ones without -f' '
test_must_fail git add a.?? && 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_expect_success 'error out when attempting to add ignored ones without -f' '
test_must_fail git add d.?? && 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' ' test_expect_success 'error out when attempting to add ignored ones but add others' '
touch a.if && touch a.if &&
test_must_fail git add a.?? && test_must_fail git add a.?? &&
! (git ls-files | grep "\\.ig") && git ls-files >files &&
(git ls-files | grep a.if) sed -n "/\\.ig/p" <files >actual &&
test_must_be_empty actual &&
grep a.if files
' '
test_expect_success 'add ignored ones with -f' ' 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 && echo content >>file &&
chmod +x file && chmod +x file &&
printf "y\\ny\\n" | git add -p && printf "y\\ny\\n" | git add -p &&
git diff --cached file | grep "new mode" && git diff --cached file >out &&
git diff --cached file | grep "+content" && grep "new mode" out &&
test -z "$(git diff file)" grep "+content" out &&
git diff file >out &&
test_must_be_empty out
' '
# end of tests disabled when filemode is not usable # 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 commit -m push ./file &&
git push git push
) && ) &&
test push = $(git show HEAD:subdir/file) echo push >expect &&
git show HEAD:subdir/file >actual &&
test_cmp expect actual
' '
test_done test_done

View File

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

View File

@ -56,12 +56,15 @@ chmod a+x fake-editor.sh
test_expect_success 'interactive rebase with a dirty submodule' ' 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) && HEAD=$(git rev-parse HEAD) &&
GIT_EDITOR="\"$(pwd)/fake-editor.sh\"" EDITOR_TEXT="pick $HEAD" \ GIT_EDITOR="\"$(pwd)/fake-editor.sh\"" EDITOR_TEXT="pick $HEAD" \
git rebase -i 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' ' 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) && CURRENT=$(cd submodule && git rev-parse HEAD) &&
git stash && git stash &&
test new != $(cat file) && test new != $(cat file) &&
test submodule = $(git diff --name-only) && echo submodule >expect &&
test $CURRENT = $(cd submodule && git rev-parse HEAD) && 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 && git stash apply &&
test new = $(cat file) && 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 () { 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' ' 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 && test_must_fail env EDITOR=./hare-editor git commit --allow-empty -m tortoise -e &&
git show -s --pretty=format:%s >subject && git show -s --pretty=format:%s >subject &&
grep hare 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' ' 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' ' test_expect_success 'grep with CE_VALID file' '
git update-index --assume-unchanged t/t && git update-index --assume-unchanged t/t &&
rm 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 update-index --no-assume-unchanged t/t &&
git checkout t/t git checkout t/t
' '