Browse Source

Merge branch 'jk/clone-unborn-head-in-bare' into maint

"git clone" from a repository whose HEAD is unborn into a bare
repository didn't follow the branch name the other side used, which
is corrected.

* jk/clone-unborn-head-in-bare:
  clone: handle unborn branch in bare repos
maint
Junio C Hamano 3 years ago
parent
commit
c365967f21
  1. 33
      builtin/clone.c
  2. 13
      t/t5702-protocol-v2.sh

33
builtin/clone.c

@ -1340,6 +1340,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix) @@ -1340,6 +1340,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
our_head_points_at = remote_head_points_at;
}
else {
const char *branch;
char *ref;

if (option_branch)
die(_("Remote branch %s not found in upstream %s"),
option_branch, remote_name);
@ -1350,24 +1353,22 @@ int cmd_clone(int argc, const char **argv, const char *prefix) @@ -1350,24 +1353,22 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
remote_head_points_at = NULL;
remote_head = NULL;
option_no_checkout = 1;
if (!option_bare) {
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(0);
ref = xstrfmt("refs/heads/%s", branch);
}

install_branch_config(0, branch, remote_name, ref);
free(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(0);
ref = xstrfmt("refs/heads/%s", branch);
}

if (!option_bare)
install_branch_config(0, branch, remote_name, ref);

free(ref);
}

write_refspec_config(src_ref_prefix, our_head_points_at,

13
t/t5702-protocol-v2.sh

@ -237,6 +237,19 @@ test_expect_success '...but not if explicitly forbidden by config' ' @@ -237,6 +237,19 @@ test_expect_success '...but not if explicitly forbidden by config' '
! grep "refs/heads/mydefaultbranch" file_empty_child/.git/HEAD
'

test_expect_success 'bare clone propagates empty default branch' '
test_when_finished "rm -rf file_empty_parent file_empty_child.git" &&

GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
git -c init.defaultBranch=mydefaultbranch init file_empty_parent &&

GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
git -c init.defaultBranch=main -c protocol.version=2 \
clone --bare \
"file://$(pwd)/file_empty_parent" file_empty_child.git &&
grep "refs/heads/mydefaultbranch" file_empty_child.git/HEAD
'

test_expect_success 'fetch with file:// using protocol v2' '
test_when_finished "rm -f log" &&


Loading…
Cancel
Save