Allow merging bare trees in merge-recursive.
authorShawn O. Pearce <spearce@spearce.org>
Thu, 28 Dec 2006 07:35:24 +0000 (02:35 -0500)
committerJunio C Hamano <junkio@cox.net>
Fri, 29 Dec 2006 03:06:16 +0000 (19:06 -0800)
To support wider use cases, such as from within `git am -3`, the
merge-recursive utility needs to accept not just commit-ish but
also tree-ish as arguments on its command line.

If given a tree-ish then merge-recursive will create a virtual commit
wrapping it, with the subject of the commit set to the best name we
can derive for that tree, which is either the command line string
(probably the SHA1), or whatever string appears in GITHEAD_*.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
merge-recursive.c
index 1c84ed78f2449a1d1ac078700ec7eeccbee45ab2..bac16f577c95937a76738dce5d659cff71bd03ab 100644 (file)
@@ -1268,6 +1268,9 @@ static struct commit *get_ref(const char *ref)
        if (get_sha1(ref, sha1))
                die("Could not resolve ref '%s'", ref);
        object = deref_tag(parse_object(sha1), ref, strlen(ref));
+       if (object->type == OBJ_TREE)
+               return make_virtual_commit((struct tree*)object,
+                       better_branch_name(ref));
        if (object->type != OBJ_COMMIT)
                return NULL;
        if (parse_commit((struct commit *)object))