mirror of
https://github.com/git/git.git
synced 2026-03-24 15:40:08 +01:00
Merge branch 'sg/completion'
Clean-up and updates to command line completion (in contrib/). * sg/completion: (22 commits) completion: restore removed line continuating backslash completion: cache the path to the repository completion: extract repository discovery from __gitdir() completion: don't guard git executions with __gitdir() completion: consolidate silencing errors from git commands completion: don't use __gitdir() for git commands completion: respect 'git -C <path>' rev-parse: add '--absolute-git-dir' option completion: fix completion after 'git -C <path>' completion: don't offer commands when 'git --opt' needs an argument completion: list short refs from a remote given as a URL completion: don't list 'HEAD' when trying refs completion outside of a repo completion: list refs from remote when remote's name matches a directory completion: respect 'git --git-dir=<path>' when listing remote refs completion: fix most spots not respecting 'git --git-dir=<path>' completion: ensure that the repository path given on the command line exists completion tests: add tests for the __git_refs() helper function completion tests: check __gitdir()'s output in the error cases completion tests: consolidate getting path of current working directory completion tests: make the $cur variable local to the test helper functions ...
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
test_description='test git rev-parse'
|
||||
. ./test-lib.sh
|
||||
|
||||
# usage: [options] label is-bare is-inside-git is-inside-work prefix git-dir
|
||||
# usage: [options] label is-bare is-inside-git is-inside-work prefix git-dir absolute-git-dir
|
||||
test_rev_parse () {
|
||||
d=
|
||||
bare=
|
||||
@@ -29,7 +29,8 @@ test_rev_parse () {
|
||||
--is-inside-git-dir \
|
||||
--is-inside-work-tree \
|
||||
--show-prefix \
|
||||
--git-dir
|
||||
--git-dir \
|
||||
--absolute-git-dir
|
||||
do
|
||||
test $# -eq 0 && break
|
||||
expect="$1"
|
||||
@@ -62,26 +63,26 @@ test_expect_success 'setup' '
|
||||
cp -R .git repo.git
|
||||
'
|
||||
|
||||
test_rev_parse toplevel false false true '' .git
|
||||
test_rev_parse toplevel false false true '' .git "$ROOT/.git"
|
||||
|
||||
test_rev_parse -C .git .git/ false true false '' .
|
||||
test_rev_parse -C .git/objects .git/objects/ false true false '' "$ROOT/.git"
|
||||
test_rev_parse -C .git .git/ false true false '' . "$ROOT/.git"
|
||||
test_rev_parse -C .git/objects .git/objects/ false true false '' "$ROOT/.git" "$ROOT/.git"
|
||||
|
||||
test_rev_parse -C sub/dir subdirectory false false true sub/dir/ "$ROOT/.git"
|
||||
test_rev_parse -C sub/dir subdirectory false false true sub/dir/ "$ROOT/.git" "$ROOT/.git"
|
||||
|
||||
test_rev_parse -b t 'core.bare = true' true false false
|
||||
|
||||
test_rev_parse -b u 'core.bare undefined' false false true
|
||||
|
||||
|
||||
test_rev_parse -C work -g ../.git -b f 'GIT_DIR=../.git, core.bare = false' false false true ''
|
||||
test_rev_parse -C work -g ../.git -b f 'GIT_DIR=../.git, core.bare = false' false false true '' "../.git" "$ROOT/.git"
|
||||
|
||||
test_rev_parse -C work -g ../.git -b t 'GIT_DIR=../.git, core.bare = true' true false false ''
|
||||
|
||||
test_rev_parse -C work -g ../.git -b u 'GIT_DIR=../.git, core.bare undefined' false false true ''
|
||||
|
||||
|
||||
test_rev_parse -C work -g ../repo.git -b f 'GIT_DIR=../repo.git, core.bare = false' false false true ''
|
||||
test_rev_parse -C work -g ../repo.git -b f 'GIT_DIR=../repo.git, core.bare = false' false false true '' "../repo.git" "$ROOT/repo.git"
|
||||
|
||||
test_rev_parse -C work -g ../repo.git -b t 'GIT_DIR=../repo.git, core.bare = true' true false false ''
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ test_gitcomp ()
|
||||
{
|
||||
local -a COMPREPLY &&
|
||||
sed -e 's/Z$//' >expected &&
|
||||
cur="$1" &&
|
||||
local cur="$1" &&
|
||||
shift &&
|
||||
__gitcomp "$@" &&
|
||||
print_comp &&
|
||||
@@ -113,7 +113,7 @@ test_gitcomp_nl ()
|
||||
{
|
||||
local -a COMPREPLY &&
|
||||
sed -e 's/Z$//' >expected &&
|
||||
cur="$1" &&
|
||||
local cur="$1" &&
|
||||
shift &&
|
||||
__gitcomp_nl "$@" &&
|
||||
print_comp &&
|
||||
@@ -124,140 +124,280 @@ invalid_variable_name='${foo.bar}'
|
||||
|
||||
actual="$TRASH_DIRECTORY/actual"
|
||||
|
||||
test_expect_success 'setup for __gitdir tests' '
|
||||
if test_have_prereq MINGW
|
||||
then
|
||||
ROOT="$(pwd -W)"
|
||||
else
|
||||
ROOT="$(pwd)"
|
||||
fi
|
||||
|
||||
test_expect_success 'setup for __git_find_repo_path/__gitdir tests' '
|
||||
mkdir -p subdir/subsubdir &&
|
||||
mkdir -p non-repo &&
|
||||
git init otherrepo
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - from command line (through $__git_dir)' '
|
||||
echo "$TRASH_DIRECTORY/otherrepo/.git" >expected &&
|
||||
test_expect_success '__git_find_repo_path - from command line (through $__git_dir)' '
|
||||
echo "$ROOT/otherrepo/.git" >expected &&
|
||||
(
|
||||
__git_dir="$TRASH_DIRECTORY/otherrepo/.git" &&
|
||||
__gitdir >"$actual"
|
||||
__git_dir="$ROOT/otherrepo/.git" &&
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - repo as argument' '
|
||||
echo "otherrepo/.git" >expected &&
|
||||
__gitdir "otherrepo" >"$actual" &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - remote as argument' '
|
||||
echo "remote" >expected &&
|
||||
__gitdir "remote" >"$actual" &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - .git directory in cwd' '
|
||||
test_expect_success '__git_find_repo_path - .git directory in cwd' '
|
||||
echo ".git" >expected &&
|
||||
__gitdir >"$actual" &&
|
||||
(
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - .git directory in parent' '
|
||||
echo "$(pwd -P)/.git" >expected &&
|
||||
test_expect_success '__git_find_repo_path - .git directory in parent' '
|
||||
echo "$ROOT/.git" >expected &&
|
||||
(
|
||||
cd subdir/subsubdir &&
|
||||
__gitdir >"$actual"
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - cwd is a .git directory' '
|
||||
test_expect_success '__git_find_repo_path - cwd is a .git directory' '
|
||||
echo "." >expected &&
|
||||
(
|
||||
cd .git &&
|
||||
__gitdir >"$actual"
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - parent is a .git directory' '
|
||||
echo "$(pwd -P)/.git" >expected &&
|
||||
test_expect_success '__git_find_repo_path - parent is a .git directory' '
|
||||
echo "$ROOT/.git" >expected &&
|
||||
(
|
||||
cd .git/refs/heads &&
|
||||
__gitdir >"$actual"
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - $GIT_DIR set while .git directory in cwd' '
|
||||
echo "$TRASH_DIRECTORY/otherrepo/.git" >expected &&
|
||||
test_expect_success '__git_find_repo_path - $GIT_DIR set while .git directory in cwd' '
|
||||
echo "$ROOT/otherrepo/.git" >expected &&
|
||||
(
|
||||
GIT_DIR="$TRASH_DIRECTORY/otherrepo/.git" &&
|
||||
GIT_DIR="$ROOT/otherrepo/.git" &&
|
||||
export GIT_DIR &&
|
||||
__gitdir >"$actual"
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - $GIT_DIR set while .git directory in parent' '
|
||||
echo "$TRASH_DIRECTORY/otherrepo/.git" >expected &&
|
||||
test_expect_success '__git_find_repo_path - $GIT_DIR set while .git directory in parent' '
|
||||
echo "$ROOT/otherrepo/.git" >expected &&
|
||||
(
|
||||
GIT_DIR="$TRASH_DIRECTORY/otherrepo/.git" &&
|
||||
GIT_DIR="$ROOT/otherrepo/.git" &&
|
||||
export GIT_DIR &&
|
||||
cd subdir &&
|
||||
__gitdir >"$actual"
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - non-existing $GIT_DIR' '
|
||||
test_expect_success '__git_find_repo_path - from command line while "git -C"' '
|
||||
echo "$ROOT/.git" >expected &&
|
||||
(
|
||||
GIT_DIR="$TRASH_DIRECTORY/non-existing" &&
|
||||
export GIT_DIR &&
|
||||
test_must_fail __gitdir
|
||||
)
|
||||
__git_dir="$ROOT/.git" &&
|
||||
__git_C_args=(-C otherrepo) &&
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
function pwd_P_W () {
|
||||
if test_have_prereq MINGW
|
||||
then
|
||||
pwd -W
|
||||
else
|
||||
pwd -P
|
||||
fi
|
||||
}
|
||||
test_expect_success '__git_find_repo_path - relative dir from command line and "git -C"' '
|
||||
echo "$ROOT/otherrepo/.git" >expected &&
|
||||
(
|
||||
cd subdir &&
|
||||
__git_dir="otherrepo/.git" &&
|
||||
__git_C_args=(-C ..) &&
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - gitfile in cwd' '
|
||||
echo "$(pwd_P_W)/otherrepo/.git" >expected &&
|
||||
echo "gitdir: $(pwd_P_W)/otherrepo/.git" >subdir/.git &&
|
||||
test_expect_success '__git_find_repo_path - $GIT_DIR set while "git -C"' '
|
||||
echo "$ROOT/.git" >expected &&
|
||||
(
|
||||
GIT_DIR="$ROOT/.git" &&
|
||||
export GIT_DIR &&
|
||||
__git_C_args=(-C otherrepo) &&
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_find_repo_path - relative dir in $GIT_DIR and "git -C"' '
|
||||
echo "$ROOT/otherrepo/.git" >expected &&
|
||||
(
|
||||
cd subdir &&
|
||||
GIT_DIR="otherrepo/.git" &&
|
||||
export GIT_DIR &&
|
||||
__git_C_args=(-C ..) &&
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_find_repo_path - "git -C" while .git directory in cwd' '
|
||||
echo "$ROOT/otherrepo/.git" >expected &&
|
||||
(
|
||||
__git_C_args=(-C otherrepo) &&
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_find_repo_path - "git -C" while cwd is a .git directory' '
|
||||
echo "$ROOT/otherrepo/.git" >expected &&
|
||||
(
|
||||
cd .git &&
|
||||
__git_C_args=(-C .. -C otherrepo) &&
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_find_repo_path - "git -C" while .git directory in parent' '
|
||||
echo "$ROOT/otherrepo/.git" >expected &&
|
||||
(
|
||||
cd subdir &&
|
||||
__git_C_args=(-C .. -C otherrepo) &&
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_find_repo_path - non-existing path in "git -C"' '
|
||||
(
|
||||
__git_C_args=(-C non-existing) &&
|
||||
test_must_fail __git_find_repo_path &&
|
||||
printf "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_must_be_empty "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_find_repo_path - non-existing path in $__git_dir' '
|
||||
(
|
||||
__git_dir="non-existing" &&
|
||||
test_must_fail __git_find_repo_path &&
|
||||
printf "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_must_be_empty "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_find_repo_path - non-existing $GIT_DIR' '
|
||||
(
|
||||
GIT_DIR="$ROOT/non-existing" &&
|
||||
export GIT_DIR &&
|
||||
test_must_fail __git_find_repo_path &&
|
||||
printf "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_must_be_empty "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_find_repo_path - gitfile in cwd' '
|
||||
echo "$ROOT/otherrepo/.git" >expected &&
|
||||
echo "gitdir: $ROOT/otherrepo/.git" >subdir/.git &&
|
||||
test_when_finished "rm -f subdir/.git" &&
|
||||
(
|
||||
cd subdir &&
|
||||
__gitdir >"$actual"
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - gitfile in parent' '
|
||||
echo "$(pwd_P_W)/otherrepo/.git" >expected &&
|
||||
echo "gitdir: $(pwd_P_W)/otherrepo/.git" >subdir/.git &&
|
||||
test_expect_success '__git_find_repo_path - gitfile in parent' '
|
||||
echo "$ROOT/otherrepo/.git" >expected &&
|
||||
echo "gitdir: $ROOT/otherrepo/.git" >subdir/.git &&
|
||||
test_when_finished "rm -f subdir/.git" &&
|
||||
(
|
||||
cd subdir/subsubdir &&
|
||||
__gitdir >"$actual"
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success SYMLINKS '__gitdir - resulting path avoids symlinks' '
|
||||
echo "$(pwd -P)/otherrepo/.git" >expected &&
|
||||
test_expect_success SYMLINKS '__git_find_repo_path - resulting path avoids symlinks' '
|
||||
echo "$ROOT/otherrepo/.git" >expected &&
|
||||
mkdir otherrepo/dir &&
|
||||
test_when_finished "rm -rf otherrepo/dir" &&
|
||||
ln -s otherrepo/dir link &&
|
||||
test_when_finished "rm -f link" &&
|
||||
(
|
||||
cd link &&
|
||||
__git_find_repo_path &&
|
||||
echo "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_find_repo_path - not a git repository' '
|
||||
(
|
||||
cd non-repo &&
|
||||
GIT_CEILING_DIRECTORIES="$ROOT" &&
|
||||
export GIT_CEILING_DIRECTORIES &&
|
||||
test_must_fail __git_find_repo_path &&
|
||||
printf "$__git_repo_path" >"$actual"
|
||||
) &&
|
||||
test_must_be_empty "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - finds repo' '
|
||||
echo "$ROOT/.git" >expected &&
|
||||
(
|
||||
cd subdir/subsubdir &&
|
||||
__gitdir >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - not a git repository' '
|
||||
nongit test_must_fail __gitdir
|
||||
|
||||
test_expect_success '__gitdir - returns error when cant find repo' '
|
||||
(
|
||||
__git_dir="non-existing" &&
|
||||
test_must_fail __gitdir >"$actual"
|
||||
) &&
|
||||
test_must_be_empty "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - repo as argument' '
|
||||
echo "otherrepo/.git" >expected &&
|
||||
(
|
||||
__gitdir "otherrepo" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitdir - remote as argument' '
|
||||
echo "remote" >expected &&
|
||||
(
|
||||
__gitdir "remote" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__gitcomp - trailing space - options' '
|
||||
@@ -361,10 +501,286 @@ test_expect_success '__git_remotes - list remotes from $GIT_DIR/remotes and from
|
||||
git remote add remote_in_config_1 git://remote_1 &&
|
||||
test_when_finished "git remote remove remote_in_config_2" &&
|
||||
git remote add remote_in_config_2 git://remote_2 &&
|
||||
__git_remotes >actual &&
|
||||
(
|
||||
__git_remotes >actual
|
||||
) &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '__git_is_configured_remote' '
|
||||
test_when_finished "git remote remove remote_1" &&
|
||||
git remote add remote_1 git://remote_1 &&
|
||||
test_when_finished "git remote remove remote_2" &&
|
||||
git remote add remote_2 git://remote_2 &&
|
||||
(
|
||||
verbose __git_is_configured_remote remote_2 &&
|
||||
test_must_fail __git_is_configured_remote non-existent
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'setup for ref completion' '
|
||||
git commit --allow-empty -m initial &&
|
||||
git branch matching-branch &&
|
||||
git tag matching-tag &&
|
||||
(
|
||||
cd otherrepo &&
|
||||
git commit --allow-empty -m initial &&
|
||||
git branch -m master master-in-other &&
|
||||
git branch branch-in-other &&
|
||||
git tag tag-in-other
|
||||
) &&
|
||||
git remote add other "$ROOT/otherrepo/.git" &&
|
||||
git fetch --no-tags other &&
|
||||
rm -f .git/FETCH_HEAD &&
|
||||
git init thirdrepo
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - simple' '
|
||||
cat >expected <<-EOF &&
|
||||
HEAD
|
||||
master
|
||||
matching-branch
|
||||
other/branch-in-other
|
||||
other/master-in-other
|
||||
matching-tag
|
||||
EOF
|
||||
(
|
||||
cur= &&
|
||||
__git_refs >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - full refs' '
|
||||
cat >expected <<-EOF &&
|
||||
refs/heads/master
|
||||
refs/heads/matching-branch
|
||||
EOF
|
||||
(
|
||||
cur=refs/heads/ &&
|
||||
__git_refs >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - repo given on the command line' '
|
||||
cat >expected <<-EOF &&
|
||||
HEAD
|
||||
branch-in-other
|
||||
master-in-other
|
||||
tag-in-other
|
||||
EOF
|
||||
(
|
||||
__git_dir="$ROOT/otherrepo/.git" &&
|
||||
cur= &&
|
||||
__git_refs >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - remote on local file system' '
|
||||
cat >expected <<-EOF &&
|
||||
HEAD
|
||||
branch-in-other
|
||||
master-in-other
|
||||
tag-in-other
|
||||
EOF
|
||||
(
|
||||
cur= &&
|
||||
__git_refs otherrepo >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - remote on local file system - full refs' '
|
||||
cat >expected <<-EOF &&
|
||||
refs/heads/branch-in-other
|
||||
refs/heads/master-in-other
|
||||
refs/tags/tag-in-other
|
||||
EOF
|
||||
(
|
||||
cur=refs/ &&
|
||||
__git_refs otherrepo >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - configured remote' '
|
||||
cat >expected <<-EOF &&
|
||||
HEAD
|
||||
branch-in-other
|
||||
master-in-other
|
||||
EOF
|
||||
(
|
||||
cur= &&
|
||||
__git_refs other >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - configured remote - full refs' '
|
||||
cat >expected <<-EOF &&
|
||||
refs/heads/branch-in-other
|
||||
refs/heads/master-in-other
|
||||
refs/tags/tag-in-other
|
||||
EOF
|
||||
(
|
||||
cur=refs/ &&
|
||||
__git_refs other >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - configured remote - repo given on the command line' '
|
||||
cat >expected <<-EOF &&
|
||||
HEAD
|
||||
branch-in-other
|
||||
master-in-other
|
||||
EOF
|
||||
(
|
||||
cd thirdrepo &&
|
||||
__git_dir="$ROOT/.git" &&
|
||||
cur= &&
|
||||
__git_refs other >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - configured remote - full refs - repo given on the command line' '
|
||||
cat >expected <<-EOF &&
|
||||
refs/heads/branch-in-other
|
||||
refs/heads/master-in-other
|
||||
refs/tags/tag-in-other
|
||||
EOF
|
||||
(
|
||||
cd thirdrepo &&
|
||||
__git_dir="$ROOT/.git" &&
|
||||
cur=refs/ &&
|
||||
__git_refs other >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - configured remote - remote name matches a directory' '
|
||||
cat >expected <<-EOF &&
|
||||
HEAD
|
||||
branch-in-other
|
||||
master-in-other
|
||||
EOF
|
||||
mkdir other &&
|
||||
test_when_finished "rm -rf other" &&
|
||||
(
|
||||
cur= &&
|
||||
__git_refs other >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - URL remote' '
|
||||
cat >expected <<-EOF &&
|
||||
HEAD
|
||||
branch-in-other
|
||||
master-in-other
|
||||
tag-in-other
|
||||
EOF
|
||||
(
|
||||
cur= &&
|
||||
__git_refs "file://$ROOT/otherrepo/.git" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - URL remote - full refs' '
|
||||
cat >expected <<-EOF &&
|
||||
refs/heads/branch-in-other
|
||||
refs/heads/master-in-other
|
||||
refs/tags/tag-in-other
|
||||
EOF
|
||||
(
|
||||
cur=refs/ &&
|
||||
__git_refs "file://$ROOT/otherrepo/.git" >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - non-existing remote' '
|
||||
(
|
||||
cur= &&
|
||||
__git_refs non-existing >"$actual"
|
||||
) &&
|
||||
test_must_be_empty "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - non-existing remote - full refs' '
|
||||
(
|
||||
cur=refs/ &&
|
||||
__git_refs non-existing >"$actual"
|
||||
) &&
|
||||
test_must_be_empty "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - non-existing URL remote' '
|
||||
(
|
||||
cur= &&
|
||||
__git_refs "file://$ROOT/non-existing" >"$actual"
|
||||
) &&
|
||||
test_must_be_empty "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - non-existing URL remote - full refs' '
|
||||
(
|
||||
cur=refs/ &&
|
||||
__git_refs "file://$ROOT/non-existing" >"$actual"
|
||||
) &&
|
||||
test_must_be_empty "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - not in a git repository' '
|
||||
(
|
||||
GIT_CEILING_DIRECTORIES="$ROOT" &&
|
||||
export GIT_CEILING_DIRECTORIES &&
|
||||
cd subdir &&
|
||||
cur= &&
|
||||
__git_refs >"$actual"
|
||||
) &&
|
||||
test_must_be_empty "$actual"
|
||||
'
|
||||
|
||||
test_expect_success '__git_refs - unique remote branches for git checkout DWIMery' '
|
||||
cat >expected <<-EOF &&
|
||||
HEAD
|
||||
master
|
||||
matching-branch
|
||||
other/ambiguous
|
||||
other/branch-in-other
|
||||
other/master-in-other
|
||||
remote/ambiguous
|
||||
remote/branch-in-remote
|
||||
matching-tag
|
||||
branch-in-other
|
||||
branch-in-remote
|
||||
master-in-other
|
||||
EOF
|
||||
for remote_ref in refs/remotes/other/ambiguous \
|
||||
refs/remotes/remote/ambiguous \
|
||||
refs/remotes/remote/branch-in-remote
|
||||
do
|
||||
git update-ref $remote_ref master &&
|
||||
test_when_finished "git update-ref -d $remote_ref"
|
||||
done &&
|
||||
(
|
||||
cur= &&
|
||||
__git_refs "" 1 >"$actual"
|
||||
) &&
|
||||
test_cmp expected "$actual"
|
||||
'
|
||||
|
||||
test_expect_success 'teardown after ref completion' '
|
||||
git branch -d matching-branch &&
|
||||
git tag -d matching-tag &&
|
||||
git remote remove other
|
||||
'
|
||||
|
||||
test_expect_success '__git_get_config_variables' '
|
||||
cat >expect <<-EOF &&
|
||||
name-1
|
||||
@@ -475,7 +891,12 @@ test_expect_success 'general options plus command' '
|
||||
test_completion "git --namespace=foo check" "checkout " &&
|
||||
test_completion "git --paginate check" "checkout " &&
|
||||
test_completion "git --info-path check" "checkout " &&
|
||||
test_completion "git --no-replace-objects check" "checkout "
|
||||
test_completion "git --no-replace-objects check" "checkout " &&
|
||||
test_completion "git --git-dir some/path check" "checkout " &&
|
||||
test_completion "git -c conf.var=value check" "checkout " &&
|
||||
test_completion "git -C some/path check" "checkout " &&
|
||||
test_completion "git --work-tree some/path check" "checkout " &&
|
||||
test_completion "git --namespace name/space check" "checkout "
|
||||
'
|
||||
|
||||
test_expect_success 'git --help completion' '
|
||||
@@ -483,10 +904,10 @@ test_expect_success 'git --help completion' '
|
||||
test_completion "git --help core" "core-tutorial "
|
||||
'
|
||||
|
||||
test_expect_success 'setup for ref completion' '
|
||||
test_expect_success 'setup for integration tests' '
|
||||
echo content >file1 &&
|
||||
echo more >file2 &&
|
||||
git add . &&
|
||||
git add file1 file2 &&
|
||||
git commit -m one &&
|
||||
git branch mybranch &&
|
||||
git tag mytag
|
||||
@@ -500,6 +921,12 @@ test_expect_success 'checkout completes ref names' '
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'git -C <path> checkout uses the right repo' '
|
||||
test_completion "git -C subdir -C subsubdir -C .. -C ../otherrepo checkout b" <<-\EOF
|
||||
branch-in-other Z
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'show completes all refs' '
|
||||
test_completion "git show m" <<-\EOF
|
||||
master Z
|
||||
@@ -517,7 +944,7 @@ test_expect_success '<ref>: completes paths' '
|
||||
|
||||
test_expect_success 'complete tree filename with spaces' '
|
||||
echo content >"name with spaces" &&
|
||||
git add . &&
|
||||
git add "name with spaces" &&
|
||||
git commit -m spaces &&
|
||||
test_completion "git show HEAD:nam" <<-\EOF
|
||||
name with spaces Z
|
||||
@@ -526,7 +953,7 @@ test_expect_success 'complete tree filename with spaces' '
|
||||
|
||||
test_expect_success 'complete tree filename with metacharacters' '
|
||||
echo content >"name with \${meta}" &&
|
||||
git add . &&
|
||||
git add "name with \${meta}" &&
|
||||
git commit -m meta &&
|
||||
test_completion "git show HEAD:nam" <<-\EOF
|
||||
name with ${meta} Z
|
||||
|
||||
Reference in New Issue
Block a user