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:

committed by
Junio C Hamano

parent
3b9e3c2ced
commit
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);
|
||||
|
||||
ret = make_remote(name, 0);
|
||||
if (valid_remote_nick(name)) {
|
||||
if (valid_remote_nick(name) && have_git_dir()) {
|
||||
if (!valid_remote(ret))
|
||||
read_remotes_file(ret);
|
||||
if (!valid_remote(ret))
|
||||
|
Reference in New Issue
Block a user