This actually implements the protocol extension to receive the HEAD symref information that is hidden after the server capabilities list. Nobody uses the information yet, though. Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- connect.c | 27 +++++++++++++++++++++++++-- 1 files changed, 25 insertions(+), 2 deletions(-) diff --git a/connect.c b/connect.c index 114d691..aa4757a 100644 --- a/connect.c +++ b/connect.c @@ -53,7 +53,7 @@ static void add_extra_have(struct extra_have_objects *extra, unsigned char *sha1 * NUL". "len" is the remaining number of bytes. The caller knows * that the original packet contains more information than that. */ -static void read_extra_info(char *line, int len) +static void read_extra_info(char *line, int len, char **hpa) { /* * The first such "extra" piece of information is the list of @@ -64,6 +64,20 @@ static void read_extra_info(char *line, int len) free(server_capabilities); server_capabilities = xmalloc(infolen); memcpy(server_capabilities, line, infolen); + if (infolen == len) + return; + /* + * The uploader can optionally tell us where the HEAD pointer + * points at after that. + */ + line += infolen; + len -= infolen; + + infolen = strlen(line) + 1; + + free(*hpa); + *hpa = xmalloc(infolen); + memcpy(*hpa, line, infolen); } /* @@ -74,6 +88,9 @@ struct ref **get_remote_heads(int in, struct ref **list, unsigned int flags, struct extra_have_objects *extra_have) { + struct ref **ref_list = list; + char *head_points_at = NULL; + *list = NULL; for (;;) { struct ref *ref; @@ -97,7 +114,8 @@ struct ref **get_remote_heads(int in, struct ref **list, name_len = strlen(name); if (len != name_len + 41) - read_extra_info(name + name_len + 1, len - (name_len + 41)); + read_extra_info(name + name_len + 1, len - (name_len + 41), + &head_points_at); if (extra_have && name_len == 5 && !memcmp(".have", name, 5)) { @@ -114,6 +132,11 @@ struct ref **get_remote_heads(int in, struct ref **list, *list = ref; list = &ref->next; } + if (head_points_at) { + struct ref *head = find_ref_by_name(*ref_list, "HEAD"); + if (head) + head->symref = head_points_at; + } return list; } -- 1.6.0.4.864.g0f47a -- 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