summaryrefslogtreecommitdiff
path: root/builtin/clone.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-08-01 22:00:35 (GMT)
committerJunio C Hamano <gitster@pobox.com>2011-08-01 22:00:35 (GMT)
commit8ab19bc5de68c8929317f8aa694709b9e4b72956 (patch)
tree2b17acb16a898e2f135f8e8e6565898c996569ab /builtin/clone.c
parentb04f826bf6e1b55e5bffdef5aedc83c202569f60 (diff)
parentc1921c184c464e313308e4ef58e28ca78a5b2127 (diff)
downloadgit-8ab19bc5de68c8929317f8aa694709b9e4b72956.zip
git-8ab19bc5de68c8929317f8aa694709b9e4b72956.tar.gz
git-8ab19bc5de68c8929317f8aa694709b9e4b72956.tar.bz2
Merge branch 'jk/clone-detached'
* jk/clone-detached: clone: always fetch remote HEAD make copy_ref globally available consider only branches in guess_remote_head t: add tests for cloning remotes with detached HEAD
Diffstat (limited to 'builtin/clone.c')
-rw-r--r--builtin/clone.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/builtin/clone.c b/builtin/clone.c
index a15784a..7663bc2 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -345,8 +345,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)
@@ -359,8 +360,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();