зеркало из https://github.com/microsoft/git.git
remote: avoid reading $GIT_DIR config in non-repo
The "git ls-remote" command can be run outside of a repository, but needs to look up configured remotes. The config code is smart enough to handle this case itself, but we also check the historical "branches" and "remotes" paths in $GIT_DIR. The git_path() function causes us to blindly look at ".git/remotes", even if we know we aren't in a git repository. For now, this is just an unlikely bug (you probably don't have such a file if you're not in a repository), but it will become more obvious once we mergeb1ef400ee
(setup_git_env: avoid blind fall-back to ".git", 2016-10-20): [now] $ git ls-remote fatal: No remote configured to list refs from. [withb1ef400ee
] $ git ls-remote fatal: BUG: setup_git_env called without repository We can fix this by skipping these sources entirely when we're outside of a repository. The test is a little more complex than the demonstration above. Rather than detect the correct behavior by parsing the error message, we can actually set up a case where the remote name we give is a valid repository, butb1ef400ee
would cause us to die in the configuration step. This test doesn't fail now, but it future-proofs us for theb1ef400ee
change. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
3b9e3c2ced
Коммит
4539c218c3
2
remote.c
2
remote.c
|
@ -689,7 +689,7 @@ static struct remote *remote_get_1(const char *name,
|
||||||
name = get_default(current_branch, &name_given);
|
name = get_default(current_branch, &name_given);
|
||||||
|
|
||||||
ret = make_remote(name, 0);
|
ret = make_remote(name, 0);
|
||||||
if (valid_remote_nick(name)) {
|
if (valid_remote_nick(name) && have_git_dir()) {
|
||||||
if (!valid_remote(ret))
|
if (!valid_remote(ret))
|
||||||
read_remotes_file(ret);
|
read_remotes_file(ret);
|
||||||
if (!valid_remote(ret))
|
if (!valid_remote(ret))
|
||||||
|
|
|
@ -248,4 +248,13 @@ test_expect_success PIPE,JGIT,GIT_DAEMON 'indicate no refs in standards-complian
|
||||||
test_expect_code 2 git ls-remote --exit-code git://localhost:$JGIT_DAEMON_PORT/empty.git
|
test_expect_code 2 git ls-remote --exit-code git://localhost:$JGIT_DAEMON_PORT/empty.git
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'ls-remote works outside repository' '
|
||||||
|
# It is important for this repo to be inside the nongit
|
||||||
|
# area, as we want a repo name that does not include
|
||||||
|
# slashes (because those inhibit some of our configuration
|
||||||
|
# lookups).
|
||||||
|
nongit git init --bare dst.git &&
|
||||||
|
nongit git ls-remote dst.git
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Загрузка…
Ссылка в новой задаче