Code

Merge branch 'en/and-cascade-tests'
authorJunio C Hamano <gitster@pobox.com>
Wed, 24 Nov 2010 23:51:49 +0000 (15:51 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Nov 2010 23:51:49 +0000 (15:51 -0800)
* en/and-cascade-tests: (25 commits)
  t4124 (apply --whitespace): use test_might_fail
  t3404: do not use 'describe' to implement test_cmp_rev
  t3404 (rebase -i): introduce helper to check position of HEAD
  t3404 (rebase -i): move comment to description
  t3404 (rebase -i): unroll test_commit loops
  t3301 (notes): use test_expect_code for clarity
  t1400 (update-ref): use test_must_fail
  t1502 (rev-parse --parseopt): test exit code from "-h"
  t6022 (renaming merge): chain test commands with &&
  test-lib: introduce test_line_count to measure files
  tests: add missing &&, batch 2
  tests: add missing &&
  Introduce sane_unset and use it to ensure proper && chaining
  t7800 (difftool): add missing &&
  t7601 (merge-pull-config): add missing &&
  t7001 (mv): add missing &&
  t6016 (rev-list-graph-simplify-history): add missing &&
  t5602 (clone-remote-exec): add missing &&
  t4026 (color): remove unneeded and unchained command
  t4019 (diff-wserror): add lots of missing &&
  ...

Conflicts:
t/t7006-pager.sh

114 files changed:
t/README
t/annotate-tests.sh
t/t0000-basic.sh
t/t0001-init.sh
t/t0003-attributes.sh
t/t0020-crlf.sh
t/t0024-crlf-archive.sh
t/t0026-eol-config.sh
t/t0050-filesystem.sh
t/t1000-read-tree-m-3way.sh
t/t1001-read-tree-m-2way.sh
t/t1002-read-tree-m-u-2way.sh
t/t1011-read-tree-sparse-checkout.sh
t/t1200-tutorial.sh
t/t1302-repo-version.sh
t/t1400-update-ref.sh
t/t1401-symbolic-ref.sh
t/t1402-check-ref-format.sh
t/t1410-reflog.sh
t/t1450-fsck.sh
t/t1502-rev-parse-parseopt.sh
t/t1504-ceiling-dirs.sh
t/t2007-checkout-symlink.sh
t/t2016-checkout-patch.sh
t/t2017-checkout-orphan.sh
t/t2050-git-dir-relative.sh
t/t2101-update-index-reupdate.sh
t/t2200-add-update.sh
t/t3001-ls-files-others-exclude.sh
t/t3030-merge-recursive.sh
t/t3050-subprojects-fetch.sh
t/t3203-branch-output.sh
t/t3300-funny-names.sh
t/t3301-notes.sh
t/t3307-notes-man.sh
t/t3404-rebase-interactive.sh
t/t3406-rebase-message.sh
t/t3408-rebase-multi-line.sh
t/t3412-rebase-root.sh
t/t3417-rebase-whitespace-fix.sh
t/t3504-cherry-pick-rerere.sh
t/t3902-quoted.sh
t/t3903-stash.sh
t/t3904-stash-patch.sh
t/t4002-diff-basic.sh
t/t4008-diff-break-rewrite.sh
t/t4015-diff-whitespace.sh
t/t4017-diff-retval.sh
t/t4019-diff-wserror.sh
t/t4021-format-patch-numbered.sh
t/t4026-color.sh
t/t4027-diff-submodule.sh
t/t4034-diff-words.sh
t/t4103-apply-binary.sh
t/t4111-apply-subdir.sh
t/t4119-apply-config.sh
t/t4124-apply-ws-rule.sh
t/t4127-apply-same-fn.sh
t/t4130-apply-criss-cross-rename.sh
t/t4133-apply-filenames.sh
t/t4134-apply-submodule.sh
t/t4150-am.sh
t/t4201-shortlog.sh
t/t4202-log.sh
t/t4252-am-options.sh
t/t5300-pack-object.sh
t/t5301-sliding-window.sh
t/t5302-pack-index.sh
t/t5500-fetch-pack.sh
t/t5502-quickfetch.sh
t/t5503-tagfollow.sh
t/t5510-fetch.sh
t/t5514-fetch-multiple.sh
t/t5516-fetch-push.sh
t/t5519-push-alternates.sh
t/t5531-deep-submodule-push.sh
t/t556x_common
t/t5602-clone-remote-exec.sh
t/t5701-clone-local.sh
t/t6001-rev-list-graft.sh
t/t6009-rev-list-parent.sh
t/t6010-merge-base.sh
t/t6016-rev-list-graph-simplify-history.sh
t/t6020-merge-df.sh
t/t6022-merge-rename.sh
t/t6024-recursive-merge.sh
t/t6029-merge-subtree.sh
t/t6030-bisect-porcelain.sh
t/t6036-recursive-corner-cases.sh
t/t6040-tracking-info.sh
t/t6050-replace.sh
t/t7001-mv.sh
t/t7004-tag.sh
t/t7006-pager.sh
t/t7105-reset-patch.sh
t/t7300-clean.sh
t/t7502-commit.sh
t/t7509-commit.sh
t/t7601-merge-pull-config.sh
t/t7602-merge-octopus-many.sh
t/t7610-mergetool.sh
t/t7700-repack.sh
t/t7800-difftool.sh
t/t7810-grep.sh
t/t9104-git-svn-follow-parent.sh
t/t9123-git-svn-rebuild-with-rewriteroot.sh
t/t9124-git-svn-dcommit-auto-props.sh
t/t9146-git-svn-empty-dirs.sh
t/t9151-svn-mergeinfo.sh
t/t9300-fast-import.sh
t/t9350-fast-export.sh
t/t9400-git-cvsserver-server.sh
t/t9401-git-cvsserver-crlf.sh
t/test-lib.sh

index c548bf1b7eb17b861d8f26bd2381ed6bbae2aa52..892d443f63428aea6d6b92458bdaa4575bc46da0 100644 (file)
--- a/t/README
+++ b/t/README
@@ -265,14 +265,11 @@ Do:
        test ...
 
    That way all of the commands in your tests will succeed or fail. If
-   you must ignore the return value of something (e.g., the return
-   after unsetting a variable that was already unset is unportable) it's
-   best to indicate so explicitly with a semicolon:
-
-       unset HLAGH;
-       git merge hla &&
-       git push gh &&
-       test ...
+   you must ignore the return value of something, consider using a
+   helper function (e.g. use sane_unset instead of unset, in order
+   to avoid unportable return value for unsetting a variable that was
+   already unset), or prepending the command with test_might_fail or
+   test_must_fail.
 
  - Check the test coverage for your tests. See the "Test coverage"
    below.
@@ -401,13 +398,6 @@ library for your script to use.
    Like test_expect_success this function can optionally use a three
    argument invocation with a prerequisite as the first argument.
 
- - test_expect_code [<prereq>] <code> <message> <script>
-
-   Analogous to test_expect_success, but pass the test if it exits
-   with a given exit <code>
-
- test_expect_code 1 'Merge with d/f conflicts' 'git merge "merge msg" B master'
-
  - test_debug <script>
 
    This takes a single argument, <script>, and evaluates it only
@@ -488,6 +478,15 @@ library for your script to use.
            'Perl API' \
            "$PERL_PATH" "$TEST_DIRECTORY"/t9700/test.pl
 
+ - test_expect_code <exit-code> <command>
+
+   Run a command and ensure that it exits with the given exit code.
+   For example:
+
+       test_expect_success 'Merge with d/f conflicts' '
+               test_expect_code 1 git merge "merge msg" B master
+       '
+
  - test_must_fail <git-command>
 
    Run a git command and ensure it fails in a controlled way.  Use
@@ -507,6 +506,10 @@ library for your script to use.
    <expected> file.  This behaves like "cmp" but produces more
    helpful output when the test is run with "-v" option.
 
+ - test_line_count (= | -lt | -ge | ...) <length> <file>
+
+   Check whether a file has the length it is expected to.
+
  - test_path_is_file <file> [<diagnosis>]
    test_path_is_dir <dir> [<diagnosis>]
    test_path_is_missing <path> [<diagnosis>]
index 141b60cdcbf4c8f70813e090a950c5d736853a8e..212bd605b5193d26c38efda3bb2ed9fd95b8b462 100644 (file)
@@ -38,7 +38,7 @@ test_expect_success \
     'prepare reference tree' \
     'echo "1A quick brown fox jumps over the" >file &&
      echo "lazy dog" >>file &&
-     git add file
+     git add file &&
      GIT_AUTHOR_NAME="A" git commit -a -m "Initial."'
 
 test_expect_success \
index f688bd3ef5034e32983685cfae940df303b377cc..2f7002a5e57d61a69d418cc55d1e939198c6ac20 100755 (executable)
@@ -130,22 +130,57 @@ test_expect_success 'tests clean up after themselves' '
     test_when_finished clean=yes
 '
 
-cleaner=no
-test_expect_code 1 'tests clean up even after a failure' '
-    test_when_finished cleaner=yes &&
-    (exit 1)
-'
-
-if test $clean$cleaner != yesyes
+if test $clean != yes
 then
-       say "bug in test framework: cleanup commands do not work reliably"
+       say "bug in test framework: basic cleanup command does not work reliably"
        exit 1
 fi
 
-test_expect_code 2 'failure to clean up causes the test to fail' '
-    test_when_finished "(exit 2)"
+test_expect_success 'tests clean up even on failures' "
+    mkdir failing-cleanup &&
+    (cd failing-cleanup &&
+    cat >failing-cleanup.sh <<EOF &&
+#!$SHELL_PATH
+
+test_description='Failing tests with cleanup commands'
+
+# Point to the t/test-lib.sh, which isn't in ../ as usual
+TEST_DIRECTORY=\"$TEST_DIRECTORY\"
+. \"\$TEST_DIRECTORY\"/test-lib.sh
+
+test_expect_success 'tests clean up even after a failure' '
+    touch clean-after-failure &&
+    test_when_finished rm clean-after-failure &&
+    (exit 1)
+'
+
+test_expect_success 'failure to clean up causes the test to fail' '
+    test_when_finished \"(exit 2)\"
 '
 
+test_done
+EOF
+    chmod +x failing-cleanup.sh &&
+    test_must_fail ./failing-cleanup.sh >out 2>err &&
+    ! test -s err &&
+    ! test -f \"trash directory.failing-cleanup/clean-after-failure\" &&
+sed -e 's/Z$//' >expect <<\EOF &&
+not ok - 1 tests clean up even after a failure
+#      Z
+#          touch clean-after-failure &&
+#          test_when_finished rm clean-after-failure &&
+#          (exit 1)
+#      Z
+not ok - 2 failure to clean up causes the test to fail
+#      Z
+#          test_when_finished \"(exit 2)\"
+#      Z
+# failed 2 among 2 test(s)
+1..2
+EOF
+    test_cmp expect out)
+"
+
 ################################################################
 # Basics of the basics
 
index 7fe8883ae060947da804abb5b287fb94d19e87c4..d44194c35fe5de72af0721a05bb1038f1720b4ac 100755 (executable)
@@ -25,7 +25,7 @@ check_config () {
 
 test_expect_success 'plain' '
        (
-               unset GIT_DIR GIT_WORK_TREE
+               sane_unset GIT_DIR GIT_WORK_TREE &&
                mkdir plain &&
                cd plain &&
                git init
@@ -35,7 +35,7 @@ test_expect_success 'plain' '
 
 test_expect_success 'plain with GIT_WORK_TREE' '
        if (
-               unset GIT_DIR
+               sane_unset GIT_DIR &&
                mkdir plain-wt &&
                cd plain-wt &&
                GIT_WORK_TREE=$(pwd) git init
@@ -48,7 +48,7 @@ test_expect_success 'plain with GIT_WORK_TREE' '
 
 test_expect_success 'plain bare' '
        (
-               unset GIT_DIR GIT_WORK_TREE GIT_CONFIG
+               sane_unset GIT_DIR GIT_WORK_TREE GIT_CONFIG &&
                mkdir plain-bare-1 &&
                cd plain-bare-1 &&
                git --bare init
@@ -58,7 +58,7 @@ test_expect_success 'plain bare' '
 
 test_expect_success 'plain bare with GIT_WORK_TREE' '
        if (
-               unset GIT_DIR GIT_CONFIG
+               sane_unset GIT_DIR GIT_CONFIG &&
                mkdir plain-bare-2 &&
                cd plain-bare-2 &&
                GIT_WORK_TREE=$(pwd) git --bare init
@@ -72,7 +72,7 @@ test_expect_success 'plain bare with GIT_WORK_TREE' '
 test_expect_success 'GIT_DIR bare' '
 
        (
-               unset GIT_CONFIG
+               sane_unset GIT_CONFIG &&
                mkdir git-dir-bare.git &&
                GIT_DIR=git-dir-bare.git git init
        ) &&
@@ -82,7 +82,7 @@ test_expect_success 'GIT_DIR bare' '
 test_expect_success 'init --bare' '
 
        (
-               unset GIT_DIR GIT_WORK_TREE GIT_CONFIG
+               sane_unset GIT_DIR GIT_WORK_TREE GIT_CONFIG &&
                mkdir init-bare.git &&
                cd init-bare.git &&
                git init --bare
@@ -93,7 +93,7 @@ test_expect_success 'init --bare' '
 test_expect_success 'GIT_DIR non-bare' '
 
        (
-               unset GIT_CONFIG
+               sane_unset GIT_CONFIG &&
                mkdir non-bare &&
                cd non-bare &&
                GIT_DIR=.git git init
@@ -104,7 +104,7 @@ test_expect_success 'GIT_DIR non-bare' '
 test_expect_success 'GIT_DIR & GIT_WORK_TREE (1)' '
 
        (
-               unset GIT_CONFIG
+               sane_unset GIT_CONFIG &&
                mkdir git-dir-wt-1.git &&
                GIT_WORK_TREE=$(pwd) GIT_DIR=git-dir-wt-1.git git init
        ) &&
@@ -114,7 +114,7 @@ test_expect_success 'GIT_DIR & GIT_WORK_TREE (1)' '
 test_expect_success 'GIT_DIR & GIT_WORK_TREE (2)' '
 
        if (
-               unset GIT_CONFIG
+               sane_unset GIT_CONFIG &&
                mkdir git-dir-wt-2.git &&
                GIT_WORK_TREE=$(pwd) GIT_DIR=git-dir-wt-2.git git --bare init
        )
@@ -127,7 +127,7 @@ test_expect_success 'GIT_DIR & GIT_WORK_TREE (2)' '
 test_expect_success 'reinit' '
 
        (
-               unset GIT_CONFIG GIT_WORK_TREE GIT_CONFIG
+               sane_unset GIT_CONFIG GIT_WORK_TREE GIT_CONFIG &&
 
                mkdir again &&
                cd again &&
@@ -175,8 +175,8 @@ test_expect_success 'init with init.templatedir set' '
                git config -f "$test_config"  init.templatedir "${HOME}/templatedir-source" &&
                mkdir templatedir-set &&
                cd templatedir-set &&
-               unset GIT_CONFIG_NOGLOBAL &&
-               unset GIT_TEMPLATE_DIR &&
+               sane_unset GIT_CONFIG_NOGLOBAL &&
+               sane_unset GIT_TEMPLATE_DIR &&
                NO_SET_GIT_TEMPLATE_DIR=t &&
                export NO_SET_GIT_TEMPLATE_DIR &&
                git init
@@ -187,7 +187,7 @@ test_expect_success 'init with init.templatedir set' '
 test_expect_success 'init --bare/--shared overrides system/global config' '
        (
                test_config="$HOME"/.gitconfig &&
-               unset GIT_CONFIG_NOGLOBAL &&
+               sane_unset GIT_CONFIG_NOGLOBAL &&
                git config -f "$test_config" core.bare false &&
                git config -f "$test_config" core.sharedRepository 0640 &&
                mkdir init-bare-shared-override &&
@@ -202,7 +202,7 @@ test_expect_success 'init --bare/--shared overrides system/global config' '
 test_expect_success 'init honors global core.sharedRepository' '
        (
                test_config="$HOME"/.gitconfig &&
-               unset GIT_CONFIG_NOGLOBAL &&
+               sane_unset GIT_CONFIG_NOGLOBAL &&
                git config -f "$test_config" core.sharedRepository 0666 &&
                mkdir shared-honor-global &&
                cd shared-honor-global &&
index e75153bdea05d2e34570aaf03fbb3902694ddedf..ebbc7554a7d4dce4c2ed33a79f5d4feb3a520f05 100755 (executable)
@@ -72,7 +72,7 @@ test_expect_success 'core.attributesfile' '
 
 test_expect_success 'attribute test: read paths from stdin' '
 
-       cat <<EOF > expect
+       cat <<EOF > expect &&
 f: test: f
 a/f: test: f
 a/c/f: test: f
index 234a94f3e6311c529b5bb476ee5a6a2ea705017f..1a8f44c44ca3cce70990ec56fec61894be9b3086 100755 (executable)
@@ -439,7 +439,7 @@ test_expect_success 'checkout when deleting .gitattributes' '
        git rm .gitattributes &&
        echo "contentsQ" | q_to_cr > .file2 &&
        git add .file2 &&
-       git commit -m third
+       git commit -m third &&
 
        git checkout master~1 &&
        git checkout master &&
index c7d0324374e9df5131a58a9ae0cadf7ee4dc03e7..ec6c1b3f8a7eac0e1734883a0ad2f2d68f11bf96 100755 (executable)
@@ -7,7 +7,7 @@ UNZIP=${UNZIP:-unzip}
 
 test_expect_success setup '
 
-       git config core.autocrlf true
+       git config core.autocrlf true &&
 
        printf "CRLF line ending\r\nAnd another\r\n" > sample &&
        git add sample &&
@@ -20,7 +20,7 @@ test_expect_success setup '
 test_expect_success 'tar archive' '
 
        git archive --format=tar HEAD |
-       ( mkdir untarred && cd untarred && "$TAR" -xf - )
+       ( mkdir untarred && cd untarred && "$TAR" -xf - ) &&
 
        test_cmp sample untarred/sample
 
index f37ac8fa0b720d1a72536033c3334a6f5244d5d7..fe0164be62ad9ae7a2ea426c6e576cd1133f3d67 100755 (executable)
@@ -12,7 +12,7 @@ test_expect_success setup '
 
        git config core.autocrlf false &&
 
-       echo "one text" > .gitattributes
+       echo "one text" > .gitattributes &&
 
        for w in Hello world how are you; do echo $w; done >one &&
        for w in I am very very fine thank you; do echo $w; done >two &&
index 41df6bcf279a1abc4462e63866076094cfbdedd8..057c97c49f26c354e25675e4489c0e94917de33f 100755 (executable)
@@ -12,14 +12,14 @@ unibad=
 no_symlinks=
 test_expect_success 'see what we expect' '
 
-       test_case=test_expect_success
-       test_unicode=test_expect_success
+       test_case=test_expect_success &&
+       test_unicode=test_expect_success &&
        mkdir junk &&
        echo good >junk/CamelCase &&
        echo bad >junk/camelcase &&
        if test "$(cat junk/CamelCase)" != good
        then
-               test_case=test_expect_failure
+               test_case=test_expect_failure &&
                case_insensitive=t
        fi &&
        rm -fr junk &&
@@ -27,7 +27,7 @@ test_expect_success 'see what we expect' '
        >junk/"$auml" &&
        case "$(cd junk && echo *)" in
        "$aumlcdiar")
-               test_unicode=test_expect_failure
+               test_unicode=test_expect_failure &&
                unibad=t
                ;;
        *)      ;;
@@ -36,7 +36,7 @@ test_expect_success 'see what we expect' '
        {
                ln -s x y 2> /dev/null &&
                test -h y 2> /dev/null ||
-               no_symlinks=1
+               no_symlinks=1 &&
                rm -f y
        }
 '
@@ -128,7 +128,7 @@ test_expect_success "setup unicode normalization tests" '
   cd unicode &&
   touch "$aumlcdiar" &&
   git add "$aumlcdiar" &&
-  git commit -m initial
+  git commit -m initial &&
   git tag initial &&
   git checkout -b topic &&
   git mv $aumlcdiar tmp &&
index 4f171722d9e1dda7668f54b4104267eb70d91c67..ca8a4098fa06afbdbe5c427983d3953550457bc2 100755 (executable)
@@ -309,7 +309,7 @@ test_expect_success \
 test_expect_success \
     '6 - must not exist in O && !A && !B case' "
      rm -f .git/index DD &&
-     echo DD >DD
+     echo DD >DD &&
      git update-index --add DD &&
      test_must_fail git read-tree -m $tree_O $tree_A $tree_B
 "
index 93ca84f9e6d3dfd859d8bd4941f4d2c5a354ab6c..680d992f229cda9f1904240f593d66dc1cf3e32d 100755 (executable)
@@ -98,8 +98,8 @@ test_expect_success \
      git checkout-index -u -f -q -a &&
      git update-index --add yomin &&
      read_tree_twoway $treeH $treeM &&
-     git ls-files --stage >4.out || return 1
-     git diff --no-index M.out 4.out >4diff.out
+     git ls-files --stage >4.out &&
+     test_must_fail git diff --no-index M.out 4.out >4diff.out &&
      compare_change 4diff.out expected &&
      check_cache_at yomin clean'
 
@@ -112,8 +112,8 @@ test_expect_success \
      git update-index --add yomin &&
      echo yomin yomin >yomin &&
      read_tree_twoway $treeH $treeM &&
-     git ls-files --stage >5.out || return 1
-     git diff --no-index M.out 5.out >5diff.out
+     git ls-files --stage >5.out &&
+     test_must_fail git diff --no-index M.out 5.out >5diff.out &&
      compare_change 5diff.out expected &&
      check_cache_at yomin dirty'
 
@@ -213,8 +213,8 @@ test_expect_success \
      echo nitfol nitfol >nitfol &&
      git update-index --add nitfol &&
      read_tree_twoway $treeH $treeM &&
-     git ls-files --stage >14.out || return 1
-     git diff --no-index M.out 14.out >14diff.out
+     git ls-files --stage >14.out &&
+     test_must_fail git diff --no-index M.out 14.out >14diff.out &&
      compare_change 14diff.out expected &&
      check_cache_at nitfol clean'
 
@@ -227,8 +227,8 @@ test_expect_success \
      git update-index --add nitfol &&
      echo nitfol nitfol nitfol >nitfol &&
      read_tree_twoway $treeH $treeM &&
-     git ls-files --stage >15.out || return 1
-     git diff --no-index M.out 15.out >15diff.out
+     git ls-files --stage >15.out &&
+     test_must_fail git diff --no-index M.out 15.out >15diff.out &&
      compare_change 15diff.out expected &&
      check_cache_at nitfol dirty'
 
@@ -377,7 +377,7 @@ test_expect_success \
      git ls-files --stage >treeM.out &&
 
      rm -f a &&
-     mkdir a
+     mkdir a &&
      : >a/b &&
      git update-index --add --remove a a/b &&
      treeH=`git write-tree` &&
@@ -394,7 +394,7 @@ test_expect_success '-m references the correct modified tree' '
        echo >file-a &&
        echo >file-b &&
        git add file-a file-b &&
-       git commit -a -m "test for correct modified tree"
+       git commit -a -m "test for correct modified tree" &&
        git branch initial-mod &&
        echo b >file-b &&
        git commit -a -m "B" &&
index 0241329a08af0be642131ffe4b619231d9ea3844..a4a17e001739a45fc7d53e76bd8bbb14426492f9 100755 (executable)
@@ -205,8 +205,8 @@ test_expect_success \
      echo nitfol nitfol >nitfol &&
      git update-index --add nitfol &&
      git read-tree -m -u $treeH $treeM &&
-     git ls-files --stage >14.out || return 1
-     git diff -U0 --no-index M.out 14.out >14diff.out
+     git ls-files --stage >14.out &&
+     test_must_fail git diff -U0 --no-index M.out 14.out >14diff.out &&
      compare_change 14diff.out expected &&
      sum bozbar frotz >actual14.sum &&
      grep -v nitfol M.sum > expected14.sum &&
@@ -226,8 +226,8 @@ test_expect_success \
      git update-index --add nitfol &&
      echo nitfol nitfol nitfol >nitfol &&
      git read-tree -m -u $treeH $treeM &&
-     git ls-files --stage >15.out || return 1
-     git diff -U0 --no-index M.out 15.out >15diff.out
+     git ls-files --stage >15.out &&
+     test_must_fail git diff -U0 --no-index M.out 15.out >15diff.out &&
      compare_change 15diff.out expected &&
      check_cache_at nitfol dirty &&
      sum bozbar frotz >actual15.sum &&
@@ -314,7 +314,7 @@ test_expect_success \
 # Also make sure we did not break DF vs DF/DF case.
 test_expect_success \
     'DF vs DF/DF case setup.' \
-    'rm -f .git/index
+    'rm -f .git/index &&
      echo DF >DF &&
      git update-index --add DF &&
      treeDF=`git write-tree` &&
index 8008fa2d894baf76a19168a020ed4f4640619ce7..0ef11bccb4a84b508b217d5d2bf4ef13c2d13282 100755 (executable)
@@ -49,7 +49,7 @@ test_expect_success 'read-tree without .git/info/sparse-checkout' '
 '
 
 test_expect_success 'read-tree with .git/info/sparse-checkout but disabled' '
-       echo >.git/info/sparse-checkout
+       echo >.git/info/sparse-checkout &&
        git read-tree -m -u HEAD &&
        git ls-files -t >result &&
        test_cmp expected.swt result &&
index ab55eda158bb5a6ecad77302aa2fe17bd6e92be3..bfa2c2190d0368eba533a8411df739eee77fa1be 100755 (executable)
@@ -42,7 +42,7 @@ test_expect_success 'git diff' '
 '
 
 test_expect_success 'tree' '
-       tree=$(git write-tree 2>/dev/null)
+       tree=$(git write-tree 2>/dev/null) &&
        test 8988da15d077d4829fc51d8544c097def6644dbb = $tree
 '
 
index a6bf1bf4d6182f0883ea858e28aa8a9b3dd79024..0e476624069a4ac4259f35b07f36bf0945bfe986 100755 (executable)
@@ -39,7 +39,7 @@ test_expect_success 'gitdir selection on unsupported repo' '
        (
                cd test2 &&
                git config core.repositoryformatversion >../actual
-       )
+       ) &&
        test_cmp expect actual
 '
 
index 54ba3df95f66ecc060adaec6846877c793016aa1..ff747f8229bb46df070ea9aad2702f4d1c703420 100755 (executable)
@@ -52,9 +52,8 @@ rm -f .git/$m
 
 test_expect_success \
        "fail to create $n" \
-       "touch .git/$n_dir
-        git update-ref $n $A >out 2>err"'
-        test $? != 0'
+       "touch .git/$n_dir &&
+        test_must_fail git update-ref $n $A >out 2>err"
 rm -f .git/$n_dir out err
 
 test_expect_success \
@@ -185,55 +184,55 @@ gd="Thu, 26 May 2005 18:33:00 -0500"
 ld="Thu, 26 May 2005 18:43:00 -0500"
 test_expect_success \
        'Query "master@{May 25 2005}" (before history)' \
-       'rm -f o e
+       'rm -f o e &&
         git rev-parse --verify "master@{May 25 2005}" >o 2>e &&
         test '"$C"' = $(cat o) &&
         test "warning: Log for '\'master\'' only goes back to $ed." = "$(cat e)"'
 test_expect_success \
        "Query master@{2005-05-25} (before history)" \
-       'rm -f o e
+       'rm -f o e &&
         git rev-parse --verify master@{2005-05-25} >o 2>e &&
         test '"$C"' = $(cat o) &&
         echo test "warning: Log for '\'master\'' only goes back to $ed." = "$(cat e)"'
 test_expect_success \
        'Query "master@{May 26 2005 23:31:59}" (1 second before history)' \
-       'rm -f o e
+       'rm -f o e &&
         git rev-parse --verify "master@{May 26 2005 23:31:59}" >o 2>e &&
         test '"$C"' = $(cat o) &&
         test "warning: Log for '\''master'\'' only goes back to $ed." = "$(cat e)"'
 test_expect_success \
        'Query "master@{May 26 2005 23:32:00}" (exactly history start)' \
-       'rm -f o e
+       'rm -f o e &&
         git rev-parse --verify "master@{May 26 2005 23:32:00}" >o 2>e &&
         test '"$C"' = $(cat o) &&
         test "" = "$(cat e)"'
 test_expect_success \
        'Query "master@{May 26 2005 23:32:30}" (first non-creation change)' \
-       'rm -f o e
+       'rm -f o e &&
         git rev-parse --verify "master@{May 26 2005 23:32:30}" >o 2>e &&
         test '"$A"' = $(cat o) &&
         test "" = "$(cat e)"'
 test_expect_success \
        'Query "master@{2005-05-26 23:33:01}" (middle of history with gap)' \
-       'rm -f o e
+       'rm -f o e &&
         git rev-parse --verify "master@{2005-05-26 23:33:01}" >o 2>e &&
         test '"$B"' = $(cat o) &&
         test "warning: Log .git/logs/'"$m has gap after $gd"'." = "$(cat e)"'
 test_expect_success \
        'Query "master@{2005-05-26 23:38:00}" (middle of history)' \
-       'rm -f o e
+       'rm -f o e &&
         git rev-parse --verify "master@{2005-05-26 23:38:00}" >o 2>e &&
         test '"$Z"' = $(cat o) &&
         test "" = "$(cat e)"'
 test_expect_success \
        'Query "master@{2005-05-26 23:43:00}" (exact end of history)' \
-       'rm -f o e
+       'rm -f o e &&
         git rev-parse --verify "master@{2005-05-26 23:43:00}" >o 2>e &&
         test '"$E"' = $(cat o) &&
         test "" = "$(cat e)"'
 test_expect_success \
        'Query "master@{2005-05-28}" (past end of history)' \
-       'rm -f o e
+       'rm -f o e &&
         git rev-parse --verify "master@{2005-05-28}" >o 2>e &&
         test '"$D"' = $(cat o) &&
         test "warning: Log .git/logs/'"$m unexpectedly ended on $ld"'." = "$(cat e)"'
@@ -247,7 +246,7 @@ test_expect_success \
      git add F &&
         GIT_AUTHOR_DATE="2005-05-26 23:30" \
         GIT_COMMITTER_DATE="2005-05-26 23:30" git commit -m add -a &&
-        h_TEST=$(git rev-parse --verify HEAD)
+        h_TEST=$(git rev-parse --verify HEAD) &&
         echo The other day this did not work. >M &&
         echo And then Bob told me how to fix it. >>M &&
         echo OTHER >F &&
index 7fa5f5b22a28f108b3063ff9920cffb530d950e6..2c96551ed0f2d3b95d661a0ce4d3b5b5d9ec0dfb 100755 (executable)
@@ -28,7 +28,7 @@ test_expect_success 'symbolic-ref refuses non-ref for HEAD' '
 reset_to_sane
 
 test_expect_success 'symbolic-ref refuses bare sha1' '
-       echo content >file && git add file && git commit -m one
+       echo content >file && git add file && git commit -m one &&
        test_must_fail git symbolic-ref HEAD `git rev-parse HEAD`
 '
 reset_to_sane
index 782e75d00091ebf1fda93ca5dc8e532289a15638..1b0f82fa4c7928fc4605ccf31a3ae45e6ac9f38e 100755 (executable)
@@ -32,7 +32,7 @@ test_expect_success "check-ref-format --branch @{-1}" '
        T=$(git write-tree) &&
        sha1=$(echo A | git commit-tree $T) &&
        git update-ref refs/heads/master $sha1 &&
-       git update-ref refs/remotes/origin/master $sha1
+       git update-ref refs/remotes/origin/master $sha1 &&
        git checkout master &&
        git checkout origin/master &&
        git checkout master &&
@@ -47,7 +47,7 @@ test_expect_success 'check-ref-format --branch from subdir' '
        T=$(git write-tree) &&
        sha1=$(echo A | git commit-tree $T) &&
        git update-ref refs/heads/master $sha1 &&
-       git update-ref refs/remotes/origin/master $sha1
+       git update-ref refs/remotes/origin/master $sha1 &&
        git checkout master &&
        git checkout origin/master &&
        git checkout master &&
index 25046c42081c8412b56c6b739dfd3a67ab700810..252fc828374583cfb4c2346853bb87560efdf01d 100755 (executable)
@@ -186,8 +186,8 @@ test_expect_success 'delete' '
        test_tick &&
        git commit -m tiger C &&
 
-       HEAD_entry_count=$(git reflog | wc -l)
-       master_entry_count=$(git reflog show master | wc -l)
+       HEAD_entry_count=$(git reflog | wc -l) &&
+       master_entry_count=$(git reflog show master | wc -l) &&
 
        test $HEAD_entry_count = 5 &&
        test $master_entry_count = 5 &&
@@ -199,13 +199,13 @@ test_expect_success 'delete' '
        test $HEAD_entry_count = $(git reflog | wc -l) &&
        ! grep ox < output &&
 
-       master_entry_count=$(wc -l < output)
+       master_entry_count=$(wc -l < output) &&
 
        git reflog delete HEAD@{1} &&
        test $(($HEAD_entry_count -1)) = $(git reflog | wc -l) &&
        test $master_entry_count = $(git reflog show master | wc -l) &&
 
-       HEAD_entry_count=$(git reflog | wc -l)
+       HEAD_entry_count=$(git reflog | wc -l) &&
 
        git reflog delete master@{07.04.2005.15:15:00.-0700} &&
        git reflog show master > output &&
index 1be415e334330b2fea398cc58a0f054b6b876da1..bb01d5ab8f8ebcaf49ef238d48ae89e3845d5f4b 100755 (executable)
@@ -61,7 +61,7 @@ test_expect_success 'object with bad sha1' '
        sha=$(echo blob | git hash-object -w --stdin) &&
        old=$(echo $sha | sed "s+^..+&/+") &&
        new=$(dirname $old)/ffffffffffffffffffffffffffffffffffffff &&
-       sha="$(dirname $new)$(basename $new)"
+       sha="$(dirname $new)$(basename $new)" &&
        mv .git/objects/$old .git/objects/$new &&
        test_when_finished "remove_object $sha" &&
        git update-index --add --cacheinfo 100644 $sha foo &&
@@ -111,7 +111,7 @@ test_expect_success 'email with embedded > is not okay' '
 '
 
 test_expect_success 'tag pointing to nonexistent' '
-       cat >invalid-tag <<-\EOF
+       cat >invalid-tag <<-\EOF &&
        object ffffffffffffffffffffffffffffffffffffffff
        type commit
        tag invalid
index b3195c47070b35d555f8cfae90497a2d00d10ca7..1efd7f76ddea8dbd788032c5a9076270d1159825 100755 (executable)
@@ -40,7 +40,7 @@ extra1    line above used to cause a segfault but no longer does
 EOF
 
 test_expect_success 'test --parseopt help output' '
-       git rev-parse --parseopt -- -h > output < optionspec
+       test_expect_code 129 git rev-parse --parseopt -- -h > output < optionspec &&
        test_cmp expect output
 '
 
index df5ad8c686a959c9b03355c1ebc325f3c755ed46..cce87a5ab523d3a4232e9e11863aa3a6e8ca0211 100755 (executable)
@@ -9,8 +9,9 @@ test_prefix() {
 }
 
 test_fail() {
-       test_expect_code 128 "$1: prefix" \
-       "git rev-parse --show-prefix"
+       test_expect_success "$1: prefix" '
+               test_expect_code 128 git rev-parse --show-prefix
+       '
 }
 
 TRASH_ROOT="$PWD"
index a74ee227b80391b7d8e2b86159a8374663cb674d..e6f59f1914667f0001fe990656a66bb76e14a41d 100755 (executable)
@@ -17,7 +17,7 @@ test_expect_success SYMLINKS setup '
        git branch side &&
 
        echo goodbye >nitfol &&
-       git add nitfol
+       git add nitfol &&
        test_tick &&
        git commit -m "master adds file nitfol" &&
 
index a463b13b27fec87e0f4adb1154fea26b0eee73d9..9cd0ac4ba3f14dc85b35fa14e20ceb16f191f724 100755 (executable)
@@ -32,7 +32,7 @@ test_expect_success PERL 'git checkout -p' '
 '
 
 test_expect_success PERL 'git checkout -p with staged changes' '
-       set_state dir/foo work index
+       set_state dir/foo work index &&
        (echo n; echo y) | git checkout -p &&
        verify_saved_state bar &&
        verify_state dir/foo index index
index 2d2f63f22ee59d8dc24dafaa5224928ad62dea0c..0e3b8582f2a3edebb0d9eea7fcebaa88f305fd73 100755 (executable)
@@ -14,7 +14,7 @@ TEST_FILE=foo
 test_expect_success 'Setup' '
        echo "Initial" >"$TEST_FILE" &&
        git add "$TEST_FILE" &&
-       git commit -m "First Commit"
+       git commit -m "First Commit" &&
        test_tick &&
        echo "State 1" >>"$TEST_FILE" &&
        git add "$TEST_FILE" &&
index b7131d8c08daf20f328dd7f9ce7a1118a734516b..21f4659a9d1c22fcc8c9eb3261315d67988dad2f 100755 (executable)
@@ -26,7 +26,7 @@ chmod +x .git/hooks/post-commit'
 
 test_expect_success 'post-commit hook used ordinarily' '
 echo initial >top &&
-git add top
+git add top &&
 git commit -m initial &&
 test -r "${COMMIT_FILE}"
 '
@@ -45,7 +45,7 @@ test -r "${COMMIT_FILE}"
 rm -rf "${COMMIT_FILE}"
 
 test_expect_success 'post-commit-hook from sub dir' '
-echo changed again >top
+echo changed again >top &&
 cd subdir &&
 git --git-dir .git --work-tree .. add ../top &&
 git --git-dir .git --work-tree .. commit -m subcommit &&
index 76ad7c344c0546603fb198a9ffb907d6142cbe84..c8bce8c2e4314aaf466019438818293102c12c9c 100755 (executable)
@@ -51,7 +51,7 @@ test_expect_success 'update-index again' \
        echo hello world >dir1/file3 &&
        echo goodbye people >file2 &&
        git update-index --add file2 dir1/file3 &&
-       echo hello everybody >file2
+       echo hello everybody >file2 &&
        echo happy >dir1/file3 &&
        git update-index --again &&
        git ls-files -s >current &&
index 2ad2819a345af53ff6ab0b7c28fa313f1a0a5956..0692427cb69c62327da52061de6238ca8e12169d 100755 (executable)
@@ -25,7 +25,7 @@ test_expect_success setup '
        echo initial >dir1/sub2 &&
        echo initial >dir2/sub3 &&
        git add check dir1 dir2 top foo &&
-       test_tick
+       test_tick &&
        git commit -m initial &&
 
        echo changed >check &&
index 6d2f2b67ee8d03e1f1dc4874da100cb2e179b6d1..c8fe9782672c0e6ba2f0fd0c1b708fc980263182 100755 (executable)
@@ -156,7 +156,7 @@ test_expect_success 'trailing slash in exclude allows directory match (2)' '
 
 test_expect_success 'trailing slash in exclude forces directory match (1)' '
 
-       >two
+       >two &&
        git ls-files --others --exclude=two/ >output &&
        grep "^two" output
 
index e66e550b2449e76435a0bf16c6a9889c0794f858..20d4f11dbe7edda104364ad282af94b13367224b 100755 (executable)
@@ -544,7 +544,7 @@ test_expect_success 'reset and bind merge' '
                echo "100644 $o0 0      c"
                echo "100644 $o1 0      d/e"
        ) >expected &&
-       test_cmp expected actual
+       test_cmp expected actual &&
 
        git read-tree --prefix=z/ master &&
        git ls-files -s >actual &&
index 4261e9641e00fb3b543384b6a8dbbcc1a214b598..2f5f41a012b5f6e38f2b9d631a99648ac8937c2d 100755 (executable)
@@ -10,10 +10,10 @@ test_expect_success setup '
                cd sub &&
                git init &&
                >subfile &&
-               git add subfile
+               git add subfile &&
                git commit -m "subproject commit #1"
        ) &&
-       >mainfile
+       >mainfile &&
        git add sub mainfile &&
        test_tick &&
        git commit -m "superproject commit #1"
index 809d1c4ed49f06d06ba50cda6f52fe9201d2d625..6028748c6cecaedb087c35182de172ca0e93fe08 100755 (executable)
@@ -12,13 +12,13 @@ test_expect_success 'make commits' '
 '
 
 test_expect_success 'make branches' '
-       git branch branch-one
+       git branch branch-one &&
        git branch branch-two HEAD^
 '
 
 test_expect_success 'make remote branches' '
-       git update-ref refs/remotes/origin/branch-one branch-one
-       git update-ref refs/remotes/origin/branch-two branch-two
+       git update-ref refs/remotes/origin/branch-one branch-one &&
+       git update-ref refs/remotes/origin/branch-two branch-two &&
        git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/branch-one
 '
 
index f39a261d806d567a3aadee892c58f6be02c64e0a..5e29a052599bc28c0edaf56dfedb5f069b5ff01e 100755 (executable)
@@ -43,8 +43,8 @@ test_expect_success TABS_IN_FILENAMES 'git ls-files no-funny' \
        test_cmp expected current'
 
 test_expect_success TABS_IN_FILENAMES 'setup expect' '
-t0=`git write-tree`
-echo "$t0" >t0
+t0=`git write-tree` &&
+echo "$t0" >t0 &&
 
 cat > expected <<\EOF
 just space
@@ -69,8 +69,8 @@ test_expect_success TABS_IN_FILENAMES 'git ls-files -z with-funny' \
        test_cmp expected current'
 
 test_expect_success TABS_IN_FILENAMES 'setup expect' '
-t1=`git write-tree`
-echo "$t1" >t1
+t1=`git write-tree` &&
+echo "$t1" >t1 &&
 
 cat > expected <<\EOF
 just space
index a2b79a0430b2468241a578aaad479a09db774dd5..7e84ab97903a890a7d9fabc304cad7531e9b915b 100755 (executable)
@@ -52,7 +52,7 @@ test_expect_success 'refusing to edit notes in refs/remotes/' '
 
 # 1 indicates caught gracefully by die, 128 means git-show barked
 test_expect_success 'handle empty notes gracefully' '
-       git notes show ; test 1 = $?
+       test_expect_code 1 git notes show
 '
 
 test_expect_success 'show non-existent notes entry with %N' '
@@ -627,16 +627,16 @@ test_expect_success '--show-notes=ref accumulates' '
 
 test_expect_success 'Allow notes on non-commits (trees, blobs, tags)' '
        git config core.notesRef refs/notes/other &&
-       echo "Note on a tree" > expect
+       echo "Note on a tree" > expect &&
        git notes add -m "Note on a tree" HEAD: &&
        git notes show HEAD: > actual &&
        test_cmp expect actual &&
-       echo "Note on a blob" > expect
+       echo "Note on a blob" > expect &&
        filename=$(git ls-tree --name-only HEAD | head -n1) &&
        git notes add -m "Note on a blob" HEAD:$filename &&
        git notes show HEAD:$filename > actual &&
        test_cmp expect actual &&
-       echo "Note on a tag" > expect
+       echo "Note on a tag" > expect &&
        git tag -a -m "This is an annotated tag" foobar HEAD^ &&
        git notes add -m "Note on a tag" foobar &&
        git notes show foobar > actual &&
index 3269f2eebdbb71acd7c88edee2b6efe809637ade..2ea3be6546f43fd5c224aa8df6add96fa9df6ac2 100755 (executable)
@@ -26,7 +26,7 @@ test_expect_success 'example 1: notes to add an Acked-by line' '
 '
 
 test_expect_success 'example 2: binary notes' '
-       cp "$TEST_DIRECTORY"/test4012.png .
+       cp "$TEST_DIRECTORY"/test4012.png . &&
        git checkout B &&
        blob=$(git hash-object -w test4012.png) &&
        git notes --ref=logo add -C "$blob" &&
index 7d20a74c5ca1331ff241d1596bcb114e48a5907d..5cb7e70d54267b53ffb4b0f4c46875308d9de5a6 100755 (executable)
@@ -7,34 +7,39 @@ test_description='git rebase interactive
 
 This test runs git rebase "interactively", by faking an edit, and verifies
 that the result still makes sense.
+
+Initial setup:
+
+     one - two - three - four (conflict-branch)
+   /
+ A - B - C - D - E            (master)
+ | \
+ |   F - G - H                (branch1)
+ |     \
+ |\      I                    (branch2)
+ | \
+ |   J - K - L - M            (no-conflict-branch)
+  \
+    N - O - P                 (no-ff-branch)
+
+ where A, B, D and G all touch file1, and one, two, three, four all
+ touch file "conflict".
 '
 . ./test-lib.sh
 
 . "$TEST_DIRECTORY"/lib-rebase.sh
 
+test_cmp_rev () {
+       git rev-parse --verify "$1" >expect.rev &&
+       git rev-parse --verify "$2" >actual.rev &&
+       test_cmp expect.rev actual.rev
+}
+
 set_fake_editor
 
-# Set up the repository like this:
-#
-#     one - two - three - four (conflict-branch)
-#   /
-# A - B - C - D - E            (master)
-# | \
-# |   F - G - H                (branch1)
-# |     \
-# |\      I                    (branch2)
-# | \
-# |   J - K - L - M            (no-conflict-branch)
-#  \
-#    N - O - P                 (no-ff-branch)
-#
-# where A, B, D and G all touch file1, and one, two, three, four all
-# touch file "conflict".
-#
 # WARNING: Modifications to the initial repository can change the SHA ID used
 # in the expect2 file for the 'stop on conflicting pick' test.
 
-
 test_expect_success 'setup' '
        test_commit A file1 &&
        test_commit B file1 &&
@@ -46,22 +51,21 @@ test_expect_success 'setup' '
        test_commit G file1 &&
        test_commit H file5 &&
        git checkout -b branch2 F &&
-       test_commit I file6
+       test_commit I file6 &&
        git checkout -b conflict-branch A &&
-       for n in one two three four
-       do
-               test_commit $n conflict
-       done &&
+       test_commit one conflict &&
+       test_commit two conflict &&
+       test_commit three conflict &&
+       test_commit four conflict &&
        git checkout -b no-conflict-branch A &&
-       for n in J K L M
-       do
-               test_commit $n file$n
-       done &&
+       test_commit J fileJ &&
+       test_commit K fileK &&
+       test_commit L fileL &&
+       test_commit M fileM &&
        git checkout -b no-ff-branch A &&
-       for n in N O P
-       do
-               test_commit $n file$n
-       done
+       test_commit N fileN &&
+       test_commit O fileO &&
+       test_commit P fileP
 '
 
 # "exec" commands are ran with the user shell by default, but this may
@@ -82,20 +86,12 @@ test_expect_success 'rebase -i with the exec command' '
        test_path_is_file touch-one &&
        test_path_is_file touch-two &&
        test_path_is_missing touch-three " (should have stopped before)" &&
-       test $(git rev-parse C) = $(git rev-parse HEAD) || {
-               echo "Stopped at wrong revision:"
-               echo "($(git describe --tags HEAD) instead of C)"
-               false
-       } &&
+       test_cmp_rev C HEAD &&
        git rebase --continue &&
        test_path_is_file touch-three &&
        test_path_is_file "touch-file  name with spaces" &&
        test_path_is_file touch-after-semicolon &&
-       test $(git rev-parse master) = $(git rev-parse HEAD) || {
-               echo "Stopped at wrong revision:"
-               echo "($(git describe --tags HEAD) instead of master)"
-               false
-       } &&
+       test_cmp_rev master HEAD &&
        rm -f touch-*
 '
 
@@ -116,11 +112,7 @@ test_expect_success 'rebase -i with the exec command checks tree cleanness' '
        export FAKE_LINES &&
        test_must_fail git rebase -i HEAD^
        ) &&
-       test $(git rev-parse master^) = $(git rev-parse HEAD) || {
-               echo "Stopped at wrong revision:"
-               echo "($(git describe --tags HEAD) instead of master^)"
-               false
-       } &&
+       test_cmp_rev master^ HEAD &&
        git reset --hard &&
        git rebase --continue
 '
@@ -584,7 +576,7 @@ test_expect_success 'do "noop" when there is nothing to cherry-pick' '
 
        git checkout -b branch4 HEAD &&
        GIT_EDITOR=: git commit --amend \
-               --author="Somebody else <somebody@else.com>" 
+               --author="Somebody else <somebody@else.com>" &&
        test $(git rev-parse branch3) != $(git rev-parse branch4) &&
        git rebase -i branch3 &&
        test $(git rev-parse branch3) = $(git rev-parse branch4)
@@ -599,7 +591,7 @@ test_expect_success 'submodule rebase setup' '
                git add elif && git commit -m "submodule initial"
        ) &&
        echo 1 >file1 &&
-       git add file1 sub
+       git add file1 sub &&
        test_tick &&
        git commit -m "One" &&
        echo 2 >file1 &&
index 85fc7c4af8cebdb50a7fa294b274bb2e7988997b..fe5f936988bc5ec9bbe6d9175ef6e085c422eadc 100755 (executable)
@@ -43,20 +43,20 @@ test_expect_success 'rebase -m' '
 '
 
 test_expect_success 'rebase --stat' '
-        git reset --hard start
+       git reset --hard start &&
         git rebase --stat master >diffstat.txt &&
         grep "^ fileX |  *1 +$" diffstat.txt
 '
 
 test_expect_success 'rebase w/config rebase.stat' '
-        git reset --hard start
+       git reset --hard start &&
         git config rebase.stat true &&
         git rebase master >diffstat.txt &&
         grep "^ fileX |  *1 +$" diffstat.txt
 '
 
 test_expect_success 'rebase -n overrides config rebase.stat config' '
-        git reset --hard start
+       git reset --hard start &&
         git config rebase.stat true &&
         git rebase -n master >diffstat.txt &&
         ! grep "^ fileX |  *1 +$" diffstat.txt
index 2062b858bbcb63a715d87f3b12adfd0e9ceb3a67..6b84e6042a6fcc9cf850a53ad2a885597fb178fc 100755 (executable)
@@ -16,7 +16,7 @@ test_expect_success setup '
        git commit -a -m "A sample commit log message that has a long
 summary that spills over multiple lines.
 
-But otherwise with a sane description."
+But otherwise with a sane description." &&
 
        git branch side &&
 
index 5869061c5bfdee4a84b156b8ec9d6e331a2c906c..086c91c7b47aa2fa7b593f4f9b2f84f6b7ba3724 100755 (executable)
@@ -173,14 +173,14 @@ EOF
 test_expect_success 'pre-rebase hook stops rebase' '
        git checkout -b stops1 other &&
        test_must_fail git rebase --root --onto master &&
-       test "z$(git symbolic-ref HEAD)" = zrefs/heads/stops1
+       test "z$(git symbolic-ref HEAD)" = zrefs/heads/stops1 &&
        test 0 = $(git rev-list other...stops1 | wc -l)
 '
 
 test_expect_success 'pre-rebase hook stops rebase -i' '
        git checkout -b stops2 other &&
        test_must_fail git rebase --root --onto master &&
-       test "z$(git symbolic-ref HEAD)" = zrefs/heads/stops2
+       test "z$(git symbolic-ref HEAD)" = zrefs/heads/stops2 &&
        test 0 = $(git rev-list other...stops2 | wc -l)
 '
 
index 220a740ee89af325d04321a45aafc275ed130610..1fb3e499b4a044d935c090bfa567a7ace271c054 100755 (executable)
@@ -89,7 +89,7 @@ test_expect_success 'same, but do not remove trailing spaces' '
        git config core.whitespace "-blank-at-eol" &&
        git reset --hard HEAD^ &&
        cp third file && git add file && git commit -m third &&
-       git rebase --whitespace=fix HEAD^^
+       git rebase --whitespace=fix HEAD^^ &&
        git diff --exit-code HEAD^:file expect-second &&
        test_cmp file third
 '
index f7b3518a32763aa0fbad1a245dad8f0a5d866126..e6a64816efef0e53018c7a56784d1af62602e9d3 100755 (executable)
@@ -23,7 +23,7 @@ test_expect_success 'conflicting merge' '
 test_expect_success 'fixup' '
        echo foo-dev >foo &&
        git add foo && test_tick && git commit -q -m 4 &&
-       git reset --hard HEAD^
+       git reset --hard HEAD^ &&
        echo foo-dev >expect
 '
 
@@ -33,7 +33,7 @@ test_expect_success 'cherry-pick conflict' '
 '
 
 test_expect_success 'reconfigure' '
-       git config rerere.enabled false
+       git config rerere.enabled false &&
        git reset --hard
 '
 
index 7d4946984121b68ce1fe64dd3f5f363a53c63255..da82b655b3b33520b2c39d3992bc40368bf652be 100755 (executable)
@@ -36,19 +36,19 @@ for_each_name () {
 test_expect_success TABS_IN_FILENAMES 'setup' '
 
        mkdir "$FN" &&
-       for_each_name "echo initial >\"\$name\""
+       for_each_name "echo initial >\"\$name\"" &&
        git add . &&
        git commit -q -m Initial &&
 
        for_each_name "echo second >\"\$name\"" &&
-       git commit -a -m Second
+       git commit -a -m Second &&
 
        for_each_name "echo modified >\"\$name\""
 
 '
 
 test_expect_success TABS_IN_FILENAMES 'setup expected files' '
-cat >expect.quoted <<\EOF
+cat >expect.quoted <<\EOF &&
 Name
 "Name and a\nLF"
 "Name and an\tHT"
index 903a122efe0c54cb44eb6c3e7ed04bdbab81439d..6fd560ccf10db5d016a4f1dde9e5eacca70e6f5b 100755 (executable)
@@ -157,7 +157,7 @@ EOF
 
 test_expect_success 'stash branch' '
        echo foo > file &&
-       git commit file -m first
+       git commit file -m first &&
        echo bar > file &&
        echo bar2 > file2 &&
        git add file2 &&
@@ -255,7 +255,7 @@ test_expect_success 'stash rm and ignore' '
        echo file >.gitignore &&
        git stash save "rm and ignore" &&
        test bar = "$(cat file)" &&
-       test file = "$(cat .gitignore)"
+       test file = "$(cat .gitignore)" &&
        git stash apply &&
        ! test -r file &&
        test file = "$(cat .gitignore)"
@@ -268,7 +268,7 @@ test_expect_success 'stash rm and ignore (stage .gitignore)' '
        git add .gitignore &&
        git stash save "rm and ignore (stage .gitignore)" &&
        test bar = "$(cat file)" &&
-       ! test -r .gitignore
+       ! test -r .gitignore &&
        git stash apply &&
        ! test -r file &&
        test file = "$(cat .gitignore)"
index d1819ca23a782eddc61d86c62060242b293b86b0..1e7193ac0bc650868f187d3103be32c3004a95b2 100755 (executable)
@@ -20,7 +20,7 @@ test_expect_success PERL 'setup' '
 # note: bar sorts before dir, so the first 'n' is always to skip 'bar'
 
 test_expect_success PERL 'saying "n" does nothing' '
-       set_state dir/foo work index
+       set_state dir/foo work index &&
        (echo n; echo n) | test_must_fail git stash save -p &&
        verify_state dir/foo work index &&
        verify_saved_state bar
index 73441a516572dcf826582c04f3fe9d3ad0c1a88c..9fb8ca06a84b3f3e60f466cc33bc2de786a9fc90 100755 (executable)
@@ -205,8 +205,8 @@ test_expect_success \
     'rm -fr Z [A-Z][A-Z] &&
      git read-tree $tree_A &&
      git checkout-index -f -a &&
-     git read-tree --reset $tree_O || return 1
-     git update-index --refresh >/dev/null ;# this can exit non-zero
+     git read-tree --reset $tree_O &&
+     test_must_fail git update-index --refresh -q &&
      git diff-files >.test-a &&
      cmp_diff_files_output .test-a .test-recursive-OA'
 
@@ -215,8 +215,8 @@ test_expect_success \
     'rm -fr Z [A-Z][A-Z] &&
      git read-tree $tree_B &&
      git checkout-index -f -a &&
-     git read-tree --reset $tree_O || return 1
-     git update-index --refresh >/dev/null ;# this can exit non-zero
+     git read-tree --reset $tree_O &&
+     test_must_fail git update-index --refresh -q &&
      git diff-files >.test-a &&
      cmp_diff_files_output .test-a .test-recursive-OB'
 
@@ -225,8 +225,8 @@ test_expect_success \
     'rm -fr Z [A-Z][A-Z] &&
      git read-tree $tree_B &&
      git checkout-index -f -a &&
-     git read-tree --reset $tree_A || return 1
-     git update-index --refresh >/dev/null ;# this can exit non-zero
+     git read-tree --reset $tree_A &&
+     test_must_fail git update-index --refresh -q &&
      git diff-files >.test-a &&
      cmp_diff_files_output .test-a .test-recursive-AB'
 
index e19ca65885a1e49916f68eee4abbe65e98227c50..d79d9e1e71ec38b4a82f1bf36dbbff5c3247a4d4 100755 (executable)
@@ -155,7 +155,7 @@ test_expect_success \
      git checkout-index -f -u -a &&
      sed -e "s/git/GIT/" file0 >file1 &&
      sed -e "s/git/GET/" file0 >file2 &&
-     rm -f file0
+     rm -f file0 &&
      git update-index --add --remove file0 file1 file2'
 
 test_expect_success \
index a8736f7cbeef65b3454847bb4b4df508c0079652..8622eb51c70acf73ea1f2173a946b1a5ade6a221 100755 (executable)
@@ -330,7 +330,7 @@ test_expect_success 'check space before tab in indent (space-before-tab: on)' '
 
 test_expect_success 'check spaces as indentation (indent-with-non-tab: off)' '
 
-       git config core.whitespace "-indent-with-non-tab"
+       git config core.whitespace "-indent-with-non-tab" &&
        echo "        foo ();" > x &&
        git diff --check
 
index 61589853df55e063fbe6489fc9c6effc4a9f33b6..95a7ca707045cad3362b92c18df73e82206a2844 100755 (executable)
@@ -29,66 +29,49 @@ test_expect_success 'git diff --quiet -w  HEAD^ HEAD' '
 '
 
 test_expect_success 'git diff-tree HEAD^ HEAD' '
-       git diff-tree --exit-code HEAD^ HEAD
-       test $? = 1
+       test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD
 '
 test_expect_success 'git diff-tree HEAD^ HEAD -- a' '
        git diff-tree --exit-code HEAD^ HEAD -- a
-       test $? = 0
 '
 test_expect_success 'git diff-tree HEAD^ HEAD -- b' '
-       git diff-tree --exit-code HEAD^ HEAD -- b
-       test $? = 1
+       test_expect_code 1 git diff-tree --exit-code HEAD^ HEAD -- b
 '
 test_expect_success 'echo HEAD | git diff-tree --stdin' '
-       echo $(git rev-parse HEAD) | git diff-tree --exit-code --stdin
-       test $? = 1
+       echo $(git rev-parse HEAD) | test_expect_code 1 git diff-tree --exit-code --stdin
 '
 test_expect_success 'git diff-tree HEAD HEAD' '
        git diff-tree --exit-code HEAD HEAD
-       test $? = 0
 '
 test_expect_success 'git diff-files' '
        git diff-files --exit-code
-       test $? = 0
 '
 test_expect_success 'git diff-index --cached HEAD' '
        git diff-index --exit-code --cached HEAD
-       test $? = 0
 '
 test_expect_success 'git diff-index --cached HEAD^' '
-       git diff-index --exit-code --cached HEAD^
-       test $? = 1
+       test_expect_code 1 git diff-index --exit-code --cached HEAD^
 '
 test_expect_success 'git diff-index --cached HEAD^' '
        echo text >>b &&
        echo 3 >c &&
-       git add . && {
-               git diff-index --exit-code --cached HEAD^
-               test $? = 1
-       }
+       git add . &&
+       test_expect_code 1 git diff-index --exit-code --cached HEAD^
 '
 test_expect_success 'git diff-tree -Stext HEAD^ HEAD -- b' '
-       git commit -m "text in b" && {
-               git diff-tree -p --exit-code -Stext HEAD^ HEAD -- b
-               test $? = 1
-       }
+       git commit -m "text in b" &&
+       test_expect_code 1 git diff-tree -p --exit-code -Stext HEAD^ HEAD -- b
 '
 test_expect_success 'git diff-tree -Snot-found HEAD^ HEAD -- b' '
        git diff-tree -p --exit-code -Snot-found HEAD^ HEAD -- b
-       test $? = 0
 '
 test_expect_success 'git diff-files' '
-       echo 3 >>c && {
-               git diff-files --exit-code
-               test $? = 1
-       }
+       echo 3 >>c &&
+       test_expect_code 1 git diff-files --exit-code
 '
 test_expect_success 'git diff-index --cached HEAD' '
-       git update-index c && {
-               git diff-index --exit-code --cached HEAD
-               test $? = 1
-       }
+       git update-index c &&
+       test_expect_code 1 git diff-index --exit-code --cached HEAD
 '
 
 test_expect_success '--check --exit-code returns 0 for no difference' '
@@ -100,30 +83,26 @@ test_expect_success '--check --exit-code returns 0 for no difference' '
 test_expect_success '--check --exit-code returns 1 for a clean difference' '
 
        echo "good" > a &&
-       git diff --check --exit-code
-       test $? = 1
+       test_expect_code 1 git diff --check --exit-code
 
 '
 
 test_expect_success '--check --exit-code returns 3 for a dirty difference' '
 
        echo "bad   " >> a &&
-       git diff --check --exit-code
-       test $? = 3
+       test_expect_code 3 git diff --check --exit-code
 
 '
 
 test_expect_success '--check with --no-pager returns 2 for dirty difference' '
 
-       git --no-pager diff --check
-       test $? = 2
+       test_expect_code 2 git --no-pager diff --check
 
 '
 
 test_expect_success 'check should test not just the last line' '
        echo "" >>a &&
-       git --no-pager diff --check
-       test $? = 2
+       test_expect_code 2 git --no-pager diff --check
 
 '
 
@@ -133,10 +112,8 @@ test_expect_success 'check detects leftover conflict markers' '
        echo binary >>b &&
        git commit -m "side" b &&
        test_must_fail git merge master &&
-       git add b && (
-               git --no-pager diff --cached --check >test.out
-               test $? = 2
-       ) &&
+       git add b &&
+       test_expect_code 2 git --no-pager diff --cached --check >test.out &&
        test 3 = $(grep "conflict marker" test.out | wc -l) &&
        git reset --hard
 '
@@ -146,19 +123,13 @@ test_expect_success 'check honors conflict marker length' '
        echo ">>>>>>> boo" >>b &&
        echo "======" >>a &&
        git diff --check a &&
-       (
-               git diff --check b
-               test $? = 2
-       ) &&
+       test_expect_code 2 git diff --check b &&
        git reset --hard &&
        echo ">>>>>>>> boo" >>b &&
        echo "========" >>a &&
        git diff --check &&
        echo "b conflict-marker-size=8" >.gitattributes &&
-       (
-               git diff --check b
-               test $? = 2
-       ) &&
+       test_expect_code 2 git diff --check b &&
        git diff --check a &&
        git reset --hard
 '
index f6d1f1ebab406fcd4f405178ec151149754500b0..f7c85ec604df5e037990065ab9d3d82d86587076 100755 (executable)
@@ -36,11 +36,12 @@ prepare_output () {
        git diff --color >output
        $grep_a "$blue_grep" output >error
        $grep_a -v "$blue_grep" output >normal
+       return 0
 }
 
 test_expect_success default '
 
-       prepare_output
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT error >/dev/null &&
@@ -52,8 +53,8 @@ test_expect_success default '
 
 test_expect_success 'without -trail' '
 
-       git config core.whitespace -trail
-       prepare_output
+       git config core.whitespace -trail &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT error >/dev/null &&
@@ -65,9 +66,9 @@ test_expect_success 'without -trail' '
 
 test_expect_success 'without -trail (attribute)' '
 
-       git config --unset core.whitespace
-       echo "F whitespace=-trail" >.gitattributes
-       prepare_output
+       test_might_fail git config --unset core.whitespace &&
+       echo "F whitespace=-trail" >.gitattributes &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT error >/dev/null &&
@@ -79,9 +80,9 @@ test_expect_success 'without -trail (attribute)' '
 
 test_expect_success 'without -space' '
 
-       rm -f .gitattributes
-       git config core.whitespace -space
-       prepare_output
+       rm -f .gitattributes &&
+       git config core.whitespace -space &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT normal >/dev/null &&
@@ -93,9 +94,9 @@ test_expect_success 'without -space' '
 
 test_expect_success 'without -space (attribute)' '
 
-       git config --unset core.whitespace
-       echo "F whitespace=-space" >.gitattributes
-       prepare_output
+       test_might_fail git config --unset core.whitespace &&
+       echo "F whitespace=-space" >.gitattributes &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT normal >/dev/null &&
@@ -107,9 +108,9 @@ test_expect_success 'without -space (attribute)' '
 
 test_expect_success 'with indent-non-tab only' '
 
-       rm -f .gitattributes
-       git config core.whitespace indent,-trailing,-space
-       prepare_output
+       rm -f .gitattributes &&
+       git config core.whitespace indent,-trailing,-space &&
+       prepare_output &&
 
        grep Eight error >/dev/null &&
        grep HT normal >/dev/null &&
@@ -121,9 +122,9 @@ test_expect_success 'with indent-non-tab only' '
 
 test_expect_success 'with indent-non-tab only (attribute)' '
 
-       git config --unset core.whitespace
-       echo "F whitespace=indent,-trailing,-space" >.gitattributes
-       prepare_output
+       test_might_fail git config --unset core.whitespace &&
+       echo "F whitespace=indent,-trailing,-space" >.gitattributes &&
+       prepare_output &&
 
        grep Eight error >/dev/null &&
        grep HT normal >/dev/null &&
@@ -135,9 +136,9 @@ test_expect_success 'with indent-non-tab only (attribute)' '
 
 test_expect_success 'with cr-at-eol' '
 
-       rm -f .gitattributes
-       git config core.whitespace cr-at-eol
-       prepare_output
+       rm -f .gitattributes &&
+       git config core.whitespace cr-at-eol &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT error >/dev/null &&
@@ -149,9 +150,9 @@ test_expect_success 'with cr-at-eol' '
 
 test_expect_success 'with cr-at-eol (attribute)' '
 
-       git config --unset core.whitespace
-       echo "F whitespace=trailing,cr-at-eol" >.gitattributes
-       prepare_output
+       test_might_fail git config --unset core.whitespace &&
+       echo "F whitespace=trailing,cr-at-eol" >.gitattributes &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT error >/dev/null &&
@@ -179,11 +180,11 @@ test_expect_success 'trailing empty lines (2)' '
 '
 
 test_expect_success 'do not color trailing cr in context' '
-       git config --unset core.whitespace
+       test_might_fail git config --unset core.whitespace &&
        rm -f .gitattributes &&
        echo AAAQ | tr Q "\015" >G &&
        git add G &&
-       echo BBBQ | tr Q "\015" >>G
+       echo BBBQ | tr Q "\015" >>G &&
        git diff --color G | tr "\015" Q >output &&
        grep "BBB.*${blue_grep}Q" output &&
        grep "AAA.*\[mQ" output
index 709b3231ca8d9da631727b4aadfb2f46049d37e9..886494b58f6739d40c2c34724064317b0d3be770 100755 (executable)
@@ -95,7 +95,7 @@ test_expect_success 'format.numbered && --keep-subject' '
 
 test_expect_success 'format.numbered = auto' '
 
-       git config format.numbered auto
+       git config format.numbered auto &&
        git format-patch --stdout HEAD~2 > patch5 &&
        test_numbered patch5
 
index d5ccdd0cf8061e797e88185bfddb0864f73291dd..3726a0e2012e534623ddbdd71da04f177c32d4d0 100755 (executable)
@@ -74,7 +74,6 @@ test_expect_success 'extra character after attribute' '
 '
 
 test_expect_success 'unknown color slots are ignored (diff)' '
-       git config --unset diff.color.new
        git config color.diff.nosuchslotwilleverbedefined white &&
        git diff --color
 '
index d99814ac641c93383d7199f4419083bedcfc9ea8..241a74d2a20276d711944d3e203083b515486e77 100755 (executable)
@@ -316,11 +316,11 @@ test_expect_success 'git diff (empty submodule dir)' '
 test_expect_success 'conflicted submodule setup' '
 
        # 39 efs
-       c=fffffffffffffffffffffffffffffffffffffff
+       c=fffffffffffffffffffffffffffffffffffffff &&
        (
-               echo "000000 $_z40 0    sub"
-               echo "160000 1$c 1      sub"
-               echo "160000 2$c 2      sub"
+               echo "000000 $_z40 0    sub" &&
+               echo "160000 1$c 1      sub" &&
+               echo "160000 2$c 2      sub" &&
                echo "160000 3$c 3      sub"
        ) | git update-index --index-info &&
        echo >expect.nosub '\''diff --cc sub
index 3f3c7577ca85c92e5ff986044e0c4afa95bf608d..8096d8a337867b4afdc4b061fdc314fdd8eac185 100755 (executable)
@@ -6,8 +6,8 @@ test_description='word diff colors'
 
 test_expect_success setup '
 
-       git config diff.color.old red
-       git config diff.color.new green
+       git config diff.color.old red &&
+       git config diff.color.new green &&
        git config diff.color.func magenta
 
 '
index 08ad6d8b9e6b2869bfd2b574779380895709972d..dbbf56cba9f5108f79d767ad48f3092dc821a232 100755 (executable)
@@ -50,11 +50,11 @@ test_expect_success 'setup' "
 "
 
 test_expect_success 'stat binary diff -- should not fail.' \
-       'git checkout master
+       'git checkout master &&
         git apply --stat --summary B.diff'
 
 test_expect_success 'stat binary diff (copy) -- should not fail.' \
-       'git checkout master
+       'git checkout master &&
         git apply --stat --summary C.diff'
 
 test_expect_success 'check binary diff -- should fail.' \
@@ -78,11 +78,11 @@ test_expect_success \
 '
 
 test_expect_success 'check binary diff with replacement.' \
-       'git checkout master
+       'git checkout master &&
         git apply --check --allow-binary-replacement BF.diff'
 
 test_expect_success 'check binary diff with replacement (copy).' \
-       'git checkout master
+       'git checkout master &&
         git apply --check --allow-binary-replacement CF.diff'
 
 # Now we start applying them.
index a52d94ae21afe8faaea31721234a912b090e2e08..7c398432bad761c1b38c6d15548bed0c389221fd 100755 (executable)
@@ -89,7 +89,7 @@ test_expect_success 'apply --index from subdir of toplevel' '
 test_expect_success 'apply from .git dir' '
        cp postimage expected &&
        cp preimage .git/file &&
-       cp preimage .git/objects/file
+       cp preimage .git/objects/file &&
        (
                cd .git &&
                git apply "$patch"
@@ -100,7 +100,7 @@ test_expect_success 'apply from .git dir' '
 test_expect_success 'apply from subdir of .git dir' '
        cp postimage expected &&
        cp preimage .git/file &&
-       cp preimage .git/objects/file
+       cp preimage .git/objects/file &&
        (
                cd .git/objects &&
                git apply "$patch"
index 3c73a783a7e908070308fb1f972f6b5d152e12a4..3d0384daa8a7b7369826b05bcb793cb445c3f9ee 100755 (executable)
@@ -73,7 +73,7 @@ D=`pwd`
 test_expect_success 'apply --whitespace=strip in subdir' '
 
        cd "$D" &&
-       git config --unset-all apply.whitespace
+       git config --unset-all apply.whitespace &&
        rm -f sub/file1 &&
        cp saved sub/file1 &&
        git update-index --refresh &&
index 8a676a5dcd113418c2bd4ea4aa885fddd5951a3a..61bfc569c37eefa6dba4dd6f26513c61d71cfb9c 100755 (executable)
@@ -176,9 +176,8 @@ test_expect_success 'trailing whitespace & no newline at the end of file' '
 '
 
 test_expect_success 'blank at EOF with --whitespace=fix (1)' '
-       : these can fail depending on what we did before
-       git config --unset core.whitespace
-       rm -f .gitattributes
+       test_might_fail git config --unset core.whitespace &&
+       rm -f .gitattributes &&
 
        { echo a; echo b; echo c; } >one &&
        git add one &&
@@ -368,7 +367,7 @@ test_expect_success 'missing blanks at EOF must only match blank lines' '
        git diff -- one >patch &&
 
        echo a >one &&
-       test_must_fail git apply patch
+       test_must_fail git apply patch &&
        test_must_fail git apply --whitespace=fix patch &&
        test_must_fail git apply --ignore-space-change --whitespace=fix patch
 '
@@ -419,7 +418,7 @@ test_expect_success 'same, but with CR-LF line endings && cr-at-eol set' '
        printf "b\r\n" >>one &&
        printf "c\r\n" >>one &&
        cp one save-one &&
-       printf "                 \r\n" >>one
+       printf "                 \r\n" >>one &&
        git add one &&
        printf "d\r\n" >>one &&
        cp one expect &&
@@ -436,7 +435,7 @@ test_expect_success 'same, but with CR-LF line endings && cr-at-eol unset' '
        printf "b\r\n" >>one &&
        printf "c\r\n" >>one &&
        cp one save-one &&
-       printf "                 \r\n" >>one
+       printf "                 \r\n" >>one &&
        git add one &&
        cp one expect &&
        printf "d\r\n" >>one &&
index 77200c0b2d969d621623f3be8621a3f9925d50a5..972946c174c18ee831d8595068c6ffa235c8a538 100755 (executable)
@@ -31,7 +31,7 @@ test_expect_success 'apply same filename with independent changes' '
 '
 
 test_expect_success 'apply same filename with overlapping changes' '
-       git reset --hard
+       git reset --hard &&
        modify "s/^d/z/" same_fn &&
        git diff > patch0 &&
        git add same_fn &&
@@ -44,8 +44,8 @@ test_expect_success 'apply same filename with overlapping changes' '
 '
 
 test_expect_success 'apply same new filename after rename' '
-       git reset --hard
-       git mv same_fn new_fn
+       git reset --hard &&
+       git mv same_fn new_fn &&
        modify "s/^d/z/" new_fn &&
        git add new_fn &&
        git diff -M --cached > patch1 &&
@@ -58,12 +58,12 @@ test_expect_success 'apply same new filename after rename' '
 '
 
 test_expect_success 'apply same old filename after rename -- should fail.' '
-       git reset --hard
-       git mv same_fn new_fn
+       git reset --hard &&
+       git mv same_fn new_fn &&
        modify "s/^d/z/" new_fn &&
        git add new_fn &&
        git diff -M --cached > patch1 &&
-       git mv new_fn same_fn
+       git mv new_fn same_fn &&
        modify "s/^e/y/" same_fn &&
        git diff >> patch1 &&
        git reset --hard &&
@@ -71,13 +71,13 @@ test_expect_success 'apply same old filename after rename -- should fail.' '
 '
 
 test_expect_success 'apply A->B (rename), C->A (rename), A->A -- should pass.' '
-       git reset --hard
-       git mv same_fn new_fn
+       git reset --hard &&
+       git mv same_fn new_fn &&
        modify "s/^d/z/" new_fn &&
        git add new_fn &&
        git diff -M --cached > patch1 &&
        git commit -m "a rename" &&
-       git mv other_fn same_fn
+       git mv other_fn same_fn &&
        modify "s/^e/y/" same_fn &&
        git add same_fn &&
        git diff -M --cached >> patch1 &&
index 7cfa2d6287ff7c6c0fc7fbc2e86fd622bbc901ce..d173acde0f2c44031003144fda9770f4b1e726b4 100755 (executable)
@@ -44,7 +44,7 @@ test_expect_success 'criss-cross rename' '
        git reset --hard &&
        mv file1 tmp &&
        mv file2 file1 &&
-       mv file3 file2
+       mv file3 file2 &&
        mv tmp file3 &&
        cp file1 file1-swapped &&
        cp file2 file2-swapped &&
index 34218071b64600812acef5b5e3277346889eda7f..94da99075c55c790aae7a260ff6c4964f950c47c 100755 (executable)
@@ -8,7 +8,7 @@ test_description='git apply filename consistency check'
 . ./test-lib.sh
 
 test_expect_success setup '
-       cat > bad1.patch <<EOF
+       cat > bad1.patch <<EOF &&
 diff --git a/f b/f
 new file mode 100644
 index 0000000..d00491f
@@ -29,9 +29,9 @@ EOF
 '
 
 test_expect_success 'apply diff with inconsistent filenames in headers' '
-       test_must_fail git apply bad1.patch 2>err
-       grep "inconsistent new filename" err
-       test_must_fail git apply bad2.patch 2>err
+       test_must_fail git apply bad1.patch 2>err &&
+       grep "inconsistent new filename" err &&
+       test_must_fail git apply bad2.patch 2>err &&
        grep "inconsistent old filename" err
 '
 
index 1b82f93cffb1d4444a8c789f95931b86dd3d93b6..0043930ca6ab31f6cd6a0bf6464ceb281663f9e8 100755 (executable)
@@ -8,7 +8,7 @@ test_description='git apply submodule tests'
 . ./test-lib.sh
 
 test_expect_success setup '
-       cat > create-sm.patch <<EOF
+       cat > create-sm.patch <<EOF &&
 diff --git a/dir/sm b/dir/sm
 new file mode 160000
 index 0000000..0123456
index 1c3d8ed548e629689517661cd1fc6c21d98ccc80..850fc96d1f07b19310cb4672ab44374b37b82d67 100755 (executable)
@@ -219,7 +219,7 @@ test_expect_success 'am stays in branch' '
 
 test_expect_success 'am --signoff does not add Signed-off-by: line if already there' '
        git format-patch --stdout HEAD^ >patch3 &&
-       sed -e "/^Subject/ s,\[PATCH,Re: Re: Re: & 1/5 v2," patch3 >patch4
+       sed -e "/^Subject/ s,\[PATCH,Re: Re: Re: & 1/5 v2," patch3 >patch4 &&
        rm -fr .git/rebase-apply &&
        git reset --hard &&
        git checkout HEAD^ &&
index cdb70b4b3356eeb45bb6e5ac62d1f82eb6b3ccdc..6872ba1a42ce289c0983b1ed62f05defb493bf49 100755 (executable)
@@ -35,7 +35,7 @@ test_expect_success 'setup' '
                tr 1234 "\370\235\204\236")" a1 &&
 
        echo 5 >a1 &&
-       git commit --quiet -m "a                                                                12      34      56      78" a1
+       git commit --quiet -m "a                                                                12      34      56      78" a1 &&
 
        echo 6 >a1 &&
        git commit --quiet -m "Commit by someone else" \
index 2e513569477bb5efc389a2088a4d896620e50b8f..a8c33d57031db00cc096a80861ecfb7e72faa635 100755 (executable)
@@ -191,7 +191,7 @@ test_expect_success 'git show <commits> leaves list of commits as given' '
 test_expect_success 'setup case sensitivity tests' '
        echo case >one &&
        test_tick &&
-       git add one
+       git add one &&
        git commit -a -m Second
 '
 
@@ -341,7 +341,7 @@ test_expect_success 'set up more tangled history' '
        test_commit octopus-b &&
        git checkout master &&
        test_commit seventh &&
-       git merge octopus-a octopus-b
+       git merge octopus-a octopus-b &&
        git merge reach
 '
 
@@ -393,7 +393,7 @@ test_expect_success 'log --graph with merge' '
 '
 
 test_expect_success 'log.decorate configuration' '
-       git config --unset-all log.decorate || :
+       test_might_fail git config --unset-all log.decorate &&
 
        git log --oneline >expect.none &&
        git log --oneline --decorate >expect.short &&
index f603c1b1336c4a00889177376d9b51077c9cc2ac..e758e634a34762c6a2e085e0f6ea8fc5cc00af5e 100755 (executable)
@@ -59,7 +59,7 @@ test_expect_success 'interrupted am --directory="frotz nitfol"' '
 '
 
 test_expect_success 'apply to a funny path' '
-       with_sq="with'\''sq"
+       with_sq="with'\''sq" &&
        rm -fr .git/rebase-apply &&
        git reset --hard initial &&
        git am --directory="$with_sq" "$tm"/am-test-5-2 &&
index bbb9c1251d97bdaf5bca8f8260e481c3cac56dea..602806d09cda72c7bf0f407da35b2fb859404bd7 100755 (executable)
@@ -12,7 +12,7 @@ TRASH=`pwd`
 
 test_expect_success \
     'setup' \
-    'rm -f .git/index*
+    'rm -f .git/index* &&
      perl -e "print \"a\" x 4096;" > a &&
      perl -e "print \"b\" x 4096;" > b &&
      perl -e "print \"c\" x 4096;" > c &&
index 0a24e61ff942ee91dfb25fe490330a0272480ac2..2fc5af6007c75b7789cf2a91163939e24e00ac09 100755 (executable)
@@ -8,7 +8,7 @@ test_description='mmap sliding window tests'
 
 test_expect_success \
     'setup' \
-    'rm -f .git/index*
+    'rm -f .git/index* &&
      for i in a b c
      do
          echo $i >$i &&
@@ -48,7 +48,7 @@ test_expect_success \
      git repack -a -d &&
      test "`git count-objects`" = "0 objects, 0 kilobytes" &&
      pack2=`ls .git/objects/pack/*.pack` &&
-     test -f "$pack2"
+     test -f "$pack2" &&
      test "$pack1" \!= "$pack2"'
 
 test_expect_success \
index fb3a270822c9a4ac2e4f79bfa71c784291859d4f..b34ea93a8056a7ae0edf111ffe14c99b7c5b33c5 100755 (executable)
@@ -8,7 +8,7 @@ test_description='pack index with 64-bit offsets and object CRC'
 
 test_expect_success \
     'setup' \
-    'rm -rf .git
+    'rm -rf .git &&
      git init &&
      git config pack.threads 1 &&
      i=1 &&
index 18376d66081759c6a4959a2d8bc47ca441364660..bafcca765e4fea92f430e7127506a2370e062ec7 100755 (executable)
@@ -91,7 +91,7 @@ test_expect_success 'setup' '
                prev=$cur &&
                cur=$(($cur+1))
        done &&
-       add B1 $A1
+       add B1 $A1 &&
        echo $ATIP > .git/refs/heads/A &&
        echo $BTIP > .git/refs/heads/B &&
        git symbolic-ref HEAD refs/heads/B
index 1037a723fe74756f241346a077f4f3682dbbf45d..7a46cbdbe687d080def03f41721fd0920ccd316f 100755 (executable)
@@ -57,7 +57,7 @@ test_expect_success 'copy commit and tree but not blob by hand' '
                cd cloned &&
                git count-objects | sed -e "s/ *objects,.*//"
        ) ) &&
-       test $cnt -eq 6
+       test $cnt -eq 6 &&
 
        blob=$(git rev-parse HEAD:file | sed -e "s|..|&/|") &&
        test -f "cloned/.git/objects/$blob" &&
index aa0ada01476b89f3f284dda42f892155496f3467..60de2d6ede958e713aebe85d73ee65ddbc10201d 100755 (executable)
@@ -49,7 +49,7 @@ EOF
 '
 
 test_expect_success NOT_MINGW 'fetch A (new commit : 1 connection)' '
-       rm -f $U
+       rm -f $U &&
        (
                cd cloned &&
                GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
@@ -82,7 +82,7 @@ EOF
 '
 
 test_expect_success NOT_MINGW 'fetch C, T (new branch, tag : 1 connection)' '
-       rm -f $U
+       rm -f $U &&
        (
                cd cloned &&
                GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
@@ -121,7 +121,7 @@ EOF
 '
 
 test_expect_success NOT_MINGW 'fetch B, S (commit and tag : 1 connection)' '
-       rm -f $U
+       rm -f $U &&
        (
                cd cloned &&
                GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
index 9a884751ec73ff721d658ebb69cbfe1f0270be85..7e433b179f9fcb0b3ccdd0ec83c6ec850735e391 100755 (executable)
@@ -119,7 +119,7 @@ test_expect_success 'fetch must not resolve short tag name' '
 test_expect_success 'fetch must not resolve short remote name' '
 
        cd "$D" &&
-       git update-ref refs/remotes/six/HEAD HEAD
+       git update-ref refs/remotes/six/HEAD HEAD &&
 
        mkdir six &&
        cd six &&
index b73733219d62cabf02c59ed0bf08caec1158faef..227dd56137c469311209ebda43cb89f9734c6e68 100755 (executable)
@@ -27,7 +27,7 @@ test_expect_success setup '
        (
                cd two && git branch another
        ) &&
-       git clone --mirror two three
+       git clone --mirror two three &&
        git clone one test
 '
 
index b11da79c9cafebb5af572bd8e9f85dfc6f3c3f77..d73731e6446f71480db1ec7cceb73f27ad51ecd3 100755 (executable)
@@ -586,7 +586,7 @@ test_expect_success 'push --delete refuses src:dest refspecs' '
 '
 
 test_expect_success 'warn on push to HEAD of non-bare repository' '
-       mk_test heads/master
+       mk_test heads/master &&
        (
                cd testrepo &&
                git checkout master &&
@@ -597,7 +597,7 @@ test_expect_success 'warn on push to HEAD of non-bare repository' '
 '
 
 test_expect_success 'deny push to HEAD of non-bare repository' '
-       mk_test heads/master
+       mk_test heads/master &&
        (
                cd testrepo &&
                git checkout master &&
@@ -607,7 +607,7 @@ test_expect_success 'deny push to HEAD of non-bare repository' '
 '
 
 test_expect_success 'allow push to HEAD of bare repository (bare)' '
-       mk_test heads/master
+       mk_test heads/master &&
        (
                cd testrepo &&
                git checkout master &&
@@ -619,7 +619,7 @@ test_expect_success 'allow push to HEAD of bare repository (bare)' '
 '
 
 test_expect_success 'allow push to HEAD of non-bare repository (config)' '
-       mk_test heads/master
+       mk_test heads/master &&
        (
                cd testrepo &&
                git checkout master &&
index 96be5236a2faf7178edc3c60094ecc37da741a65..c00c9b071d696038f63e8d613e11beab68eb547e 100755 (executable)
@@ -123,7 +123,7 @@ test_expect_success 'bob works and pushes again' '
        (
                cd alice-pub &&
                git cat-file commit master >../bob-work/commit
-       )
+       ) &&
        (
                # This time Bob does not pull from Alice, and
                # the master branch at her public repository points
index 65d8d474bcc6aa5ab4a1c659e228ac2e61d71e04..faa2e9633783e96609f4a31beb4bcccedb876338 100755 (executable)
@@ -6,7 +6,7 @@ test_description='unpack-objects'
 
 test_expect_success setup '
        mkdir pub.git &&
-       GIT_DIR=pub.git git init --bare
+       GIT_DIR=pub.git git init --bare &&
        GIT_DIR=pub.git git config receive.fsckobjects true &&
        mkdir work &&
        (
index 51287d89d8deb27ae2ae49fec84268422377eb29..82926cfdb7b7c6a86ab7d73efdfa327a6be28c83 100755 (executable)
@@ -52,21 +52,21 @@ get_static_files() {
 SMART=smart
 GIT_HTTP_EXPORT_ALL=1 && export GIT_HTTP_EXPORT_ALL
 test_expect_success 'direct refs/heads/master not found' '
-       log_div "refs/heads/master"
+       log_div "refs/heads/master" &&
        GET refs/heads/master "404 Not Found"
 '
 test_expect_success 'static file is ok' '
-       log_div "getanyfile default"
+       log_div "getanyfile default" &&
        get_static_files "200 OK"
 '
 SMART=smart_noexport
 unset GIT_HTTP_EXPORT_ALL
 test_expect_success 'no export by default' '
-       log_div "no git-daemon-export-ok"
+       log_div "no git-daemon-export-ok" &&
        get_static_files "404 Not Found"
 '
 test_expect_success 'export if git-daemon-export-ok' '
-       log_div "git-daemon-export-ok"
+       log_div "git-daemon-export-ok" &&
         (cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&
         touch git-daemon-export-ok
        ) &&
@@ -75,47 +75,47 @@ test_expect_success 'export if git-daemon-export-ok' '
 SMART=smart
 GIT_HTTP_EXPORT_ALL=1 && export GIT_HTTP_EXPORT_ALL
 test_expect_success 'static file if http.getanyfile true is ok' '
-       log_div "getanyfile true"
+       log_div "getanyfile true" &&
        config http.getanyfile true &&
        get_static_files "200 OK"
 '
 test_expect_success 'static file if http.getanyfile false fails' '
-       log_div "getanyfile false"
+       log_div "getanyfile false" &&
        config http.getanyfile false &&
        get_static_files "403 Forbidden"
 '
 
 test_expect_success 'http.uploadpack default enabled' '
-       log_div "uploadpack default"
+       log_div "uploadpack default" &&
        GET info/refs?service=git-upload-pack "200 OK"  &&
        POST git-upload-pack 0000 "200 OK"
 '
 test_expect_success 'http.uploadpack true' '
-       log_div "uploadpack true"
+       log_div "uploadpack true" &&
        config http.uploadpack true &&
        GET info/refs?service=git-upload-pack "200 OK" &&
        POST git-upload-pack 0000 "200 OK"
 '
 test_expect_success 'http.uploadpack false' '
-       log_div "uploadpack false"
+       log_div "uploadpack false" &&
        config http.uploadpack false &&
        GET info/refs?service=git-upload-pack "403 Forbidden" &&
        POST git-upload-pack 0000 "403 Forbidden"
 '
 
 test_expect_success 'http.receivepack default disabled' '
-       log_div "receivepack default"
+       log_div "receivepack default" &&
        GET info/refs?service=git-receive-pack "403 Forbidden"  &&
        POST git-receive-pack 0000 "403 Forbidden"
 '
 test_expect_success 'http.receivepack true' '
-       log_div "receivepack true"
+       log_div "receivepack true" &&
        config http.receivepack true &&
        GET info/refs?service=git-receive-pack "200 OK" &&
        POST git-receive-pack 0000 "200 OK"
 '
 test_expect_success 'http.receivepack false' '
-       log_div "receivepack false"
+       log_div "receivepack false" &&
        config http.receivepack false &&
        GET info/refs?service=git-receive-pack "403 Forbidden" &&
        POST git-receive-pack 0000 "403 Forbidden"
index deffdaee490d620c44baaee143f11be604171a42..3f353d99e8f4255b131b4d44d7ec2a2c73140f0f 100755 (executable)
@@ -5,21 +5,29 @@ test_description=clone
 . ./test-lib.sh
 
 test_expect_success setup '
-       echo "#!/bin/sh" > not_ssh
-       echo "echo \"\$*\" > not_ssh_output" >> not_ssh
-       echo "exit 1" >> not_ssh
+       echo "#!/bin/sh" > not_ssh &&
+       echo "echo \"\$*\" > not_ssh_output" >> not_ssh &&
+       echo "exit 1" >> not_ssh &&
        chmod +x not_ssh
 '
 
 test_expect_success 'clone calls git upload-pack unqualified with no -u option' '
-       GIT_SSH=./not_ssh git clone localhost:/path/to/repo junk
-       echo "localhost git-upload-pack '\''/path/to/repo'\''" >expected
+       (
+               GIT_SSH=./not_ssh &&
+               export GIT_SSH &&
+               test_must_fail git clone localhost:/path/to/repo junk
+       ) &&
+       echo "localhost git-upload-pack '\''/path/to/repo'\''" >expected &&
        test_cmp expected not_ssh_output
 '
 
 test_expect_success 'clone calls specified git upload-pack with -u option' '
-       GIT_SSH=./not_ssh git clone -u ./something/bin/git-upload-pack localhost:/path/to/repo junk
-       echo "localhost ./something/bin/git-upload-pack '\''/path/to/repo'\''" >expected
+       (
+               GIT_SSH=./not_ssh &&
+               export GIT_SSH &&
+               test_must_fail git clone -u ./something/bin/git-upload-pack localhost:/path/to/repo junk
+       ) &&
+       echo "localhost ./something/bin/git-upload-pack '\''/path/to/repo'\''" >expected &&
        test_cmp expected not_ssh_output
 '
 
index 8b4c356cd21846025d84a434077bfdc8ee2bab57..0f4d487be34d22820bcc63619e6e85b96f18c609 100755 (executable)
@@ -10,11 +10,11 @@ test_expect_success 'preparing origin repository' '
        git clone --bare . a.git &&
        git clone --bare . x &&
        test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true &&
-       test "$(GIT_CONFIG=x/config git config --bool core.bare)" = true
+       test "$(GIT_CONFIG=x/config git config --bool core.bare)" = true &&
        git bundle create b1.bundle --all &&
        git bundle create b2.bundle master &&
        mkdir dir &&
-       cp b1.bundle dir/b3
+       cp b1.bundle dir/b3 &&
        cp b1.bundle b4
 '
 
@@ -112,7 +112,7 @@ test_expect_success 'bundle clone with nonexistent HEAD' '
        cd "$D" &&
        git clone b2.bundle b2 &&
        cd b2 &&
-       git fetch
+       git fetch &&
        test ! -e .git/refs/heads/master
 '
 
index fc57e7d3fd69c60144ee3fb3f66b252a67369b42..8efcd130795890c36dfe6c5c630d2be44c6e1699 100755 (executable)
@@ -90,22 +90,22 @@ check () {
 for type in basic parents parents-raw
 do
        test_expect_success 'without grafts' "
-               rm -f .git/info/grafts
+               rm -f .git/info/grafts &&
                check $type $B2 -- $B2 $B1 $B0
        "
 
        test_expect_success 'with grafts' "
-               echo '$B0 $A2' >.git/info/grafts
+               echo '$B0 $A2' >.git/info/grafts &&
                check $type $B2 -- $B2 $B1 $B0 $A2 $A1 $A0
        "
 
        test_expect_success 'without grafts, with pathlimit' "
-               rm -f .git/info/grafts
+               rm -f .git/info/grafts &&
                check $type $B2 subdir -- $B2 $B0
        "
 
        test_expect_success 'with grafts, with pathlimit' "
-               echo '$B0 $A2' >.git/info/grafts
+               echo '$B0 $A2' >.git/info/grafts &&
                check $type $B2 subdir -- $B2 $B0 $A2 $A0
        "
 
index c8a96a9a994badde602c8bf7a7decda048a00525..52f7b277ceae3ae183bc6082c01af9f76bd39a86 100755 (executable)
@@ -18,7 +18,7 @@ test_expect_success setup '
 
        commit one &&
 
-       test_tick=$(($test_tick - 2400))
+       test_tick=$(($test_tick - 2400)) &&
 
        commit two &&
        commit three &&
index 62197a3d35f257dee6545d0f7768f21242e696ca..082032edc36268f1b8e26ca6f409080093ac0f2b 100755 (executable)
@@ -131,7 +131,7 @@ test_expect_success 'unsynchronized clocks' '
        R2=$(doit  3 R2 $R1) &&
 
        PL=$(doit  4 PL $L2 $C2) &&
-       PR=$(doit  4 PR $C2 $R2)
+       PR=$(doit  4 PR $C2 $R2) &&
 
        git name-rev $C2 >expected &&
 
index 27fd52b7be8ee8a084bc96bd606813cc556c4bb0..f7181d1d6a143c60a5c4b26960bd42aa2c88035d 100755 (executable)
@@ -29,7 +29,7 @@ test_expect_success 'set up rev-list --graph test' '
        # Octopus merge B and C into branch A
        git checkout A &&
        git merge B C &&
-       git tag A4
+       git tag A4 &&
 
        test_commit A5 bar.txt &&
 
@@ -39,7 +39,7 @@ test_expect_success 'set up rev-list --graph test' '
        test_commit C4 bar.txt &&
        git checkout A &&
        git merge -s ours C &&
-       git tag A6
+       git tag A6 &&
 
        test_commit A7 bar.txt &&
 
@@ -90,7 +90,7 @@ test_expect_success '--graph --all' '
 # that undecorated merges are interesting, even with --simplify-by-decoration
 test_expect_success '--graph --simplify-by-decoration' '
        rm -f expected &&
-       git tag -d A4
+       git tag -d A4 &&
        echo "* $A7" >> expected &&
        echo "*   $A6" >> expected &&
        echo "|\\  " >> expected &&
@@ -116,12 +116,15 @@ test_expect_success '--graph --simplify-by-decoration' '
        test_cmp expected actual
        '
 
-# Get rid of all decorations on branch B, and graph with it simplified away
+test_expect_success 'setup: get rid of decorations on B' '
+       git tag -d B2 &&
+       git tag -d B1 &&
+       git branch -d B
+'
+
+# Graph with branch B simplified away
 test_expect_success '--graph --simplify-by-decoration prune branch B' '
        rm -f expected &&
-       git tag -d B2
-       git tag -d B1
-       git branch -d B
        echo "* $A7" >> expected &&
        echo "*   $A6" >> expected &&
        echo "|\\  " >> expected &&
@@ -143,9 +146,6 @@ test_expect_success '--graph --simplify-by-decoration prune branch B' '
 
 test_expect_success '--graph --full-history -- bar.txt' '
        rm -f expected &&
-       git tag -d B2
-       git tag -d B1
-       git branch -d B
        echo "* $A7" >> expected &&
        echo "*   $A6" >> expected &&
        echo "|\\  " >> expected &&
@@ -163,9 +163,6 @@ test_expect_success '--graph --full-history -- bar.txt' '
 
 test_expect_success '--graph --full-history --simplify-merges -- bar.txt' '
        rm -f expected &&
-       git tag -d B2
-       git tag -d B1
-       git branch -d B
        echo "* $A7" >> expected &&
        echo "*   $A6" >> expected &&
        echo "|\\  " >> expected &&
@@ -181,9 +178,6 @@ test_expect_success '--graph --full-history --simplify-merges -- bar.txt' '
 
 test_expect_success '--graph -- bar.txt' '
        rm -f expected &&
-       git tag -d B2
-       git tag -d B1
-       git branch -d B
        echo "* $A7" >> expected &&
        echo "* $A5" >> expected &&
        echo "* $A3" >> expected &&
@@ -196,9 +190,6 @@ test_expect_success '--graph -- bar.txt' '
 
 test_expect_success '--graph --sparse -- bar.txt' '
        rm -f expected &&
-       git tag -d B2
-       git tag -d B1
-       git branch -d B
        echo "* $A7" >> expected &&
        echo "* $A6" >> expected &&
        echo "* $A5" >> expected &&
index 490d3971142a87e940f3d27e7e7f068b276ff602..5d91d056d2ff97bb4253671cde8ac9a207bd6bd9 100755 (executable)
@@ -20,7 +20,9 @@ echo "file dir" > dir &&
 git add dir &&
 git commit -m "File: dir"'
 
-test_expect_code 1 'Merge with d/f conflicts' 'git merge "merge msg" B master'
+test_expect_success 'Merge with d/f conflicts' '
+       test_expect_code 1 git merge "merge msg" B master
+'
 
 test_expect_success 'F/D conflict' '
        git reset --hard &&
index b66544b76d545a396ef068438f3980b3f544efdd..83efc7abf5f15c9a5603107f2223454cd32f9abc 100755 (executable)
@@ -94,245 +94,147 @@ git checkout master'
 
 test_expect_success 'pull renaming branch into unrenaming one' \
 '
-       git show-branch
-       git pull . white && {
-               echo "BAD: should have conflicted"
-               return 1
-       }
-       git ls-files -s
-       test "$(git ls-files -u B | wc -l)" -eq 3 || {
-               echo "BAD: should have left stages for B"
-               return 1
-       }
-       test "$(git ls-files -s N | wc -l)" -eq 1 || {
-               echo "BAD: should have merged N"
-               return 1
-       }
+       git show-branch &&
+       test_expect_code 1 git pull . white &&
+       git ls-files -s &&
+       git ls-files -u B >b.stages &&
+       test_line_count = 3 b.stages &&
+       git ls-files -s N >n.stages &&
+       test_line_count = 1 n.stages &&
        sed -ne "/^g/{
        p
        q
-       }" B | grep master || {
-               echo "BAD: should have listed our change first"
-               return 1
-       }
-       test "$(git diff white N | wc -l)" -eq 0 || {
-               echo "BAD: should have taken colored branch"
-               return 1
-       }
+       }" B | grep master &&
+       git diff --exit-code white N
 '
 
 test_expect_success 'pull renaming branch into another renaming one' \
 '
-       rm -f B
-       git reset --hard
-       git checkout red
-       git pull . white && {
-               echo "BAD: should have conflicted"
-               return 1
-       }
-       test "$(git ls-files -u B | wc -l)" -eq 3 || {
-               echo "BAD: should have left stages"
-               return 1
-       }
-       test "$(git ls-files -s N | wc -l)" -eq 1 || {
-               echo "BAD: should have merged N"
-               return 1
-       }
+       rm -f B &&
+       git reset --hard &&
+       git checkout red &&
+       test_expect_code 1 git pull . white &&
+       git ls-files -u B >b.stages &&
+       test_line_count = 3 b.stages &&
+       git ls-files -s N >n.stages &&
+       test_line_count = 1 n.stages &&
        sed -ne "/^g/{
        p
        q
-       }" B | grep red || {
-               echo "BAD: should have listed our change first"
-               return 1
-       }
-       test "$(git diff white N | wc -l)" -eq 0 || {
-               echo "BAD: should have taken colored branch"
-               return 1
-       }
+       }" B | grep red &&
+       git diff --exit-code white N
 '
 
 test_expect_success 'pull unrenaming branch into renaming one' \
 '
-       git reset --hard
-       git show-branch
-       git pull . master && {
-               echo "BAD: should have conflicted"
-               return 1
-       }
-       test "$(git ls-files -u B | wc -l)" -eq 3 || {
-               echo "BAD: should have left stages"
-               return 1
-       }
-       test "$(git ls-files -s N | wc -l)" -eq 1 || {
-               echo "BAD: should have merged N"
-               return 1
-       }
+       git reset --hard &&
+       git show-branch &&
+       test_expect_code 1 git pull . master &&
+       git ls-files -u B >b.stages &&
+       test_line_count = 3 b.stages &&
+       git ls-files -s N >n.stages &&
+       test_line_count = 1 n.stages &&
        sed -ne "/^g/{
        p
        q
-       }" B | grep red || {
-               echo "BAD: should have listed our change first"
-               return 1
-       }
-       test "$(git diff white N | wc -l)" -eq 0 || {
-               echo "BAD: should have taken colored branch"
-               return 1
-       }
+       }" B | grep red &&
+       git diff --exit-code white N
 '
 
 test_expect_success 'pull conflicting renames' \
 '
-       git reset --hard
-       git show-branch
-       git pull . blue && {
-               echo "BAD: should have conflicted"
-               return 1
-       }
-       test "$(git ls-files -u A | wc -l)" -eq 1 || {
-               echo "BAD: should have left a stage"
-               return 1
-       }
-       test "$(git ls-files -u B | wc -l)" -eq 1 || {
-               echo "BAD: should have left a stage"
-               return 1
-       }
-       test "$(git ls-files -u C | wc -l)" -eq 1 || {
-               echo "BAD: should have left a stage"
-               return 1
-       }
-       test "$(git ls-files -s N | wc -l)" -eq 1 || {
-               echo "BAD: should have merged N"
-               return 1
-       }
+       git reset --hard &&
+       git show-branch &&
+       test_expect_code 1 git pull . blue &&
+       git ls-files -u A >a.stages &&
+       test_line_count = 1 a.stages &&
+       git ls-files -u B >b.stages &&
+       test_line_count = 1 b.stages &&
+       git ls-files -u C >c.stages &&
+       test_line_count = 1 c.stages &&
+       git ls-files -s N >n.stages &&
+       test_line_count = 1 n.stages &&
        sed -ne "/^g/{
        p
        q
-       }" B | grep red || {
-               echo "BAD: should have listed our change first"
-               return 1
-       }
-       test "$(git diff white N | wc -l)" -eq 0 || {
-               echo "BAD: should have taken colored branch"
-               return 1
-       }
+       }" B | grep red &&
+       git diff --exit-code white N
 '
 
 test_expect_success 'interference with untracked working tree file' '
-
-       git reset --hard
-       git show-branch
-       echo >A this file should not matter
-       git pull . white && {
-               echo "BAD: should have conflicted"
-               return 1
-       }
-       test -f A || {
-               echo "BAD: should have left A intact"
-               return 1
-       }
+       git reset --hard &&
+       git show-branch &&
+       echo >A this file should not matter &&
+       test_expect_code 1 git pull . white &&
+       test_path_is_file A
 '
 
 test_expect_success 'interference with untracked working tree file' '
-
-       git reset --hard
-       git checkout white
-       git show-branch
-       rm -f A
-       echo >A this file should not matter
-       git pull . red && {
-               echo "BAD: should have conflicted"
-               return 1
-       }
-       test -f A || {
-               echo "BAD: should have left A intact"
-               return 1
-       }
+       git reset --hard &&
+       git checkout white &&
+       git show-branch &&
+       rm -f A &&
+       echo >A this file should not matter &&
+       test_expect_code 1 git pull . red &&
+       test_path_is_file A
 '
 
 test_expect_success 'interference with untracked working tree file' '
-
-       git reset --hard
-       rm -f A M
-       git checkout -f master
-       git tag -f anchor
-       git show-branch
-       git pull . yellow || {
-               echo "BAD: should have cleanly merged"
-               return 1
-       }
-       test -f M && {
-               echo "BAD: should have removed M"
-               return 1
-       }
+       git reset --hard &&
+       rm -f A M &&
+       git checkout -f master &&
+       git tag -f anchor &&
+       git show-branch &&
+       git pull . yellow &&
+       test_path_is_missing M &&
        git reset --hard anchor
 '
 
 test_expect_success 'updated working tree file should prevent the merge' '
-
-       git reset --hard
-       rm -f A M
-       git checkout -f master
-       git tag -f anchor
-       git show-branch
-       echo >>M one line addition
-       cat M >M.saved
-       git pull . yellow && {
-               echo "BAD: should have complained"
-               return 1
-       }
-       test_cmp M M.saved || {
-               echo "BAD: should have left M intact"
-               return 1
-       }
+       git reset --hard &&
+       rm -f A M &&
+       git checkout -f master &&
+       git tag -f anchor &&
+       git show-branch &&
+       echo >>M one line addition &&
+       cat M >M.saved &&
+       test_expect_code 128 git pull . yellow &&
+       test_cmp M M.saved &&
        rm -f M.saved
 '
 
 test_expect_success 'updated working tree file should prevent the merge' '
-
-       git reset --hard
-       rm -f A M
-       git checkout -f master
-       git tag -f anchor
-       git show-branch
-       echo >>M one line addition
-       cat M >M.saved
-       git update-index M
-       git pull . yellow && {
-               echo "BAD: should have complained"
-               return 1
-       }
-       test_cmp M M.saved || {
-               echo "BAD: should have left M intact"
-               return 1
-       }
+       git reset --hard &&
+       rm -f A M &&
+       git checkout -f master &&
+       git tag -f anchor &&
+       git show-branch &&
+       echo >>M one line addition &&
+       cat M >M.saved &&
+       git update-index M &&
+       test_expect_code 128 git pull . yellow &&
+       test_cmp M M.saved &&
        rm -f M.saved
 '
 
 test_expect_success 'interference with untracked working tree file' '
-
-       git reset --hard
-       rm -f A M
-       git checkout -f yellow
-       git tag -f anchor
-       git show-branch
-       echo >M this file should not matter
-       git pull . master || {
-               echo "BAD: should have cleanly merged"
-               return 1
-       }
-       test -f M || {
-               echo "BAD: should have left M intact"
-               return 1
-       }
-       git ls-files -s | grep M && {
-               echo "BAD: M must be untracked in the result"
-               return 1
-       }
+       git reset --hard &&
+       rm -f A M &&
+       git checkout -f yellow &&
+       git tag -f anchor &&
+       git show-branch &&
+       echo >M this file should not matter &&
+       git pull . master &&
+       test_path_is_file M &&
+       ! {
+               git ls-files -s |
+               grep M
+       } &&
        git reset --hard anchor
 '
 
 test_expect_success 'merge of identical changes in a renamed file' '
-       rm -f A M N
+       rm -f A M N &&
        git reset --hard &&
        git checkout change+rename &&
        GIT_MERGE_VERBOSITY=3 git merge change | grep "^Skipped B" &&
index b3fbf659c003acbed785558c21950046b8caced8..755d30ce2a5d1c5e34751d8906ad41b02d553b03 100755 (executable)
@@ -104,7 +104,7 @@ test_expect_success 'mark rename/delete as unmerged' '
        test_tick &&
        git commit -m delete &&
        git checkout -b rename HEAD^ &&
-       git mv a1 a2
+       git mv a1 a2 &&
        test_tick &&
        git commit -m rename &&
        test_must_fail git merge delete &&
index 3900d9f61f84a9eab907e87fca7bb9429ea36f04..73fc240e8548911c65c4dffc4da0c6ff8ab4f27b 100755 (executable)
@@ -6,7 +6,7 @@ test_description='subtree merge strategy'
 
 test_expect_success setup '
 
-       s="1 2 3 4 5 6 7 8"
+       s="1 2 3 4 5 6 7 8" &&
        for i in $s; do echo $i; done >hello &&
        git add hello &&
        git commit -m initial &&
index 3b042aacd63f77651fdaf3d10b65f4fc85669a75..b5063b6fe6c37f4b41a89b71c6d52ac0b5c07127 100755 (executable)
@@ -517,13 +517,13 @@ test_expect_success '"parallel" side branch creation' '
        add_line_into_file "2(para): line 2 on parallel branch" dir2/file2 &&
        PARA_HASH2=$(git rev-parse --verify HEAD) &&
        add_line_into_file "3(para): line 3 on parallel branch" dir2/file3 &&
-       PARA_HASH3=$(git rev-parse --verify HEAD)
+       PARA_HASH3=$(git rev-parse --verify HEAD) &&
        git merge -m "merge HASH4 and PARA_HASH3" "$HASH4" &&
-       PARA_HASH4=$(git rev-parse --verify HEAD)
+       PARA_HASH4=$(git rev-parse --verify HEAD) &&
        add_line_into_file "5(para): add line on parallel branch" dir1/file1 &&
-       PARA_HASH5=$(git rev-parse --verify HEAD)
+       PARA_HASH5=$(git rev-parse --verify HEAD) &&
        add_line_into_file "6(para): add line on parallel branch" dir2/file2 &&
-       PARA_HASH6=$(git rev-parse --verify HEAD)
+       PARA_HASH6=$(git rev-parse --verify HEAD) &&
        git merge -m "merge HASH7 and PARA_HASH6" "$HASH7" &&
        PARA_HASH7=$(git rev-parse --verify HEAD)
 '
index b8741416588e9f3d7de7c0a0359a0b8ea7cf8045..004c365ad6b32fff16c3c96ef2b6a173157b02a8 100755 (executable)
@@ -15,7 +15,7 @@ test_description='recursive merge corner cases'
 #
 
 test_expect_success setup '
-       ten="0 1 2 3 4 5 6 7 8 9"
+       ten="0 1 2 3 4 5 6 7 8 9" &&
        for i in $ten
        do
                echo line $i in a sample file
index 1785e178a4cb8fddd58d1b1db8062cf12825155e..1e0447f615c55ecf98ae341553ea60f10a956ae3 100755 (executable)
@@ -60,7 +60,7 @@ test_expect_success 'checkout' '
 
 test_expect_success 'checkout with local tracked branch' '
        git checkout master &&
-       git checkout follower >actual
+       git checkout follower >actual &&
        grep "is ahead of" actual
 '
 
index 95b180f4693658504fa44d8199efc2a31e85b43d..ae2194e07d835aa088a1c5b5f5fa5001f41ea7d5 100755 (executable)
@@ -53,7 +53,7 @@ test_expect_success 'set up buggy branch' '
      echo "line 12" >> hello &&
      echo "line 13" >> hello &&
      add_and_commit_file hello "2 more lines" &&
-     HASH6=$(git rev-parse --verify HEAD)
+     HASH6=$(git rev-parse --verify HEAD) &&
      echo "line 14" >> hello &&
      echo "line 15" >> hello &&
      echo "line 16" >> hello &&
index 65a35d94a001b555ce9e4d6c528d588339a5300b..a845b154e4db50b52eb67eaefefcc42403c52c0e 100755 (executable)
@@ -61,7 +61,7 @@ test_expect_success \
 test_expect_success \
     'checking -f on untracked file with existing target' \
     'touch path0/untracked1 &&
-     git mv -f untracked1 path0
+     test_must_fail git mv -f untracked1 path0 &&
      test ! -f .git/index.lock &&
      test -f untracked1 &&
      test -f path0/untracked1'
@@ -207,7 +207,7 @@ test_expect_success 'git mv should not change sha1 of moved cache entry' '
        git init &&
        echo 1 >dirty &&
        git add dirty &&
-       entry="$(git ls-files --stage dirty | cut -f 1)"
+       entry="$(git ls-files --stage dirty | cut -f 1)" &&
        git mv dirty dirty2 &&
        [ "$entry" = "$(git ls-files --stage dirty2 | cut -f 1)" ] &&
        echo 2 >dirty2 &&
index 700b556fe886ff8e6927591e4a047542bc00ef83..f160af3ccc8714700218efcd3b38c216ff7bab43 100755 (executable)
@@ -1107,7 +1107,7 @@ hash1=$(git rev-parse HEAD)
 test_expect_success 'creating second commit and tag' '
        echo foo-2.0 >foo &&
        git add foo &&
-       git commit -m second
+       git commit -m second &&
        git tag v2.0
 '
 
@@ -1132,18 +1132,18 @@ v2.0
 EOF
 
 test_expect_success 'checking that first commit is in all tags (hash)' "
-       git tag -l --contains $hash1 v* >actual
+       git tag -l --contains $hash1 v* >actual &&
        test_cmp expected actual
 "
 
 # other ways of specifying the commit
 test_expect_success 'checking that first commit is in all tags (tag)' "
-       git tag -l --contains v1.0 v* >actual
+       git tag -l --contains v1.0 v* >actual &&
        test_cmp expected actual
 "
 
 test_expect_success 'checking that first commit is in all tags (relative)' "
-       git tag -l --contains HEAD~2 v* >actual
+       git tag -l --contains HEAD~2 v* >actual &&
        test_cmp expected actual
 "
 
@@ -1152,7 +1152,7 @@ v2.0
 EOF
 
 test_expect_success 'checking that second commit only has one tag' "
-       git tag -l --contains $hash2 v* >actual
+       git tag -l --contains $hash2 v* >actual &&
        test_cmp expected actual
 "
 
@@ -1161,7 +1161,7 @@ cat > expected <<EOF
 EOF
 
 test_expect_success 'checking that third commit has no tags' "
-       git tag -l --contains $hash3 v* >actual
+       git tag -l --contains $hash3 v* >actual &&
        test_cmp expected actual
 "
 
@@ -1171,7 +1171,7 @@ test_expect_success 'creating simple branch' '
        git branch stable v2.0 &&
         git checkout stable &&
        echo foo-3.0 > foo &&
-       git commit foo -m fourth
+       git commit foo -m fourth &&
        git tag v3.0
 '
 
@@ -1182,7 +1182,7 @@ v3.0
 EOF
 
 test_expect_success 'checking that branch head only has one tag' "
-       git tag -l --contains $hash4 v* >actual
+       git tag -l --contains $hash4 v* >actual &&
        test_cmp expected actual
 "
 
@@ -1196,7 +1196,7 @@ v4.0
 EOF
 
 test_expect_success 'checking that original branch head has one tag now' "
-       git tag -l --contains $hash3 v* >actual
+       git tag -l --contains $hash3 v* >actual &&
        test_cmp expected actual
 "
 
@@ -1211,18 +1211,18 @@ v4.0
 EOF
 
 test_expect_success 'checking that initial commit is in all tags' "
-       git tag -l --contains $hash1 v* >actual
+       git tag -l --contains $hash1 v* >actual &&
        test_cmp expected actual
 "
 
 # mixing modes and options:
 
 test_expect_success 'mixing incompatibles modes and options is forbidden' '
-       test_must_fail git tag -a
-       test_must_fail git tag -l -v
-       test_must_fail git tag -n 100
-       test_must_fail git tag -l -m msg
-       test_must_fail git tag -l -F some file
+       test_must_fail git tag -a &&
+       test_must_fail git tag -l -v &&
+       test_must_fail git tag -n 100 &&
+       test_must_fail git tag -l -m msg &&
+       test_must_fail git tag -l -F some file &&
        test_must_fail git tag -v -s
 '
 
index 5641b595596ea462ec649c531e7173709a012274..e9d8b9110d3bb14a0c1d5b325b875abce57b3318 100755 (executable)
@@ -12,7 +12,7 @@ cleanup_fail() {
 }
 
 test_expect_success 'setup' '
-       unset GIT_PAGER GIT_PAGER_IN_USE;
+       sane_unset GIT_PAGER GIT_PAGER_IN_USE &&
        test_might_fail git config --unset core.pager &&
 
        PAGER="cat >paginated.out" &&
@@ -220,7 +220,7 @@ test_default_pager() {
        parse_args "$@"
 
        $test_expectation SIMPLEPAGER,TTY "$cmd - default pager is used by default" "
-               unset PAGER GIT_PAGER;
+               sane_unset PAGER GIT_PAGER &&
                test_might_fail git config --unset core.pager &&
                rm -f default_pager_used ||
                cleanup_fail &&
@@ -243,7 +243,7 @@ test_PAGER_overrides() {
        parse_args "$@"
 
        $test_expectation TTY "$cmd - PAGER overrides default pager" "
-               unset GIT_PAGER;
+               sane_unset GIT_PAGER &&
                test_might_fail git config --unset core.pager &&
                rm -f PAGER_used ||
                cleanup_fail &&
@@ -271,7 +271,7 @@ test_core_pager() {
        parse_args "$@"
 
        $test_expectation TTY "$cmd - repository-local core.pager setting $used_if_wanted" "
-               unset GIT_PAGER;
+               sane_unset GIT_PAGER &&
                rm -f core.pager_used ||
                cleanup_fail &&
 
@@ -299,7 +299,7 @@ test_pager_subdir_helper() {
        parse_args "$@"
 
        $test_expectation TTY "$cmd - core.pager $used_if_wanted from subdirectory" "
-               unset GIT_PAGER;
+               sane_unset GIT_PAGER &&
                rm -f core.pager_used &&
                rm -fr sub ||
                cleanup_fail &&
index 9891e2c1f5e5da357df795ee05969fbde72887ba..95fab2036109c5a4aef8ff3d8100403fe335819f 100755 (executable)
@@ -18,7 +18,7 @@ test_expect_success PERL 'setup' '
 # note: bar sorts before foo, so the first 'n' is always to skip 'bar'
 
 test_expect_success PERL 'saying "n" does nothing' '
-       set_and_save_state dir/foo work work
+       set_and_save_state dir/foo work work &&
        (echo n; echo n) | git reset -p &&
        verify_saved_state dir/foo &&
        verify_saved_state bar
@@ -42,14 +42,14 @@ test_expect_success PERL 'git reset -p HEAD^' '
 # the failure case (and thus get out of the loop).
 
 test_expect_success PERL 'git reset -p dir' '
-       set_state dir/foo work work
+       set_state dir/foo work work &&
        (echo y; echo n) | git reset -p dir &&
        verify_state dir/foo work head &&
        verify_saved_state bar
 '
 
 test_expect_success PERL 'git reset -p -- foo (inside dir)' '
-       set_state dir/foo work work
+       set_state dir/foo work work &&
        (echo y; echo n) | (cd dir && git reset -p -- foo) &&
        verify_state dir/foo work head &&
        verify_saved_state bar
index 6c776e9bec78ab1cf960293d8c796e9de13045b5..c802ef826115cb130370a815ee1b15a5b10290ee 100755 (executable)
@@ -183,7 +183,7 @@ test_expect_success 'git clean symbolic link' '
 
        mkdir -p build docs &&
        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
-       ln -s docs/manual.txt src/part4.c
+       ln -s docs/manual.txt src/part4.c &&
        git clean &&
        test -f Makefile &&
        test -f README &&
index ac2e187a5720d1ff947e58073dd6cc403ef40d5d..50da034cd3934d0509e67a6f20e514a18e5659d4 100755 (executable)
@@ -252,8 +252,8 @@ test_expect_success 'committer is automatic' '
 
        echo >>negative &&
        (
-               unset GIT_COMMITTER_EMAIL
-               unset GIT_COMMITTER_NAME
+               sane_unset GIT_COMMITTER_EMAIL &&
+               sane_unset GIT_COMMITTER_NAME &&
                # must fail because there is no change
                test_must_fail git commit -e -m "sample"
        ) &&
@@ -390,7 +390,7 @@ try_commit_status_combo () {
 
        test_expect_success 'commit --no-status' '
                clear_config commit.status &&
-               try_commit --no-status
+               try_commit --no-status &&
                ! grep "^# Changes to be committed:" .git/COMMIT_EDITMSG
        '
 
index 643ab03f992be8339b169b3bef0922ff3cdb04b9..77b69200297e222319b5701c62312bee27b62ce9 100755 (executable)
@@ -40,7 +40,7 @@ test_expect_success '-C option copies only the message with --reset-author' '
        test_tick &&
        git commit -a -C Initial --reset-author &&
        echo "author $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL> $GIT_AUTHOR_DATE" >expect &&
-       author_header HEAD >actual
+       author_header HEAD >actual &&
        test_cmp expect actual &&
 
        message_body Initial >expect &&
index 7ba94ea99bc0785da5b398e494d23469ba44992d..b44b29395049308b30e61b00a55e2eb39f4355a1 100755 (executable)
@@ -114,13 +114,13 @@ test_expect_success 'setup conflicted merge' '
 test_expect_success 'merge picks up the best result' '
        git config --unset-all pull.twohead &&
        git reset --hard c5 &&
-       git merge -s resolve c6
+       test_must_fail git merge -s resolve c6 &&
        resolve_count=$(conflict_count) &&
        git reset --hard c5 &&
-       git merge -s recursive c6
+       test_must_fail git merge -s recursive c6 &&
        recursive_count=$(conflict_count) &&
        git reset --hard c5 &&
-       git merge -s recursive -s resolve c6
+       test_must_fail git merge -s recursive -s resolve c6 &&
        auto_count=$(conflict_count) &&
        test $auto_count = $recursive_count &&
        test $auto_count != $resolve_count
@@ -129,13 +129,13 @@ test_expect_success 'merge picks up the best result' '
 test_expect_success 'merge picks up the best result (from config)' '
        git config pull.twohead "recursive resolve" &&
        git reset --hard c5 &&
-       git merge -s resolve c6
+       test_must_fail git merge -s resolve c6 &&
        resolve_count=$(conflict_count) &&
        git reset --hard c5 &&
-       git merge -s recursive c6
+       test_must_fail git merge -s recursive c6 &&
        recursive_count=$(conflict_count) &&
        git reset --hard c5 &&
-       git merge c6
+       test_must_fail git merge c6 &&
        auto_count=$(conflict_count) &&
        test $auto_count = $recursive_count &&
        test $auto_count != $resolve_count
index 2746169514f9bd1629f05eed8f9ff2fcfdba8cb5..0a46795ae785fd4dfa0e565bfa0153ca107a904d 100755 (executable)
@@ -31,7 +31,7 @@ test_expect_success 'merge c1 with c2, c3, c4, ... c29' '
        do
                refs="$refs c$i"
                i=`expr $i + 1`
-       done
+       done &&
        git merge $refs &&
        test "$(git rev-parse c1)" != "$(git rev-parse HEAD)" &&
        i=1 &&
index 3bd74042ef46ee8b4e4477d1c23ba0914963de33..d78bdec330cd8b9505aa92ff2e81e0f716b9a741 100755 (executable)
@@ -54,7 +54,7 @@ test_expect_success 'custom mergetool' '
 
 test_expect_success 'mergetool crlf' '
     git config core.autocrlf true &&
-    git checkout -b test2 branch1
+    git checkout -b test2 branch1 &&
     test_must_fail git merge master >/dev/null 2>&1 &&
     ( yes "" | git mergetool file1 >/dev/null 2>&1 ) &&
     ( yes "" | git mergetool file2 >/dev/null 2>&1 ) &&
index c2f66ff1703c35d5f5b92285e31e8df157e51642..d954b846a17d6374dd8c7dae7f901170ff3c8c24 100755 (executable)
@@ -56,7 +56,7 @@ test_expect_success 'loose objects in alternate ODB are not repacked' '
 '
 
 test_expect_success 'packed obs in alt ODB are repacked even when local repo is packless' '
-       mkdir alt_objects/pack
+       mkdir alt_objects/pack &&
        mv .git/objects/pack/* alt_objects/pack &&
        git repack -a &&
        myidx=$(ls -1 .git/objects/pack/*.idx) &&
@@ -95,14 +95,14 @@ test_expect_success 'packed obs in alternate ODB kept pack are repacked' '
        # swap the .keep so the commit object is in the pack with .keep
        for p in alt_objects/pack/*.pack
        do
-               base_name=$(basename $p .pack)
+               base_name=$(basename $p .pack) &&
                if test -f alt_objects/pack/$base_name.keep
                then
                        rm alt_objects/pack/$base_name.keep
                else
                        touch alt_objects/pack/$base_name.keep
                fi
-       done
+       done &&
        git repack -a -d &&
        myidx=$(ls -1 .git/objects/pack/*.idx) &&
        test -f "$myidx" &&
index 58dc6f6452e69df2f91799b0ae23c620783311da..4048d106d4936ae1eef2ca3788a147e659bda65d 100755 (executable)
@@ -98,7 +98,7 @@ test_expect_success PERL 'difftool --gui works without configured diff.guitool'
 
 # Specify the diff tool using $GIT_DIFF_TOOL
 test_expect_success PERL 'GIT_DIFF_TOOL variable' '
-       git config --unset diff.tool
+       test_might_fail git config --unset diff.tool &&
        GIT_DIFF_TOOL=test-tool &&
        export GIT_DIFF_TOOL &&
 
@@ -166,7 +166,7 @@ test_expect_success PERL 'difftool.prompt config variable is false' '
 
 # Test that we don't have to pass --no-prompt when mergetool.prompt is false
 test_expect_success PERL 'difftool merge.prompt = false' '
-       git config --unset difftool.prompt
+       test_might_fail git config --unset difftool.prompt &&
        git config mergetool.prompt false &&
 
        diff=$(git difftool branch) &&
@@ -211,7 +211,7 @@ test_expect_success PERL 'difftool last flag wins' '
 # git-difftool falls back to git-mergetool config variables
 # so test that behavior here
 test_expect_success PERL 'difftool + mergetool config variables' '
-       remove_config_vars
+       remove_config_vars &&
        git config merge.tool test-tool &&
        git config mergetool.test-tool.cmd "cat \$LOCAL" &&
 
@@ -254,17 +254,17 @@ test_expect_success PERL 'difftool -x cat' '
 '
 
 test_expect_success PERL 'difftool --extcmd echo arg1' '
-       diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"echo\ \$1\" branch)
+       diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"echo\ \$1\" branch) &&
        test "$diff" = file
 '
 
 test_expect_success PERL 'difftool --extcmd cat arg1' '
-       diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"cat\ \$1\" branch)
+       diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"cat\ \$1\" branch) &&
        test "$diff" = master
 '
 
 test_expect_success PERL 'difftool --extcmd cat arg2' '
-       diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"cat\ \$2\" branch)
+       diff=$(git difftool --no-prompt --extcmd sh\ -c\ \"cat\ \$2\" branch) &&
        test "$diff" = branch
 '
 
index 50658845ca8769e963cfc13b20efb892f1f63cc0..c8777589ca1c89825b570cfc05405a39df39aaba 100755 (executable)
@@ -479,7 +479,7 @@ test_expect_success 'outside of git repository' '
                echo file1:hello &&
                echo sub/file2:world
        } >non/expect.full &&
-       echo file2:world >non/expect.sub
+       echo file2:world >non/expect.sub &&
        (
                GIT_CEILING_DIRECTORIES="$(pwd)/non/git" &&
                export GIT_CEILING_DIRECTORIES &&
@@ -505,7 +505,7 @@ test_expect_success 'inside git repository but with --no-index' '
                echo sub/file2:world
        } >is/expect.full &&
        : >is/expect.empty &&
-       echo file2:world >is/expect.sub
+       echo file2:world >is/expect.sub &&
        (
                cd is/git &&
                git init &&
index f7f3c5ab8ef8dd822a51d6c97281ba077c511642..13b179e721ef12993ce2bc8f0f59d9f49940447c 100755 (executable)
@@ -190,7 +190,7 @@ test_expect_success "follow-parent is atomic" '
        git svn init --minimize-url -i stunk "$svnrepo"/stunk &&
        git svn fetch -i stunk &&
        git svn init --minimize-url -i flunked "$svnrepo"/flunked &&
-       git svn fetch -i flunked
+       git svn fetch -i flunked &&
        test "`git rev-parse --verify refs/remotes/flunk@18`" \
           = "`git rev-parse --verify refs/remotes/stunk`" &&
        test "`git rev-parse --verify refs/remotes/flunk~1`" \
index 0ed90d982d28810c4f7a018fab3d2f8699b78d95..fd8184787fba13bbbf3f1ef377ad3f979ef8f47a 100755 (executable)
@@ -16,7 +16,7 @@ rm -rf import
 
 test_expect_success 'init, fetch and checkout repository' '
        git svn init --rewrite-root=http://invalid.invalid/ "$svnrepo" &&
-       git svn fetch
+       git svn fetch &&
        git checkout -b mybranch ${remotes_git_svn}
        '
 
index d6b076f6b7de148c8d548c7a977e4f09b4be8e3b..aa841e12996aad8cd7284eea56c47f0d89c79c56 100755 (executable)
@@ -24,7 +24,7 @@ test_expect_success 'initialize git svn' '
                svn_cmd import -m "import for git svn" . "$svnrepo"
        ) &&
        rm -rf import &&
-       git svn init "$svnrepo"
+       git svn init "$svnrepo" &&
        git svn fetch
 '
 
index 565365cbd3ff80d816dd02b2072045cd25ae4b93..158c8e33ef3381f3310ac39a99932d185290d685 100755 (executable)
@@ -33,7 +33,7 @@ test_expect_success 'more emptiness' '
 '
 
 test_expect_success 'git svn rebase creates empty directory' '
-       ( cd cloned && git svn rebase )
+       ( cd cloned && git svn rebase ) &&
        test -d cloned/"! !"
 '
 
index 250c651eaecf60103ee442bcfa2a6c65250320ec..4f6c06ecb2bc8671949326955acf3ff39a364c5d 100755 (executable)
@@ -18,39 +18,39 @@ test_expect_success 'load svn dump' "
 
 test_expect_success 'all svn merges became git merge commits' '
        unmarked=$(git rev-list --parents --all --grep=Merge |
-               grep -v " .* " | cut -f1 -d" ")
+               grep -v " .* " | cut -f1 -d" ") &&
        [ -z "$unmarked" ]
        '
 
 test_expect_success 'cherry picks did not become git merge commits' '
        bad_cherries=$(git rev-list --parents --all --grep=Cherry |
-               grep " .* " | cut -f1 -d" ")
+               grep " .* " | cut -f1 -d" ") &&
        [ -z "$bad_cherries" ]
        '
 
 test_expect_success 'svn non-merge merge commits did not become git merge commits' '
        bad_non_merges=$(git rev-list --parents --all --grep=non-merge |
-               grep " .* " | cut -f1 -d" ")
+               grep " .* " | cut -f1 -d" ") &&
        [ -z "$bad_non_merges" ]
        '
 
 test_expect_success 'commit made to merged branch is reachable from the merge' '
-       before_commit=$(git rev-list --all --grep="trunk commit before merging trunk to b2")
-       merge_commit=$(git rev-list --all --grep="Merge trunk to b2")
-       not_reachable=$(git rev-list -1 $before_commit --not $merge_commit)
+       before_commit=$(git rev-list --all --grep="trunk commit before merging trunk to b2") &&
+       merge_commit=$(git rev-list --all --grep="Merge trunk to b2") &&
+       not_reachable=$(git rev-list -1 $before_commit --not $merge_commit) &&
        [ -z "$not_reachable" ]
        '
 
 test_expect_success 'merging two branches in one commit is detected correctly' '
-       f1_commit=$(git rev-list --all --grep="make f1 branch from trunk")
-       f2_commit=$(git rev-list --all --grep="make f2 branch from trunk")
-       merge_commit=$(git rev-list --all --grep="Merge f1 and f2 to trunk")
-       not_reachable=$(git rev-list -1 $f1_commit $f2_commit --not $merge_commit)
+       f1_commit=$(git rev-list --all --grep="make f1 branch from trunk") &&
+       f2_commit=$(git rev-list --all --grep="make f2 branch from trunk") &&
+       merge_commit=$(git rev-list --all --grep="Merge f1 and f2 to trunk") &&
+       not_reachable=$(git rev-list -1 $f1_commit $f2_commit --not $merge_commit) &&
        [ -z "$not_reachable" ]
        '
 
 test_expect_failure 'everything got merged in the end' '
-       unmerged=$(git rev-list --all --not master)
+       unmerged=$(git rev-list --all --not master) &&
        [ -z "$unmerged" ]
        '
 
index 3c0cf0509d2cfe3afc0316ed50ea85cb0d2d14de..14d17691b1c48e2b3211812a16d6dda7e83ad31a 100755 (executable)
@@ -321,7 +321,7 @@ test_expect_success \
        'for p in .git/objects/pack/*.pack;do git verify-pack $p||exit;done'
 test_expect_success \
        'C: validate reuse existing blob' \
-       'test $newf = `git rev-parse --verify branch:file2/newf`
+       'test $newf = `git rev-parse --verify branch:file2/newf` &&
         test $oldf = `git rev-parse --verify branch:file2/oldf`'
 
 cat >expect <<EOF
index 8c8e679468f4b191f93ca68a973d4d58fa1b72d2..f823c05305e5021a8cca98d49256af3b1c008fb9 100755 (executable)
@@ -26,7 +26,7 @@ test_expect_success 'setup' '
        test_tick &&
        git tag rein &&
        git checkout -b wer HEAD^ &&
-       echo lange > file2
+       echo lange > file2 &&
        test_tick &&
        git commit -m sitzt file2 &&
        test_tick &&
index 36c457e7f2312774223f853aab0e3b055659e916..9199550ef4ffa39e4ce8bdb36badfd723e95e55f 100755 (executable)
@@ -57,7 +57,7 @@ test_expect_success 'setup' '
 # as argument to co -d
 test_expect_success 'basic checkout' \
   'GIT_CONFIG="$git_config" cvs -Q co -d cvswork master &&
-   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | head -n 1))" = "empty/1.1/"
+   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | head -n 1))" = "empty/1.1/" &&
    test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | sed -ne \$p))" = "secondrootfile/1.1/"'
 
 #------------------------
index 1bbfd824e50ba44f6684cbce3f220a99f17f6cc6..ff6d6fb473fe0b00a4e2135395cdf89c43250a1a 100755 (executable)
@@ -70,7 +70,7 @@ test_expect_success 'setup' '
     mkdir subdir &&
     echo "Another text file" > subdir/file.h &&
     echo "Another binary: Q (this time CR)" | q_to_cr > subdir/withCr.bin &&
-    echo "Mixed up NUL, but marked text: Q <- there" | q_to_nul > mixedUp.c
+    echo "Mixed up NUL, but marked text: Q <- there" | q_to_nul > mixedUp.c &&
     echo "Unspecified" > subdir/unspecified.other &&
     echo "/*.bin -crlf" > .gitattributes &&
     echo "/*.c crlf" >> .gitattributes &&
index 38e5a59ff7877b3d2624574ecb9584803fe46152..48fa5160045d0bb2c14d034422b2ee5170889ec5 100644 (file)
@@ -305,6 +305,17 @@ remove_cr () {
        tr '\015' Q | sed -e 's/Q$//'
 }
 
+# In some bourne shell implementations, the "unset" builtin returns
+# nonzero status when a variable to be unset was not set in the first
+# place.
+#
+# Use sane_unset when that should not be considered an error.
+
+sane_unset () {
+       unset "$@"
+       return 0
+}
+
 test_tick () {
        if test -z "${test_tick+set}"
        then
@@ -521,24 +532,6 @@ test_expect_success () {
        echo >&3 ""
 }
 
-test_expect_code () {
-       test "$#" = 4 && { prereq=$1; shift; } || prereq=
-       test "$#" = 3 ||
-       error "bug in the test script: not 3 or 4 parameters to test-expect-code"
-       if ! test_skip "$@"
-       then
-               say >&3 "expecting exit code $1: $3"
-               test_run_ "$3"
-               if [ "$?" = 0 -a "$eval_ret" = "$1" ]
-               then
-                       test_ok_ "$2"
-               else
-                       test_failure_ "$@"
-               fi
-       fi
-       echo >&3 ""
-}
-
 # test_external runs external test scripts that provide continuous
 # test output about their progress, and succeeds/fails on
 # zero/non-zero exit code.  It outputs the test output on stdout even
@@ -654,6 +647,28 @@ test_path_is_missing () {
        fi
 }
 
+# test_line_count checks that a file has the number of lines it
+# ought to. For example:
+#
+#      test_expect_success 'produce exactly one line of output' '
+#              do something >output &&
+#              test_line_count = 1 output
+#      '
+#
+# is like "test $(wc -l <output) = 1" except that it passes the
+# output through when the number of lines is wrong.
+
+test_line_count () {
+       if test $# != 3
+       then
+               error "bug in the test script: not 3 parameters to test_line_count"
+       elif ! test $(wc -l <"$3") "$1" "$2"
+       then
+               echo "test_line_count: line count for $3 !$1 $2"
+               cat "$3"
+               return 1
+       fi
+}
 
 # This is not among top-level (test_expect_success | test_expect_failure)
 # but is a prefix that can be used in the test script, like:
@@ -707,6 +722,28 @@ test_might_fail () {
        return 0
 }
 
+# Similar to test_must_fail and test_might_fail, but check that a
+# given command exited with a given exit code. Meant to be used as:
+#
+#      test_expect_success 'Merge with d/f conflicts' '
+#              test_expect_code 1 git merge "merge msg" B master
+#      '
+
+test_expect_code () {
+       want_code=$1
+       shift
+       "$@"
+       exit_code=$?
+       if test $exit_code = $want_code
+       then
+               echo >&2 "test_expect_code: command exited with $exit_code: $*"
+               return 0
+       else
+               echo >&2 "test_expect_code: command exited with $exit_code, we wanted $want_code $*"
+               return 1
+       fi
+}
+
 # test_cmp is a helper function to compare actual and expected output.
 # You can use it like:
 #