Merge branch 'md/interix'
[gitweb.git] / builtin / merge.c
index 2dba3b9901cbdca9aee279339ecd3537e15e39da..c24a7be020d10540581b41c21a2ecf83df5563d9 100644 (file)
@@ -234,6 +234,24 @@ static void save_state(void)
                die("not a valid object: %s", buffer.buf);
 }
 
+static void read_empty(unsigned const char *sha1, int verbose)
+{
+       int i = 0;
+       const char *args[7];
+
+       args[i++] = "read-tree";
+       if (verbose)
+               args[i++] = "-v";
+       args[i++] = "-m";
+       args[i++] = "-u";
+       args[i++] = EMPTY_TREE_SHA1_HEX;
+       args[i++] = sha1_to_hex(sha1);
+       args[i] = NULL;
+
+       if (run_command_v_opt(args, RUN_GIT_CMD))
+               die("read-tree failed");
+}
+
 static void reset_hard(unsigned const char *sha1, int verbose)
 {
        int i = 0;
@@ -403,7 +421,7 @@ static void merge_name(const char *remote, struct strbuf *msg)
                        goto cleanup;
                }
                if (!prefixcmp(found_ref, "refs/remotes/")) {
-                       strbuf_addf(msg, "%s\t\tremote branch '%s' of .\n",
+                       strbuf_addf(msg, "%s\t\tremote-tracking branch '%s' of .\n",
                                    sha1_to_hex(branch_head), remote);
                        goto cleanup;
                }
@@ -639,25 +657,9 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
 
                o.renormalize = option_renormalize;
 
-               /*
-                * NEEDSWORK: merge with table in builtin/merge-recursive
-                */
-               for (x = 0; x < xopts_nr; x++) {
-                       if (!strcmp(xopts[x], "ours"))
-                               o.recursive_variant = MERGE_RECURSIVE_OURS;
-                       else if (!strcmp(xopts[x], "theirs"))
-                               o.recursive_variant = MERGE_RECURSIVE_THEIRS;
-                       else if (!strcmp(xopts[x], "subtree"))
-                               o.subtree_shift = "";
-                       else if (!prefixcmp(xopts[x], "subtree="))
-                               o.subtree_shift = xopts[x]+8;
-                       else if (!strcmp(xopts[x], "renormalize"))
-                               o.renormalize = 1;
-                       else if (!strcmp(xopts[x], "no-renormalize"))
-                               o.renormalize = 0;
-                       else
+               for (x = 0; x < xopts_nr; x++)
+                       if (parse_merge_opt(&o, xopts[x]))
                                die("Unknown option for merge-recursive: -X%s", xopts[x]);
-               }
 
                o.branch1 = head_arg;
                o.branch2 = remoteheads->item->util;
@@ -1001,7 +1003,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
                        die("%s - not something we can merge", argv[0]);
                update_ref("initial pull", "HEAD", remote_head->sha1, NULL, 0,
                                DIE_ON_ERR);
-               reset_hard(remote_head->sha1, 0);
+               read_empty(remote_head->sha1, 0);
                return 0;
        } else {
                struct strbuf merge_names = STRBUF_INIT;