consider only branches in guess_remote_head
authorJeff King <peff@peff.net>
Fri, 3 Jun 2011 05:11:13 +0000 (01:11 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 6 Jun 2011 00:53:10 +0000 (17:53 -0700)
commit61adfd30974a6c49b3d07275e9f2c9fc44bf779c
treefa3479c921c9e30ae8af63586f088e2b9ff7850b
parent3b368546a0da81aa44d8c46eb40a7e7b955cab65
consider only branches in guess_remote_head

The guess_remote_head function tries to figure out where a
remote's HEAD is pointing by comparing the sha1 of the
remote's HEAD with the sha1 of various refs found on the
remote. However, we were too liberal in matching refs, and
would match tags or remote tracking branches, even though
these things could not possibly be referenced by the HEAD
symbolic ref (since git will detach when checking them out).

As a result, a clone of a remote repository with a detached
HEAD might write "refs/tags/*" into our local HEAD, which is
bogus. The resulting HEAD should be detached.

The other related code path is remote.c's get_head_names()
(which is used for, among other things, "set-head -a"). This was
not affected, however, as that function feeds only refs from
refs/heads to guess_remote_head.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
remote.c
t/t5707-clone-detached.sh