Code

Merge branch 'maint'
[git.git] / builtin-clone.c
index c590d4a179684cd33b0e22dcd823a16f8b3f26e7..f1a1a0c36591d1936088a180e3c0a8ca5e7b0757 100644 (file)
@@ -192,15 +192,15 @@ static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest)
 
        dir = opendir(src->buf);
        if (!dir)
-               die("failed to open %s\n", src->buf);
+               die("failed to open %s", src->buf);
 
        if (mkdir(dest->buf, 0777)) {
                if (errno != EEXIST)
-                       die("failed to create directory %s\n", dest->buf);
+                       die("failed to create directory %s", dest->buf);
                else if (stat(dest->buf, &buf))
-                       die("failed to stat %s\n", dest->buf);
+                       die("failed to stat %s", dest->buf);
                else if (!S_ISDIR(buf.st_mode))
-                       die("%s exists and is not a directory\n", dest->buf);
+                       die("%s exists and is not a directory", dest->buf);
        }
 
        strbuf_addch(src, '/');
@@ -224,16 +224,16 @@ static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest)
                }
 
                if (unlink(dest->buf) && errno != ENOENT)
-                       die("failed to unlink %s\n", dest->buf);
+                       die("failed to unlink %s", dest->buf);
                if (!option_no_hardlinks) {
                        if (!link(src->buf, dest->buf))
                                continue;
                        if (option_local)
-                               die("failed to create link %s\n", dest->buf);
+                               die("failed to create link %s", dest->buf);
                        option_no_hardlinks = 1;
                }
                if (copy_file(dest->buf, src->buf, 0666))
-                       die("failed to copy file to %s\n", dest->buf);
+                       die("failed to copy file to %s", dest->buf);
        }
        closedir(dir);
 }
@@ -358,8 +358,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        const char *repo_name, *repo, *work_tree, *git_dir;
        char *path, *dir;
        const struct ref *refs, *head_points_at, *remote_head, *mapped_refs;
-       char branch_top[256], key[256], value[256];
-       struct strbuf reflog_msg = STRBUF_INIT;
+       struct strbuf key = STRBUF_INIT, value = STRBUF_INIT;
+       struct strbuf branch_top = STRBUF_INIT, reflog_msg = STRBUF_INIT;
        struct transport *transport = NULL;
        char *src_ref_prefix = "refs/heads/";
 
@@ -463,35 +463,36 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        if (option_bare) {
                if (option_mirror)
                        src_ref_prefix = "refs/";
-               strcpy(branch_top, src_ref_prefix);
+               strbuf_addstr(&branch_top, src_ref_prefix);
 
                git_config_set("core.bare", "true");
        } else {
-               snprintf(branch_top, sizeof(branch_top),
-                        "refs/remotes/%s/", option_origin);
+               strbuf_addf(&branch_top, "refs/remotes/%s/", option_origin);
        }
 
        if (option_mirror || !option_bare) {
                /* Configure the remote */
                if (option_mirror) {
-                       snprintf(key, sizeof(key),
-                                       "remote.%s.mirror", option_origin);
-                       git_config_set(key, "true");
+                       strbuf_addf(&key, "remote.%s.mirror", option_origin);
+                       git_config_set(key.buf, "true");
+                       strbuf_reset(&key);
                }
 
-               snprintf(key, sizeof(key), "remote.%s.url", option_origin);
-               git_config_set(key, repo);
+               strbuf_addf(&key, "remote.%s.url", option_origin);
+               git_config_set(key.buf, repo);
+                       strbuf_reset(&key);
 
-               snprintf(key, sizeof(key), "remote.%s.fetch", option_origin);
-               snprintf(value, sizeof(value),
-                               "+%s*:%s*", src_ref_prefix, branch_top);
-               git_config_set_multivar(key, value, "^$", 0);
+               strbuf_addf(&key, "remote.%s.fetch", option_origin);
+               strbuf_addf(&value, "+%s*:%s*", src_ref_prefix, branch_top.buf);
+               git_config_set_multivar(key.buf, value.buf, "^$", 0);
+               strbuf_reset(&key);
+               strbuf_reset(&value);
        }
 
        refspec.force = 0;
        refspec.pattern = 1;
        refspec.src = src_ref_prefix;
-       refspec.dst = branch_top;
+       refspec.dst = branch_top.buf;
 
        if (path && !is_bundle)
                refs = clone_local(path, git_dir);
@@ -545,7 +546,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
                                   head_points_at->old_sha1,
                                   NULL, 0, DIE_ON_ERR);
 
-                       strbuf_addstr(&head_ref, branch_top);
+                       strbuf_addstr(&head_ref, branch_top.buf);
                        strbuf_addstr(&head_ref, "HEAD");
 
                        /* Remote branch link */
@@ -553,10 +554,11 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
                                      head_points_at->peer_ref->name,
                                      reflog_msg.buf);
 
-                       snprintf(key, sizeof(key), "branch.%s.remote", head);
-                       git_config_set(key, option_origin);
-                       snprintf(key, sizeof(key), "branch.%s.merge", head);
-                       git_config_set(key, head_points_at->name);
+                       strbuf_addf(&key, "branch.%s.remote", head);
+                       git_config_set(key.buf, option_origin);
+                       strbuf_reset(&key);
+                       strbuf_addf(&key, "branch.%s.merge", head);
+                       git_config_set(key.buf, head_points_at->name);
                }
        } else if (remote_head) {
                /* Source had detached HEAD pointing somewhere. */
@@ -606,6 +608,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
        }
 
        strbuf_release(&reflog_msg);
+       strbuf_release(&branch_top);
+       strbuf_release(&key);
+       strbuf_release(&value);
        junk_pid = 0;
        return 0;
 }