summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/clone.c10
-rwxr-xr-xt/t5707-clone-detached.sh6
2 files changed, 10 insertions, 6 deletions
diff --git a/builtin/clone.c b/builtin/clone.c
index 2ee1fa9846..20496bdad0 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -340,8 +340,9 @@ static void remove_junk_on_signal(int signo)
static struct ref *wanted_peer_refs(const struct ref *refs,
struct refspec *refspec)
{
- struct ref *local_refs = NULL;
- struct ref **tail = &local_refs;
+ struct ref *head = copy_ref(find_ref_by_name(refs, "HEAD"));
+ struct ref *local_refs = head;
+ struct ref **tail = head ? &head->next : &local_refs;
get_fetch_map(refs, refspec, &tail, 0);
if (!option_mirror)
@@ -354,8 +355,11 @@ static void write_remote_refs(const struct ref *local_refs)
{
const struct ref *r;
- for (r = local_refs; r; r = r->next)
+ for (r = local_refs; r; r = r->next) {
+ if (!r->peer_ref)
+ continue;
add_extra_ref(r->peer_ref->name, r->old_sha1, 0);
+ }
pack_refs(PACK_REFS_ALL);
clear_extra_refs();
diff --git a/t/t5707-clone-detached.sh b/t/t5707-clone-detached.sh
index d63b1e390e..8b0d607df1 100755
--- a/t/t5707-clone-detached.sh
+++ b/t/t5707-clone-detached.sh
@@ -58,18 +58,18 @@ test_expect_success 'cloned HEAD is detached' '
head_is_detached detached-history
'
-test_expect_failure 'clone repo (orphan detached HEAD)' '
+test_expect_success 'clone repo (orphan detached HEAD)' '
git checkout master^0 &&
echo four >file &&
git commit -a -m four &&
git clone "file://$PWD" detached-orphan
'
-test_expect_failure 'cloned HEAD matches' '
+test_expect_success 'cloned HEAD matches' '
echo four >expect &&
git --git-dir=detached-orphan/.git log -1 --format=%s >actual &&
test_cmp expect actual
'
-test_expect_failure 'cloned HEAD is detached' '
+test_expect_success 'cloned HEAD is detached' '
head_is_detached detached-orphan
'