Browse Source

Merge branch 'es/outside-repo-errmsg-hints'

An earlier update to show the location of working tree in the error
message did not consider the possibility that a git command may be
run in a bare repository, which has been corrected.

* es/outside-repo-errmsg-hints:
  prefix_path: show gitdir if worktree unavailable
maint
Junio C Hamano 5 years ago
parent
commit
e96327c947
  1. 8
      pathspec.c
  2. 8
      setup.c
  3. 38
      t/t6136-pathspec-in-bare.sh

8
pathspec.c

@ -438,9 +438,13 @@ static void init_pathspec_item(struct pathspec_item *item, unsigned flags, @@ -438,9 +438,13 @@ static void init_pathspec_item(struct pathspec_item *item, unsigned flags,
} else {
match = prefix_path_gently(prefix, prefixlen,
&prefixlen, copyfrom);
if (!match)
if (!match) {
const char *hint_path = get_git_work_tree();
if (!hint_path)
hint_path = get_git_dir();
die(_("%s: '%s' is outside repository at '%s'"), elt,
copyfrom, absolute_path(get_git_work_tree()));
copyfrom, absolute_path(hint_path));
}
}

item->match = match;

8
setup.c

@ -120,9 +120,13 @@ char *prefix_path_gently(const char *prefix, int len, @@ -120,9 +120,13 @@ char *prefix_path_gently(const char *prefix, int len,
char *prefix_path(const char *prefix, int len, const char *path)
{
char *r = prefix_path_gently(prefix, len, NULL, path);
if (!r)
if (!r) {
const char *hint_path = get_git_work_tree();
if (!hint_path)
hint_path = get_git_dir();
die(_("'%s' is outside repository at '%s'"), path,
absolute_path(get_git_work_tree()));
absolute_path(hint_path));
}
return r;
}


38
t/t6136-pathspec-in-bare.sh

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
#!/bin/sh

test_description='diagnosing out-of-scope pathspec'

. ./test-lib.sh

test_expect_success 'setup a bare and non-bare repository' '
test_commit file1 &&
git clone --bare . bare
'

test_expect_success 'log and ls-files in a bare repository' '
(
cd bare &&
test_must_fail git log -- .. >out 2>err &&
test_must_be_empty out &&
test_i18ngrep "outside repository" err &&

test_must_fail git ls-files -- .. >out 2>err &&
test_must_be_empty out &&
test_i18ngrep "outside repository" err
)
'

test_expect_success 'log and ls-files in .git directory' '
(
cd .git &&
test_must_fail git log -- .. >out 2>err &&
test_must_be_empty out &&
test_i18ngrep "outside repository" err &&

test_must_fail git ls-files -- .. >out 2>err &&
test_must_be_empty out &&
test_i18ngrep "outside repository" err
)
'

test_done
Loading…
Cancel
Save