Documentation/git-svn: clarify dcommit, rebase vs pull/merge
[gitweb.git] / merge-recursive.c
index ca4f19e34d4216fed7c8110ba8f75585c69f92c7..bac16f577c95937a76738dce5d659cff71bd03ab 100644 (file)
@@ -1248,6 +1248,18 @@ static int merge(struct commit *h1,
        return clean;
 }
 
+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;
+}
+
 static struct commit *get_ref(const char *ref)
 {
        unsigned char sha1[20];
@@ -1256,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))
@@ -1263,18 +1278,6 @@ 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];