clone: factor out HEAD update code
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Mon, 16 Jan 2012 09:46:10 +0000 (16:46 +0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 17 Jan 2012 00:26:25 +0000 (16:26 -0800)
While at it, update the comment at "if (remote_head)"

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/clone.c

index 98e354242b7eaa38ecbe86f3913a5d55037f60a4..3b68014998a8c73e028f746f1ce69d04d1d76b25 100644 (file)
@@ -486,6 +486,29 @@ static void write_followtags(const struct ref *refs, const char *msg)
        }
 }
 
+static void update_head(const struct ref *our, const struct ref *remote,
+                       const char *msg)
+{
+       if (our) {
+               /* Local default branch link */
+               create_symref("HEAD", our->name, NULL);
+               if (!option_bare) {
+                       const char *head = skip_prefix(our->name, "refs/heads/");
+                       update_ref(msg, "HEAD", our->old_sha1, NULL, 0, DIE_ON_ERR);
+                       install_branch_config(0, head, option_origin, our->name);
+               }
+       } else if (remote) {
+               /*
+                * We know remote HEAD points to a non-branch, or
+                * HEAD points to a branch but we don't know which one, or
+                * we asked for a specific branch but it did not exist.
+                * Detach HEAD in all these cases.
+                */
+               update_ref(msg, "HEAD", remote->old_sha1,
+                          NULL, REF_NODEREF, DIE_ON_ERR);
+       }
+}
+
 static int checkout(void)
 {
        unsigned char sha1[20];
@@ -807,23 +830,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
                              reflog_msg.buf);
        }
 
-       if (our_head_points_at) {
-               /* Local default branch link */
-               create_symref("HEAD", our_head_points_at->name, NULL);
-               if (!option_bare) {
-                       const char *head = skip_prefix(our_head_points_at->name,
-                                                      "refs/heads/");
-                       update_ref(reflog_msg.buf, "HEAD",
-                                  our_head_points_at->old_sha1,
-                                  NULL, 0, DIE_ON_ERR);
-                       install_branch_config(0, head, option_origin,
-                                             our_head_points_at->name);
-               }
-       } else if (remote_head) {
-               /* Source had detached HEAD pointing somewhere. */
-               update_ref(reflog_msg.buf, "HEAD", remote_head->old_sha1,
-                          NULL, REF_NODEREF, DIE_ON_ERR);
-       }
+       update_head(our_head_points_at, remote_head, reflog_msg.buf);
 
        if (transport) {
                transport_unlock_pack(transport);