diff options
author | Jonathan Tan <jonathantanmy@google.com> | 2021-02-05 12:48:49 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-02-05 13:49:55 -0800 |
commit | 4f37d45706514a4b3d0259d26f719678a0cf3521 (patch) | |
tree | 2b38899f23f3e5e88b72fba0f093e8fb76255089 /builtin | |
parent | connect, transport: encapsulate arg in struct (diff) | |
download | tgif-4f37d45706514a4b3d0259d26f719678a0cf3521.tar.xz |
clone: respect remote unborn HEAD
Teach Git to use the "unborn" feature introduced in a previous patch as
follows: Git will always send the "unborn" argument if it is supported
by the server. During "git clone", if cloning an empty repository, Git
will use the new information to determine the local branch to create. In
all other cases, Git will ignore it.
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/clone.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/builtin/clone.c b/builtin/clone.c index 211d4f54b0..09dcd97a2e 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -1330,8 +1330,19 @@ int cmd_clone(int argc, const char **argv, const char *prefix) remote_head = NULL; option_no_checkout = 1; if (!option_bare) { - const char *branch = git_default_branch_name(); - 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(); + ref = xstrfmt("refs/heads/%s", branch); + } install_branch_config(0, branch, remote_name, ref); free(ref); @@ -1385,5 +1396,6 @@ cleanup: junk_mode = JUNK_LEAVE_ALL; strvec_clear(&transport_ls_refs_options.ref_prefixes); + free(transport_ls_refs_options.unborn_head_target); return err; } |