Merge branch 'pk/test-avoid-pipe-hiding-exit-status'
authorJunio C Hamano <gitster@pobox.com>
Wed, 11 Apr 2018 04:09:56 +0000 (13:09 +0900)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Apr 2018 04:09:56 +0000 (13:09 +0900)
Test cleanup.

* pk/test-avoid-pipe-hiding-exit-status:
test: avoid pipes in git related commands for test

1  2 
t/t5300-pack-object.sh
t/t5510-fetch.sh
t/t7003-filter-branch.sh
diff --combined t/t5300-pack-object.sh
index 3bac1f20e09cf6b921078a93f6a6b5097317585c,156beb2d52fbaffcc36dd9f1b37b88686310ef53..65ff60f2ee9b4af61f3f2d7d0f889fc4529e2b60
@@@ -16,8 -16,8 +16,8 @@@ test_expect_success 
       perl -e "print \"a\" x 4096;" > a &&
       perl -e "print \"b\" x 4096;" > b &&
       perl -e "print \"c\" x 4096;" > c &&
 -     test-genrandom "seed a" 2097152 > a_big &&
 -     test-genrandom "seed b" 2097152 > b_big &&
 +     test-tool genrandom "seed a" 2097152 > a_big &&
 +     test-tool genrandom "seed b" 2097152 > b_big &&
       git update-index --add a a_big b b_big c &&
       cat c >d && echo foo >>d && git update-index --add d &&
       tree=$(git write-tree) &&
@@@ -311,8 -311,8 +311,8 @@@ test_expect_success 'unpacking with --s
        rm -f .git/index &&
        tail -n 10 LIST | git update-index --index-info &&
        ST=$(git write-tree) &&
-       PACK5=$( git rev-list --objects "$LIST" "$LI" "$ST" | \
-               git pack-objects test-5 ) &&
+       git rev-list --objects "$LIST" "$LI" "$ST" >actual &&
+       PACK5=$( git pack-objects test-5 <actual ) &&
        PACK6=$( (
                        echo "$LIST"
                        echo "$LI"
@@@ -358,8 -358,8 +358,8 @@@ test_expect_success 'index-pack with --
        rm -f .git/index &&
        tail -n 10 LIST | git update-index --index-info &&
        ST=$(git write-tree) &&
-       PACK5=$( git rev-list --objects "$LIST" "$LI" "$ST" | \
-               git pack-objects test-5 ) &&
+       git rev-list --objects "$LIST" "$LI" "$ST" >actual &&
+       PACK5=$( git pack-objects test-5 <actual ) &&
        PACK6=$( (
                        echo "$LIST"
                        echo "$LI"
diff --combined t/t5510-fetch.sh
index da9ac0055721237f177d3d475e56ddb38b25eff1,ad3bd086a481f61c1ef85b35b5b62115b4697b97..ae5a530a2dc61a7926abfd471e3325d1638ca457
@@@ -540,232 -540,82 +540,232 @@@ test_expect_success "should be able to 
  set_config_tristate () {
        # var=$1 val=$2
        case "$2" in
 -      unset)  test_unconfig "$1" ;;
 -      *)      git config "$1" "$2" ;;
 +      unset)
 +              test_unconfig "$1"
 +              ;;
 +      *)
 +              git config "$1" "$2"
 +              key=$(echo $1 | sed -e 's/^remote\.origin/fetch/')
 +              git_fetch_c="$git_fetch_c -c $key=$2"
 +              ;;
        esac
  }
  
  test_configured_prune () {
 -      fetch_prune=$1 remote_origin_prune=$2 cmdline=$3 expected=$4
 +      test_configured_prune_type "$@" "name"
 +      test_configured_prune_type "$@" "link"
 +}
  
 -      test_expect_success "prune fetch.prune=$1 remote.origin.prune=$2${3:+ $3}; $4" '
 +test_configured_prune_type () {
 +      fetch_prune=$1
 +      remote_origin_prune=$2
 +      fetch_prune_tags=$3
 +      remote_origin_prune_tags=$4
 +      expected_branch=$5
 +      expected_tag=$6
 +      cmdline=$7
 +      mode=$8
 +
 +      if test -z "$cmdline_setup"
 +      then
 +              test_expect_success 'setup cmdline_setup variable for subsequent test' '
 +                      remote_url="file://$(git -C one config remote.origin.url)" &&
 +                      remote_fetch="$(git -C one config remote.origin.fetch)" &&
 +                      cmdline_setup="\"$remote_url\" \"$remote_fetch\""
 +              '
 +      fi
 +
 +      if test "$mode" = 'link'
 +      then
 +              new_cmdline=""
 +
 +              if test "$cmdline" = ""
 +              then
 +                      new_cmdline=$cmdline_setup
 +              else
 +                      new_cmdline=$(printf "%s" "$cmdline" | perl -pe 's[origin(?!/)]["'"$remote_url"'"]g')
 +              fi
 +
 +              if test "$fetch_prune_tags" = 'true' ||
 +                 test "$remote_origin_prune_tags" = 'true'
 +              then
 +                      if ! printf '%s' "$cmdline\n" | grep -q refs/remotes/origin/
 +                      then
 +                              new_cmdline="$new_cmdline refs/tags/*:refs/tags/*"
 +                      fi
 +              fi
 +
 +              cmdline="$new_cmdline"
 +      fi
 +
 +      test_expect_success "$mode prune fetch.prune=$1 remote.origin.prune=$2 fetch.pruneTags=$3 remote.origin.pruneTags=$4${7:+ $7}; branch:$5 tag:$6" '
                # make sure a newbranch is there in . and also in one
                git branch -f newbranch &&
 +              git tag -f newtag &&
                (
                        cd one &&
                        test_unconfig fetch.prune &&
 +                      test_unconfig fetch.pruneTags &&
                        test_unconfig remote.origin.prune &&
 -                      git fetch &&
 -                      git rev-parse --verify refs/remotes/origin/newbranch
 +                      test_unconfig remote.origin.pruneTags &&
 +                      git fetch '"$cmdline_setup"' &&
 +                      git rev-parse --verify refs/remotes/origin/newbranch &&
 +                      git rev-parse --verify refs/tags/newtag
                ) &&
  
                # now remove it
                git branch -d newbranch &&
 +              git tag -d newtag &&
  
                # then test
                (
                        cd one &&
 +                      git_fetch_c="" &&
                        set_config_tristate fetch.prune $fetch_prune &&
 +                      set_config_tristate fetch.pruneTags $fetch_prune_tags &&
                        set_config_tristate remote.origin.prune $remote_origin_prune &&
 -
 -                      git fetch $cmdline &&
 -                      case "$expected" in
 +                      set_config_tristate remote.origin.pruneTags $remote_origin_prune_tags &&
 +
 +                      if test "$mode" != "link"
 +                      then
 +                              git_fetch_c=""
 +                      fi &&
 +                      git$git_fetch_c fetch '"$cmdline"' &&
 +                      case "$expected_branch" in
                        pruned)
                                test_must_fail git rev-parse --verify refs/remotes/origin/newbranch
                                ;;
                        kept)
                                git rev-parse --verify refs/remotes/origin/newbranch
                                ;;
 +                      esac &&
 +                      case "$expected_tag" in
 +                      pruned)
 +                              test_must_fail git rev-parse --verify refs/tags/newtag
 +                              ;;
 +                      kept)
 +                              git rev-parse --verify refs/tags/newtag
 +                              ;;
                        esac
                )
        '
  }
  
 -test_configured_prune unset unset ""          kept
 -test_configured_prune unset unset "--no-prune"        kept
 -test_configured_prune unset unset "--prune"   pruned
 -
 -test_configured_prune false unset ""          kept
 -test_configured_prune false unset "--no-prune"        kept
 -test_configured_prune false unset "--prune"   pruned
 -
 -test_configured_prune true  unset ""          pruned
 -test_configured_prune true  unset "--prune"   pruned
 -test_configured_prune true  unset "--no-prune"        kept
 -
 -test_configured_prune unset false ""          kept
 -test_configured_prune unset false "--no-prune"        kept
 -test_configured_prune unset false "--prune"   pruned
 -
 -test_configured_prune false false ""          kept
 -test_configured_prune false false "--no-prune"        kept
 -test_configured_prune false false "--prune"   pruned
 -
 -test_configured_prune true  false ""          kept
 -test_configured_prune true  false "--prune"   pruned
 -test_configured_prune true  false "--no-prune"        kept
 -
 -test_configured_prune unset true  ""          pruned
 -test_configured_prune unset true  "--no-prune"        kept
 -test_configured_prune unset true  "--prune"   pruned
 -
 -test_configured_prune false true  ""          pruned
 -test_configured_prune false true  "--no-prune"        kept
 -test_configured_prune false true  "--prune"   pruned
 -
 -test_configured_prune true  true  ""          pruned
 -test_configured_prune true  true  "--prune"   pruned
 -test_configured_prune true  true  "--no-prune"        kept
 +# $1 config: fetch.prune
 +# $2 config: remote.<name>.prune
 +# $3 config: fetch.pruneTags
 +# $4 config: remote.<name>.pruneTags
 +# $5 expect: branch to be pruned?
 +# $6 expect: tag to be pruned?
 +# $7 git-fetch $cmdline:
 +#
 +#                     $1    $2    $3    $4    $5     $6     $7
 +test_configured_prune unset unset unset unset kept   kept   ""
 +test_configured_prune unset unset unset unset kept   kept   "--no-prune"
 +test_configured_prune unset unset unset unset pruned kept   "--prune"
 +test_configured_prune unset unset unset unset kept   pruned \
 +      "--prune origin refs/tags/*:refs/tags/*"
 +test_configured_prune unset unset unset unset pruned pruned \
 +      "--prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*"
 +
 +test_configured_prune false unset unset unset kept   kept   ""
 +test_configured_prune false unset unset unset kept   kept   "--no-prune"
 +test_configured_prune false unset unset unset pruned kept   "--prune"
 +
 +test_configured_prune true  unset unset unset pruned kept   ""
 +test_configured_prune true  unset unset unset pruned kept   "--prune"
 +test_configured_prune true  unset unset unset kept   kept   "--no-prune"
 +
 +test_configured_prune unset false unset unset kept   kept   ""
 +test_configured_prune unset false unset unset kept   kept   "--no-prune"
 +test_configured_prune unset false unset unset pruned kept   "--prune"
 +
 +test_configured_prune false false unset unset kept   kept   ""
 +test_configured_prune false false unset unset kept   kept   "--no-prune"
 +test_configured_prune false false unset unset pruned kept   "--prune"
 +test_configured_prune false false unset unset kept   pruned \
 +      "--prune origin refs/tags/*:refs/tags/*"
 +test_configured_prune false false unset unset pruned pruned \
 +      "--prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*"
 +
 +test_configured_prune true  false unset unset kept   kept   ""
 +test_configured_prune true  false unset unset pruned kept   "--prune"
 +test_configured_prune true  false unset unset kept   kept   "--no-prune"
 +
 +test_configured_prune unset true  unset unset pruned kept   ""
 +test_configured_prune unset true  unset unset kept   kept   "--no-prune"
 +test_configured_prune unset true  unset unset pruned kept   "--prune"
 +
 +test_configured_prune false true  unset unset pruned kept   ""
 +test_configured_prune false true  unset unset kept   kept   "--no-prune"
 +test_configured_prune false true  unset unset pruned kept   "--prune"
 +
 +test_configured_prune true  true  unset unset pruned kept   ""
 +test_configured_prune true  true  unset unset pruned kept   "--prune"
 +test_configured_prune true  true  unset unset kept   kept   "--no-prune"
 +test_configured_prune true  true  unset unset kept   pruned \
 +      "--prune origin refs/tags/*:refs/tags/*"
 +test_configured_prune true  true  unset unset pruned pruned \
 +      "--prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*"
 +
 +# --prune-tags on its own does nothing, needs --prune as well, same
 +# for for fetch.pruneTags without fetch.prune
 +test_configured_prune unset unset unset unset kept kept     "--prune-tags"
 +test_configured_prune unset unset true unset  kept kept     ""
 +test_configured_prune unset unset unset true  kept kept     ""
 +
 +# These will prune the tags
 +test_configured_prune unset unset unset unset pruned pruned "--prune --prune-tags"
 +test_configured_prune true  unset true  unset pruned pruned ""
 +test_configured_prune unset true  unset true  pruned pruned ""
 +
 +# remote.<name>.pruneTags overrides fetch.pruneTags, just like
 +# remote.<name>.prune overrides fetch.prune if set.
 +test_configured_prune true  unset true unset pruned pruned  ""
 +test_configured_prune false true  false true  pruned pruned ""
 +test_configured_prune true  false true  false kept   kept   ""
 +
 +# When --prune-tags is supplied it's ignored if an explicit refspec is
 +# given, same for the configuration options.
 +test_configured_prune unset unset unset unset pruned kept \
 +      "--prune --prune-tags origin +refs/heads/*:refs/remotes/origin/*"
 +test_configured_prune unset unset true  unset pruned kept \
 +      "--prune origin +refs/heads/*:refs/remotes/origin/*"
 +test_configured_prune unset unset unset true pruned  kept \
 +      "--prune origin +refs/heads/*:refs/remotes/origin/*"
 +
 +# Pruning that also takes place if a file:// url replaces a named
 +# remote. However, because there's no implicit
 +# +refs/heads/*:refs/remotes/origin/* refspec and supplying it on the
 +# command-line negates --prune-tags, the branches will not be pruned.
 +test_configured_prune_type unset unset unset unset kept   kept   "origin --prune-tags" "name"
 +test_configured_prune_type unset unset unset unset kept   kept   "origin --prune-tags" "link"
 +test_configured_prune_type unset unset unset unset pruned pruned "origin --prune --prune-tags" "name"
 +test_configured_prune_type unset unset unset unset kept   pruned "origin --prune --prune-tags" "link"
 +test_configured_prune_type unset unset unset unset pruned pruned "--prune --prune-tags origin" "name"
 +test_configured_prune_type unset unset unset unset kept   pruned "--prune --prune-tags origin" "link"
 +test_configured_prune_type unset unset true  unset pruned pruned "--prune origin" "name"
 +test_configured_prune_type unset unset true  unset kept   pruned "--prune origin" "link"
 +test_configured_prune_type unset unset unset true  pruned pruned "--prune origin" "name"
 +test_configured_prune_type unset unset unset true  kept   pruned "--prune origin" "link"
 +test_configured_prune_type true  unset true  unset pruned pruned "origin" "name"
 +test_configured_prune_type true  unset true  unset kept   pruned "origin" "link"
 +test_configured_prune_type unset  true true  unset pruned pruned "origin" "name"
 +test_configured_prune_type unset  true true  unset kept   pruned "origin" "link"
 +test_configured_prune_type unset  true unset true  pruned pruned "origin" "name"
 +test_configured_prune_type unset  true unset true  kept   pruned "origin" "link"
 +
 +# When all remote.origin.fetch settings are deleted a --prune
 +# --prune-tags still implicitly supplies refs/tags/*:refs/tags/* so
 +# tags, but not tracking branches, will be deleted.
 +test_expect_success 'remove remote.origin.fetch "one"' '
 +      (
 +              cd one &&
 +              git config --unset-all remote.origin.fetch
 +      )
 +'
 +test_configured_prune_type unset unset unset unset kept pruned "origin --prune --prune-tags" "name"
 +test_configured_prune_type unset unset unset unset kept pruned "origin --prune --prune-tags" "link"
  
  test_expect_success 'all boundary commits are excluded' '
        test_commit base &&
@@@ -840,8 -690,8 +840,8 @@@ test_expect_success C_LOCALE_OUTPUT 'fe
        test_commit looooooooooooong-tag &&
        (
                cd full-output &&
-               git -c fetch.output=full fetch origin 2>&1 | \
-                       grep -e "->" | cut -c 22- >../actual
+               git -c fetch.output=full fetch origin >actual 2>&1 &&
+               grep -e "->" actual | cut -c 22- >../actual
        ) &&
        cat >expect <<-\EOF &&
        master               -> origin/master
@@@ -855,8 -705,8 +855,8 @@@ test_expect_success C_LOCALE_OUTPUT 'fe
        test_commit extraaa &&
        (
                cd compact &&
-               git -c fetch.output=compact fetch origin 2>&1 | \
-                       grep -e "->" | cut -c 22- >../actual
+               git -c fetch.output=compact fetch origin >actual 2>&1 &&
+               grep -e "->" actual | cut -c 22- >../actual
        ) &&
        cat >expect <<-\EOF &&
        master     -> origin/*
diff --combined t/t7003-filter-branch.sh
index 04f79f32b4b8a23f2b34577e9f7e1a154963da6a,6a28b6cceb2ce01a3b8fd21741708fe93f2ebf55..ec4b160ddb9f966044e729f35cc1edfcc79eed14
@@@ -187,7 -187,8 +187,8 @@@ test_expect_success 'author informatio
                        test \$GIT_COMMIT != $(git rev-parse master) || \
                        echo Hallo" \
                preserved-author) &&
-       test 1 = $(git rev-list --author="B V Uips" preserved-author | wc -l)
+       git rev-list --author="B V Uips" preserved-author >actual &&
+       test_line_count = 1 actual
  '
  
  test_expect_success "remove a certain author's commits" '
        cnt1=$(git rev-list master | wc -l) &&
        cnt2=$(git rev-list removed-author | wc -l) &&
        test $cnt1 -eq $(($cnt2 + 1)) &&
-       test 0 = $(git rev-list --author="B V Uips" removed-author | wc -l)
+       git rev-list --author="B V Uips" removed-author >actual &&
+       test_line_count = 0 actual
  '
  
  test_expect_success 'barf on invalid name' '
@@@ -258,7 -260,8 +260,8 @@@ test_expect_success 'Subdirectory filte
        git commit -m "Re-adding foo" &&
  
        git filter-branch -f --subdirectory-filter foo &&
-       test $(git rev-list master | wc -l) = 3
+       git rev-list master >actual &&
+       test_line_count = 3 actual
  '
  
  test_expect_success 'Tag name filtering retains tag message' '
@@@ -470,18 -473,4 +473,18 @@@ test_expect_success 'tree-filter deals 
        git show HEAD:$ambiguous
  '
  
 +test_expect_success 'rewrite repository including refs that point at non-commit object' '
 +      test_when_finished "git reset --hard original" &&
 +      tree=$(git rev-parse HEAD^{tree}) &&
 +      test_when_finished "git replace -d $tree" &&
 +      echo A >new &&
 +      git add new &&
 +      new_tree=$(git write-tree) &&
 +      git replace $tree $new_tree &&
 +      git tag -a -m "tag to a tree" treetag $new_tree &&
 +      git reset --hard HEAD &&
 +      git filter-branch -f -- --all >filter-output 2>&1 &&
 +      ! fgrep fatal filter-output
 +'
 +
  test_done