summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Jeff King <peff@peff.net>2016-03-05 17:11:57 -0500
committerLibravatar Junio C Hamano <gitster@pobox.com>2016-03-06 17:18:40 -0800
commitf2f12d169aa607604edbd942675026174f061e3f (patch)
tree642c18e4cc6cc079b4557daa4c9ceccde6e9d4e7
parentsetup: set startup_info->have_repository more reliably (diff)
downloadtgif-f2f12d169aa607604edbd942675026174f061e3f.tar.xz
remote: don't resolve HEAD in non-repository
The remote-config code wants to look at HEAD to mark the current branch specially. But if we are not in a repository (e.g., running "git archive --remote"), this makes no sense; there is no HEAD to look at, and we have no current branch. This doesn't really cause any bugs in practice (if you are not in a repo, you probably don't have a .git/HEAD file), but we should be more careful about triggering the refs code at all in a non-repo. As we grow new ref backends, we would not even know which backend to use. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--remote.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/remote.c b/remote.c
index fc02698587..28fd676acb 100644
--- a/remote.c
+++ b/remote.c
@@ -455,7 +455,6 @@ static void read_config(void)
{
static int loaded;
struct object_id oid;
- const char *head_ref;
int flag;
if (loaded)
@@ -463,10 +462,12 @@ static void read_config(void)
loaded = 1;
current_branch = NULL;
- head_ref = resolve_ref_unsafe("HEAD", 0, oid.hash, &flag);
- if (head_ref && (flag & REF_ISSYMREF) &&
- skip_prefix(head_ref, "refs/heads/", &head_ref)) {
- current_branch = make_branch(head_ref, 0);
+ if (startup_info->have_repository) {
+ const char *head_ref = resolve_ref_unsafe("HEAD", 0, oid.hash, &flag);
+ if (head_ref && (flag & REF_ISSYMREF) &&
+ skip_prefix(head_ref, "refs/heads/", &head_ref)) {
+ current_branch = make_branch(head_ref, 0);
+ }
}
git_config(handle_config, NULL);
alias_all_urls();