From: Junio C Hamano Date: Thu, 18 Feb 2021 01:21:40 +0000 (-0800) Subject: Merge branch 'jt/clone-unborn-head' X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=69571dfe219f48614e0e0ae7e28efae0be297764;p=git.git Merge branch 'jt/clone-unborn-head' "git clone" tries to locally check out the branch pointed at by HEAD of the remote repository after it is done, but the protocol did not convey the information necessary to do so when copying an empty repository. The protocol v2 learned how to do so. * jt/clone-unborn-head: clone: respect remote unborn HEAD connect, transport: encapsulate arg in struct ls-refs: report unborn targets of symrefs --- 69571dfe219f48614e0e0ae7e28efae0be297764 diff --cc builtin/clone.c index e335734b4c,09dcd97a2e..51e844a2de --- a/builtin/clone.c +++ b/builtin/clone.c @@@ -1326,8 -1330,19 +1330,19 @@@ int cmd_clone(int argc, const char **ar remote_head = NULL; option_no_checkout = 1; if (!option_bare) { - const char *branch = git_default_branch_name(0); - char *ref = xstrfmt("refs/heads/%s", branch); + const char *branch; + char *ref; + + if (transport_ls_refs_options.unborn_head_target && + skip_prefix(transport_ls_refs_options.unborn_head_target, + "refs/heads/", &branch)) { + ref = transport_ls_refs_options.unborn_head_target; + transport_ls_refs_options.unborn_head_target = NULL; + create_symref("HEAD", ref, reflog_msg.buf); + } else { - branch = git_default_branch_name(); ++ branch = git_default_branch_name(0); + ref = xstrfmt("refs/heads/%s", branch); + } install_branch_config(0, branch, remote_name, ref); free(ref); diff --cc ls-refs.c index 5ff5473869,32deb7be44..88f6c3f60d --- a/ls-refs.c +++ b/ls-refs.c @@@ -61,9 -98,9 +98,9 @@@ static int send_ref(const char *refname strip_namespace(symref_target)); } - if (data->peel) { + if (data->peel && oid) { struct object_id peeled; - if (!peel_ref(refname, &peeled)) + if (!peel_iterated_oid(oid, &peeled)) strbuf_addf(&refline, " peeled:%s", oid_to_hex(&peeled)); } @@@ -90,8 -144,8 +144,9 @@@ int ls_refs(struct repository *r, struc struct ls_refs_data data; memset(&data, 0, sizeof(data)); + strvec_init(&data.prefixes); + ensure_config_read(); git_config(ls_refs_config, NULL); while (packet_reader_read(request) == PACKET_READ_NORMAL) { @@@ -109,11 -165,8 +166,11 @@@ if (request->status != PACKET_READ_FLUSH) die(_("expected flush after ls-refs arguments")); - head_ref_namespaced(send_ref, &data); + send_possibly_unborn_head(&data); - for_each_namespaced_ref(send_ref, &data); + if (!data.prefixes.nr) + strvec_push(&data.prefixes, ""); + for_each_fullref_in_prefixes(get_git_namespace(), data.prefixes.v, + send_ref, &data, 0); packet_flush(1); strvec_clear(&data.prefixes); return 0;