Code

xdl_merge(): fix a segmentation fault when refining conflicts
[git.git] / merge-recursive.c
index abebb950ab15225bc93678e51951088444fc5ed4..ca4f19e34d4216fed7c8110ba8f75585c69f92c7 100644 (file)
@@ -1263,6 +1263,18 @@ static struct commit *get_ref(const char *ref)
        return (struct commit *)object;
 }
 
+static const char *better_branch_name(const char *branch)
+{
+       static char githead_env[8 + 40 + 1];
+       char *name;
+
+       if (strlen(branch) != 40)
+               return branch;
+       sprintf(githead_env, "GITHEAD_%s", branch);
+       name = getenv(githead_env);
+       return name ? name : branch;
+}
+
 int main(int argc, char *argv[])
 {
        static const char *bases[2];
@@ -1293,11 +1305,14 @@ int main(int argc, char *argv[])
 
        branch1 = argv[++i];
        branch2 = argv[++i];
-       printf("Merging %s with %s\n", branch1, branch2);
 
        h1 = get_ref(branch1);
        h2 = get_ref(branch2);
 
+       branch1 = better_branch_name(branch1);
+       branch2 = better_branch_name(branch2);
+       printf("Merging %s with %s\n", branch1, branch2);
+
        if (bases_count == 1) {
                struct commit *ancestor = get_ref(bases[0]);
                clean = merge(h1, h2, branch1, branch2, 0, ancestor, &result);