rebase: Allow merge strategies to be used when rebasing
[gitweb.git] / name-rev.c
index 65333d4166da845d8594d2dc397c0026eebe2421..c29b93ea7199643885cd74148d03db7d1bbb533b 100644 (file)
@@ -19,7 +19,7 @@ static void name_rev(struct commit *commit,
                const char *tip_name, int merge_traversals, int generation,
                int deref)
 {
-       struct rev_name *name = (struct rev_name *)commit->object.util;
+       struct rev_name *name = (struct rev_name *)commit->util;
        struct commit_list *parents;
        int parent_number = 1;
 
@@ -41,7 +41,7 @@ static void name_rev(struct commit *commit,
 
        if (name == NULL) {
                name = xmalloc(sizeof(rev_name));
-               commit->object.util = name;
+               commit->util = name;
                goto copy_data;
        } else if (name->merge_traversals > merge_traversals ||
                        (name->merge_traversals == merge_traversals &&
@@ -84,19 +84,20 @@ static int name_ref(const char *path, const unsigned char *sha1)
        if (tags_only && strncmp(path, "refs/tags/", 10))
                return 0;
 
-       while (o && o->type == tag_type) {
+       while (o && o->type == TYPE_TAG) {
                struct tag *t = (struct tag *) o;
                if (!t->tagged)
                        break; /* broken repository */
                o = parse_object(t->tagged->sha1);
                deref = 1;
        }
-       if (o && o->type == commit_type) {
+       if (o && o->type == TYPE_COMMIT) {
                struct commit *commit = (struct commit *)o;
-               const char *p;
 
-               while ((p = strchr(path, '/')))
-                       path = p+1;
+               if (!strncmp(path, "refs/heads/", 11))
+                       path = path + 11;
+               else if (!strncmp(path, "refs/", 5))
+                       path = path + 5;
 
                name_rev(commit, strdup(path), 0, 0, deref);
        }
@@ -107,7 +108,13 @@ static int name_ref(const char *path, const unsigned char *sha1)
 static const char* get_rev_name(struct object *o)
 {
        static char buffer[1024];
-       struct rev_name *n = (struct rev_name *)o->util;
+       struct rev_name *n;
+       struct commit *c;
+
+       if (o->type != TYPE_COMMIT)
+               return "undefined";
+       c = (struct commit *) o;
+       n = c->util;
        if (!n)
                return "undefined";
 
@@ -126,6 +133,7 @@ int main(int argc, char **argv)
        int as_is = 0, all = 0, transform_stdin = 0;
 
        setup_git_directory();
+       git_config(git_default_config);
 
        if (argc < 2)
                usage(name_rev_usage);
@@ -165,7 +173,7 @@ int main(int argc, char **argv)
                }
 
                o = deref_tag(parse_object(sha1), *argv, 0);
-               if (!o || o->type != commit_type) {
+               if (!o || o->type != TYPE_COMMIT) {
                        fprintf(stderr, "Could not get commit for %s. Skipping.\n",
                                        *argv);
                        continue;
@@ -231,9 +239,10 @@ int main(int argc, char **argv)
        } else if (all) {
                int i;
 
-               for (i = 0; i < nr_objs; i++)
-                       printf("%s %s\n", sha1_to_hex(objs[i]->sha1),
-                                       get_rev_name(objs[i]));
+               for (i = 0; i < obj_allocs; i++)
+                       if (objs[i])
+                               printf("%s %s\n", sha1_to_hex(objs[i]->sha1),
+                                               get_rev_name(objs[i]));
        } else
                for ( ; revs; revs = revs->next)
                        printf("%s %s\n", revs->name, get_rev_name(revs->item));