On Thu, Apr 4, 2013 at 10:25 AM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > John Koleszar <jkoleszar@xxxxxxxxxx> writes: > >> @@ -402,7 +404,8 @@ static void get_info_refs(char *arg) >> >> } else { >> select_getanyfile(); >> - for_each_ref(show_text_ref, &buf); >> + head_ref_namespaced(show_text_ref, &buf); >> + for_each_namespaced_ref(show_text_ref, &buf); >> send_strbuf("text/plain", &buf); >> } > > Whether we are namespaced or not, we used to do for_each_ref() here, > not advertising the HEAD (outside refs/ hierarchy), but we now do, > and as the first element in the output. > > Am I reading the patch correctly? > > Is that an unrelated but useful bugfix even for people who do not > use server namespaces? > Actually, I think this line may be buggy. Hold off submitting if you haven't already. Including the HEAD ref in the advertisement from /info/refs ends up duplicating it, since the dumb client unconditionally fetches the file /HEAD to use as the that ref. I think the right thing to do is generate the correct /HEAD using head_ref_namespaced(), rather than returning the bare file $GIT_DIR/HEAD, but I'm not 100% sure how HEAD and namespaces interact, since I haven't been able to produce a repo with a different HEAD in a namespace. Can you verify this approach? $ GIT_SMART_HTTP=0 ./git ls-remote http://localhost:8080/ | grep HEAD bd9cd9a1859aa464b3092f2023b3a4040166572d HEAD bd9cd9a1859aa464b3092f2023b3a4040166572d HEAD Generates these requests (ignore the errors): 2013/04/04 18:18:49 /info/refs 2013/04/04 18:18:49 http: invalid Content-Length of "3285\r\n" sent 2013/04/04 18:18:49 /HEAD 2013/04/04 18:18:49 http: invalid Content-Length of "41\r\n" sent I didn't catch this before, since the smart protocol includes HEAD in its response, and I was trying to make the two match. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html