Merge branch 'cc/tests-without-assuming-ref-files-backend'
authorJunio C Hamano <gitster@pobox.com>
Fri, 1 Jun 2018 06:06:41 +0000 (15:06 +0900)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Jun 2018 06:06:41 +0000 (15:06 +0900)
Quite a many tests assumed that newly created refs are made as
loose refs using the files backend, which have been updated to use
proper plumbing like rev-parse and update-ref, to avoid breakage
once we start using different ref backends.

* cc/tests-without-assuming-ref-files-backend:
t990X: use '.git/objects' as 'deep inside .git' path
t: make many tests depend less on the refs being files

1  2 
t/t3200-branch.sh
t/t5510-fetch.sh
t/t9104-git-svn-follow-parent.sh
t/t9902-completion.sh
diff --combined t/t3200-branch.sh
index b52c655c37e285892f431cccf7cfa5d4ba49d253,1038c7e99bc002992a6972bc569c49f7c8883e7a..69ea8202f437a47b1c52b60f4a2afacd3d5a4f21
@@@ -6,7 -6,6 +6,7 @@@
  test_description='git branch assorted tests'
  
  . ./test-lib.sh
 +. "$TEST_DIRECTORY"/lib-rebase.sh
  
  test_expect_success 'prepare a trivial repository' '
        echo Hello >A &&
@@@ -47,7 -46,7 +47,7 @@@ test_expect_success 'git branch HEAD sh
  '
  
  cat >expect <<EOF
 -$_z40 $HEAD $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000       branch: Created from master
 +$ZERO_OID $HEAD $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000   branch: Created from master
  EOF
  test_expect_success 'git branch -l d/e/f should create a branch and a log' '
        GIT_COMMITTER_DATE="2005-05-26 23:30" \
@@@ -234,34 -233,34 +234,34 @@@ test_expect_success 'git branch -M mast
  
  test_expect_success 'git branch -v -d t should work' '
        git branch t &&
-       test_path_is_file .git/refs/heads/t &&
+       git rev-parse --verify refs/heads/t &&
        git branch -v -d t &&
-       test_path_is_missing .git/refs/heads/t
+       test_must_fail git rev-parse --verify refs/heads/t
  '
  
  test_expect_success 'git branch -v -m t s should work' '
        git branch t &&
-       test_path_is_file .git/refs/heads/t &&
+       git rev-parse --verify refs/heads/t &&
        git branch -v -m t s &&
-       test_path_is_missing .git/refs/heads/t &&
-       test_path_is_file .git/refs/heads/s &&
+       test_must_fail git rev-parse --verify refs/heads/t &&
+       git rev-parse --verify refs/heads/s &&
        git branch -d s
  '
  
  test_expect_success 'git branch -m -d t s should fail' '
        git branch t &&
-       test_path_is_file .git/refs/heads/t &&
+       git rev-parse refs/heads/t &&
        test_must_fail git branch -m -d t s &&
        git branch -d t &&
-       test_path_is_missing .git/refs/heads/t
+       test_must_fail git rev-parse refs/heads/t
  '
  
  test_expect_success 'git branch --list -d t should fail' '
        git branch t &&
-       test_path_is_file .git/refs/heads/t &&
+       git rev-parse refs/heads/t &&
        test_must_fail git branch --list -d t &&
        git branch -d t &&
-       test_path_is_missing .git/refs/heads/t
+       test_must_fail git rev-parse refs/heads/t
  '
  
  test_expect_success 'git branch --list -v with --abbrev' '
@@@ -901,7 -900,7 +901,7 @@@ test_expect_success '--set-upstream-to 
  
  # Keep this test last, as it changes the current branch
  cat >expect <<EOF
 -$_z40 $HEAD $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000       branch: Created from master
 +$ZERO_OID $HEAD $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000   branch: Created from master
  EOF
  test_expect_success 'git checkout -b g/h/i -l should create a branch and a log' '
        GIT_COMMITTER_DATE="2005-05-26 23:30" \
@@@ -1247,29 -1246,6 +1247,29 @@@ test_expect_success '--merged is incomp
        test_must_fail git branch --merged HEAD --no-merged HEAD
  '
  
 +test_expect_success '--list during rebase' '
 +      test_when_finished "reset_rebase" &&
 +      git checkout master &&
 +      FAKE_LINES="1 edit 2" &&
 +      export FAKE_LINES &&
 +      set_fake_editor &&
 +      git rebase -i HEAD~2 &&
 +      git branch --list >actual &&
 +      test_i18ngrep "rebasing master" actual
 +'
 +
 +test_expect_success '--list during rebase from detached HEAD' '
 +      test_when_finished "reset_rebase && git checkout master" &&
 +      git checkout master^0 &&
 +      oid=$(git rev-parse --short HEAD) &&
 +      FAKE_LINES="1 edit 2" &&
 +      export FAKE_LINES &&
 +      set_fake_editor &&
 +      git rebase -i HEAD~2 &&
 +      git branch --list >actual &&
 +      test_i18ngrep "rebasing detached HEAD $oid" actual
 +'
 +
  test_expect_success 'tracking with unexpected .fetch refspec' '
        rm -rf a b c d &&
        git init a &&
diff --combined t/t5510-fetch.sh
index ae5a530a2dc61a7926abfd471e3325d1638ca457,ea0f57354eb923757fb0965343c6532142d4c167..e402aee6a22e64306c9f093ad1b529b3923fd65e
@@@ -63,7 -63,7 +63,7 @@@ test_expect_success "fetch test" 
        git commit -a -m "updated by origin" &&
        cd two &&
        git fetch &&
-       test -f .git/refs/heads/one &&
+       git rev-parse --verify refs/heads/one &&
        mine=$(git rev-parse refs/heads/one) &&
        his=$(cd ../one && git rev-parse refs/heads/master) &&
        test "z$mine" = "z$his"
@@@ -73,8 -73,8 +73,8 @@@ test_expect_success "fetch test for-mer
        cd "$D" &&
        cd three &&
        git fetch &&
-       test -f .git/refs/heads/two &&
-       test -f .git/refs/heads/one &&
+       git rev-parse --verify refs/heads/two &&
+       git rev-parse --verify refs/heads/one &&
        master_in_two=$(cd ../two && git rev-parse master) &&
        one_in_two=$(cd ../two && git rev-parse one) &&
        {
@@@ -840,8 -840,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 -855,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/*
index a735fa37170fca27b48fba218a408cb2ea6bac8a,0c9c8f9f031f3e6561a3b962f77ef6041f1593c8..9c49b6c1fe24335c6bcae777d60e14cdf96fd306
@@@ -33,8 -33,8 +33,8 @@@ test_expect_success 'init and fetch a m
        git svn fetch -i thunk &&
        test "$(git rev-parse --verify refs/remotes/thunk@2)" \
           = "$(git rev-parse --verify refs/remotes/thunk~1)" &&
 -      test "$(git cat-file blob refs/remotes/thunk:readme |\
 -               sed -n -e "3p")" = goodbye &&
 +      git cat-file blob refs/remotes/thunk:readme >actual &&
 +      test "$(sed -n -e "3p" actual)" = goodbye &&
        test -z "$(git config --get svn-remote.svn.fetch \
                 "^trunk:refs/remotes/thunk@2$")"
        '
@@@ -48,8 -48,8 +48,8 @@@ test_expect_success 'init and fetch fro
          git svn fetch -i svn/thunk &&
        test "$(git rev-parse --verify refs/remotes/svn/trunk)" \
           = "$(git rev-parse --verify refs/remotes/svn/thunk~1)" &&
 -      test "$(git cat-file blob refs/remotes/svn/thunk:readme |\
 -               sed -n -e "3p")" = goodbye
 +      git cat-file blob refs/remotes/svn/thunk:readme >actual &&
 +      test "$(sed -n -e "3p" actual)" = goodbye
          '
  
  test_expect_success 'follow deleted parent' '
@@@ -107,8 -107,7 +107,8 @@@ test_expect_success 'follow deleted dir
        git svn init --minimize-url -i glob "$svnrepo"/glob &&
        git svn fetch -i glob &&
        test "$(git cat-file blob refs/remotes/glob:blob/bye)" = hi &&
 -      test "$(git ls-tree refs/remotes/glob | wc -l )" -eq 1
 +      git ls-tree refs/remotes/glob >actual &&
 +      test_line_count = 1 actual
        '
  
  # ref: r9270 of the Subversion repository: (http://svn.collab.net/repos/svn)
@@@ -205,9 -204,8 +205,9 @@@ test_expect_success "follow-parent is a
  test_expect_success "track multi-parent paths" '
        svn_cmd cp -m "resurrect /glob" "$svnrepo"/r9270 "$svnrepo"/glob &&
        git svn multi-fetch &&
 -      test $(git cat-file commit refs/remotes/glob | \
 -             grep "^parent " | wc -l) -eq 2
 +      git cat-file commit refs/remotes/glob >actual &&
 +      grep "^parent " actual >actual2 &&
 +      test_line_count = 2 actual2
        '
  
  test_expect_success "multi-fetch continues to work" "
        "
  
  test_expect_success "multi-fetch works off a 'clean' repository" '
-       rm -r "$GIT_DIR/svn" "$GIT_DIR/refs/remotes" "$GIT_DIR/logs" &&
+       rm -rf "$GIT_DIR/svn" "$GIT_DIR/refs/remotes" &&
+       git reflog expire --all --expire=all &&
        mkdir "$GIT_DIR/svn" &&
        git svn multi-fetch
        '
diff --combined t/t9902-completion.sh
index 36deb0b123cf501d4acd2c9ec26ff3acef21bc87,e7989d7796d6f66e0ec09c7ff0014a918de58095..a28640ce1accd604bd32fdc95fd172119f6c3741
@@@ -13,7 -13,7 +13,7 @@@ complete (
        return 0
  }
  
 -# Be careful when updating this list:
 +# Be careful when updating these lists:
  #
  # (1) The build tree may have build artifact from different branch, or
  #     the user's $PATH may have a random executable that may begin
@@@ -30,8 -30,7 +30,8 @@@
  #     completion for "git <TAB>", and a plumbing is excluded.  "add",
  #     "filter-branch" and "ls-files" are listed for this.
  
 -GIT_TESTING_COMMAND_COMPLETION='add checkout check-attr filter-branch ls-files'
 +GIT_TESTING_ALL_COMMAND_LIST='add checkout check-attr filter-branch ls-files'
 +GIT_TESTING_PORCELAIN_COMMAND_LIST='add checkout filter-branch'
  
  . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash"
  
@@@ -85,11 -84,10 +85,11 @@@ test_completion (
        then
                printf '%s\n' "$2" >expected
        else
 -              sed -e 's/Z$//' >expected
 +              sed -e 's/Z$//' |sort >expected
        fi &&
        run_completion "$1" &&
 -      test_cmp expected out
 +      sort out >out_sorted &&
 +      test_cmp expected out_sorted
  }
  
  # Test __gitcomp.
@@@ -181,7 -179,7 +181,7 @@@ test_expect_success '__git_find_repo_pa
  test_expect_success '__git_find_repo_path - parent is a .git directory' '
        echo "$ROOT/.git" >expected &&
        (
-               cd .git/refs/heads &&
+               cd .git/objects &&
                __git_find_repo_path &&
                echo "$__git_repo_path" >"$actual"
        ) &&
@@@ -402,46 -400,6 +402,46 @@@ test_expect_success '__gitdir - remote 
        test_cmp expected "$actual"
  '
  
 +
 +test_expect_success '__git_dequote - plain unquoted word' '
 +      __git_dequote unquoted-word &&
 +      verbose test unquoted-word = "$dequoted_word"
 +'
 +
 +# input:    b\a\c\k\'\\\"s\l\a\s\h\es
 +# expected: back'\"slashes
 +test_expect_success '__git_dequote - backslash escaped' '
 +      __git_dequote "b\a\c\k\\'\''\\\\\\\"s\l\a\s\h\es" &&
 +      verbose test "back'\''\\\"slashes" = "$dequoted_word"
 +'
 +
 +# input:    sin'gle\' '"quo'ted
 +# expected: single\ "quoted
 +test_expect_success '__git_dequote - single quoted' '
 +      __git_dequote "'"sin'gle\\\\' '\\\"quo'ted"'" &&
 +      verbose test '\''single\ "quoted'\'' = "$dequoted_word"
 +'
 +
 +# input:    dou"ble\\" "\"\quot"ed
 +# expected: double\ "\quoted
 +test_expect_success '__git_dequote - double quoted' '
 +      __git_dequote '\''dou"ble\\" "\"\quot"ed'\'' &&
 +      verbose test '\''double\ "\quoted'\'' = "$dequoted_word"
 +'
 +
 +# input: 'open single quote
 +test_expect_success '__git_dequote - open single quote' '
 +      __git_dequote "'\''open single quote" &&
 +      verbose test "open single quote" = "$dequoted_word"
 +'
 +
 +# input: "open double quote
 +test_expect_success '__git_dequote - open double quote' '
 +      __git_dequote "\"open double quote" &&
 +      verbose test "open double quote" = "$dequoted_word"
 +'
 +
 +
  test_expect_success '__gitcomp_direct - puts everything into COMPREPLY as-is' '
        sed -e "s/Z$//g" >expected <<-EOF &&
        with-trailing-space Z
@@@ -1210,124 -1168,6 +1210,124 @@@ test_expect_success 'teardown after re
        git remote remove other
  '
  
 +
 +test_path_completion ()
 +{
 +      test $# = 2 || error "bug in the test script: not 2 parameters to test_path_completion"
 +
 +      local cur="$1" expected="$2"
 +      echo "$expected" >expected &&
 +      (
 +              # In the following tests calling this function we only
 +              # care about how __git_complete_index_file() deals with
 +              # unusual characters in path names.  By requesting only
 +              # untracked files we dont have to bother adding any
 +              # paths to the index in those tests.
 +              __git_complete_index_file --others &&
 +              print_comp
 +      ) &&
 +      test_cmp expected out
 +}
 +
 +test_expect_success 'setup for path completion tests' '
 +      mkdir simple-dir \
 +            "spaces in dir" \
 +            árvíztűrő &&
 +      touch simple-dir/simple-file \
 +            "spaces in dir/spaces in file" \
 +            "árvíztűrő/Сайн яваарай" &&
 +      if test_have_prereq !MINGW &&
 +         mkdir BS\\dir \
 +               '$'separators\034in\035dir'' &&
 +         touch BS\\dir/DQ\"file \
 +               '$'separators\034in\035dir/sep\036in\037file''
 +      then
 +              test_set_prereq FUNNYNAMES
 +      else
 +              rm -rf BS\\dir '$'separators\034in\035dir''
 +      fi
 +'
 +
 +test_expect_success '__git_complete_index_file - simple' '
 +      test_path_completion simple simple-dir &&  # Bash is supposed to
 +                                                 # add the trailing /.
 +      test_path_completion simple-dir/simple simple-dir/simple-file
 +'
 +
 +test_expect_success \
 +    '__git_complete_index_file - escaped characters on cmdline' '
 +      test_path_completion spac "spaces in dir" &&  # Bash will turn this
 +                                                    # into "spaces\ in\ dir"
 +      test_path_completion "spaces\\ i" \
 +                           "spaces in dir" &&
 +      test_path_completion "spaces\\ in\\ dir/s" \
 +                           "spaces in dir/spaces in file" &&
 +      test_path_completion "spaces\\ in\\ dir/spaces\\ i" \
 +                           "spaces in dir/spaces in file"
 +'
 +
 +test_expect_success \
 +    '__git_complete_index_file - quoted characters on cmdline' '
 +      # Testing with an opening but without a corresponding closing
 +      # double quote is important.
 +      test_path_completion \"spac "spaces in dir" &&
 +      test_path_completion "\"spaces i" \
 +                           "spaces in dir" &&
 +      test_path_completion "\"spaces in dir/s" \
 +                           "spaces in dir/spaces in file" &&
 +      test_path_completion "\"spaces in dir/spaces i" \
 +                           "spaces in dir/spaces in file"
 +'
 +
 +test_expect_success '__git_complete_index_file - UTF-8 in ls-files output' '
 +      test_path_completion á árvíztűrő &&
 +      test_path_completion árvíztűrő/С "árvíztűrő/Сайн яваарай"
 +'
 +
 +test_expect_success FUNNYNAMES \
 +    '__git_complete_index_file - C-style escapes in ls-files output' '
 +      test_path_completion BS \
 +                           BS\\dir &&
 +      test_path_completion BS\\\\d \
 +                           BS\\dir &&
 +      test_path_completion BS\\\\dir/DQ \
 +                           BS\\dir/DQ\"file &&
 +      test_path_completion BS\\\\dir/DQ\\\"f \
 +                           BS\\dir/DQ\"file
 +'
 +
 +test_expect_success FUNNYNAMES \
 +    '__git_complete_index_file - \nnn-escaped characters in ls-files output' '
 +      test_path_completion sep '$'separators\034in\035dir'' &&
 +      test_path_completion '$'separators\034i'' \
 +                           '$'separators\034in\035dir'' &&
 +      test_path_completion '$'separators\034in\035dir/sep'' \
 +                           '$'separators\034in\035dir/sep\036in\037file'' &&
 +      test_path_completion '$'separators\034in\035dir/sep\036i'' \
 +                           '$'separators\034in\035dir/sep\036in\037file''
 +'
 +
 +test_expect_success FUNNYNAMES \
 +    '__git_complete_index_file - removing repeated quoted path components' '
 +      test_when_finished rm -r repeated-quoted &&
 +      mkdir repeated-quoted &&      # A directory whose name in itself
 +                                    # would not be quoted ...
 +      >repeated-quoted/0-file &&
 +      >repeated-quoted/1\"file &&   # ... but here the file makes the
 +                                    # dirname quoted ...
 +      >repeated-quoted/2-file &&
 +      >repeated-quoted/3\"file &&   # ... and here, too.
 +
 +      # Still, we shold only list the directory name only once.
 +      test_path_completion repeated repeated-quoted
 +'
 +
 +test_expect_success 'teardown after path completion tests' '
 +      rm -rf simple-dir "spaces in dir" árvíztűrő \
 +             BS\\dir '$'separators\034in\035dir''
 +'
 +
 +
  test_expect_success '__git_get_config_variables' '
        cat >expect <<-EOF &&
        name-1
@@@ -1351,6 -1191,17 +1351,6 @@@ test_expect_success '__git_pretty_alias
        test_cmp expect actual
  '
  
 -test_expect_success '__git_aliases' '
 -      cat >expect <<-EOF &&
 -      ci
 -      co
 -      EOF
 -      test_config alias.ci commit &&
 -      test_config alias.co checkout &&
 -      __git_aliases >actual &&
 -      test_cmp expect actual
 -'
 -
  test_expect_success 'basic' '
        run_completion "git " &&
        # built-in
@@@ -1514,7 -1365,6 +1514,7 @@@ test_expect_success 'complete files' 
  
        echo "expected" > .gitignore &&
        echo "out" >> .gitignore &&
 +      echo "out_sorted" >> .gitignore &&
  
        git add .gitignore &&
        test_completion "git commit " ".gitignore" &&
@@@ -1604,12 -1454,6 +1604,12 @@@ test_expect_success 'completion used <c
        EOF
  '
  
 +test_expect_success 'completion without explicit _git_xxx function' '
 +      test_completion "git version --" <<-\EOF
 +      --build-options Z
 +      EOF
 +'
 +
  test_expect_failure 'complete with tilde expansion' '
        git init tmp && cd tmp &&
        test_when_finished "cd .. && rm -rf tmp" &&
@@@ -1660,6 -1504,13 +1660,6 @@@ test_expect_success 'sourcing the compl
        verbose test -z "$__git_all_commands"
  '
  
 -test_expect_success 'sourcing the completion script clears cached porcelain commands' '
 -      __git_compute_porcelain_commands &&
 -      verbose test -n "$__git_porcelain_commands" &&
 -      . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
 -      verbose test -z "$__git_porcelain_commands"
 -'
 -
  test_expect_success !GETTEXT_POISON 'sourcing the completion script clears cached merge strategies' '
        __git_compute_merge_strategies &&
        verbose test -n "$__git_merge_strategies" &&