aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2006-12-28 02:35:24 -0500
committerJunio C Hamano <junkio@cox.net>2006-12-28 19:06:16 -0800
commita970e84e8ad23a740e456fb4191ed61becef8989 (patch)
tree717944e62c7f690eff7becc181f544d2bb6bfcbd
parent7ba3c078c76cbda00f7ed2ac16a659d8f48631ba (diff)
downloadgit-a970e84e8ad23a740e456fb4191ed61becef8989.tar.gz
git-a970e84e8ad23a740e456fb4191ed61becef8989.tar.xz
Allow merging bare trees in merge-recursive.
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>
-rw-r--r--merge-recursive.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/merge-recursive.c b/merge-recursive.c
index 1c84ed78f..bac16f577 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -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))