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>

Jeff King committed Mar 5, 2016 at 17:11 UTC f2f12d169aa607604edbd942675026174f061e3f
1 file changed +6 -5
remote.c
+6 -5
@@ -455,7 +455,6 @@ static void read_config(void)
455 {
456 static int loaded;
457 struct object_id oid;
458 - const char *head_ref;
458 int flag;
459
460 if (loaded)
@@ -463,10 +462,12 @@ static void read_config(void)
462 loaded = 1;
463
464 current_branch = NULL;
466 - head_ref = resolve_ref_unsafe("HEAD", 0, oid.hash, &flag);
467 - if (head_ref && (flag & REF_ISSYMREF) &&
468 - skip_prefix(head_ref, "refs/heads/", &head_ref)) {
469 - current_branch = make_branch(head_ref, 0);
465 + if (startup_info->have_repository) {
466 + const char *head_ref = resolve_ref_unsafe("HEAD", 0, oid.hash, &flag);
467 + if (head_ref && (flag & REF_ISSYMREF) &&
468 + skip_prefix(head_ref, "refs/heads/", &head_ref)) {
469 + current_branch = make_branch(head_ref, 0);
470 + }
471 }
472 git_config(handle_config, NULL);
473 alias_all_urls();