Merge branch 'lt/revision-walker'
authorJunio C Hamano <gitster@pobox.com>
Thu, 21 Feb 2008 00:13:24 +0000 (16:13 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 21 Feb 2008 00:13:24 +0000 (16:13 -0800)
* lt/revision-walker:
Add "--show-all" revision walker flag for debugging

1  2 
builtin-rev-list.c
revision.c
diff --combined builtin-rev-list.c
index 9426081dae17e0a3ce536c8b4ffc038b32eda8a7,716311616d70260146ae4783d2f718af323a1ed1..6f7d5f8214e54c24983e9c8c295edfefba54fb2b
@@@ -60,6 -60,8 +60,8 @@@ static void show_commit(struct commit *
                fputs(header_prefix, stdout);
        if (commit->object.flags & BOUNDARY)
                putchar('-');
+       else if (commit->object.flags & UNINTERESTING)
+               putchar('^');
        else if (revs.left_right) {
                if (commit->object.flags & SYMMETRIC_LEFT)
                        putchar('<');
@@@ -84,7 -86,7 +86,7 @@@
        else
                putchar('\n');
  
-       if (revs.verbose_header) {
+       if (revs.verbose_header && commit->buffer) {
                struct strbuf buf;
                strbuf_init(&buf, 0);
                pretty_print_commit(revs.commit_format, commit,
@@@ -609,8 -611,7 +611,8 @@@ int cmd_rev_list(int argc, const char *
        if (bisect_list)
                revs.limited = 1;
  
 -      prepare_revision_walk(&revs);
 +      if (prepare_revision_walk(&revs))
 +              die("revision walk setup failed");
        if (revs.tree_objects)
                mark_edges_uninteresting(revs.commits, &revs, show_edge);
  
diff --combined revision.c
index b1aebf8999b5a9ba80cba659a28f9152c05da85c,76faf4b0094f6da1c3cd1f7b3e03b5a2fed29cee..d3e8658104b63886bbade78366466eb4828efc28
@@@ -46,8 -46,6 +46,8 @@@ void add_object(struct object *obj
  
  static void mark_blob_uninteresting(struct blob *blob)
  {
 +      if (!blob)
 +              return;
        if (blob->object.flags & UNINTERESTING)
                return;
        blob->object.flags |= UNINTERESTING;
@@@ -59,8 -57,6 +59,8 @@@ void mark_tree_uninteresting(struct tre
        struct name_entry entry;
        struct object *obj = &tree->object;
  
 +      if (!tree)
 +              return;
        if (obj->flags & UNINTERESTING)
                return;
        obj->flags |= UNINTERESTING;
@@@ -177,8 -173,6 +177,8 @@@ static struct commit *handle_commit(str
                struct tag *tag = (struct tag *) object;
                if (revs->tag_objects && !(flags & UNINTERESTING))
                        add_pending_object(revs, object, tag->tag);
 +              if (!tag->tagged)
 +                      die("bad tag");
                object = parse_object(tag->tagged->sha1);
                if (!object)
                        die("bad object %s", sha1_to_hex(tag->tagged->sha1));
@@@ -564,6 -558,12 +564,12 @@@ static void cherry_pick_list(struct com
        free_patch_ids(&ids);
  }
  
+ static void add_to_list(struct commit_list **p, struct commit *commit, struct commit_list *n)
+ {
+       p = &commit_list_insert(commit, p)->next;
+       *p = n;
+ }
  static int limit_list(struct rev_info *revs)
  {
        struct commit_list *list = revs->commits;
                        return -1;
                if (obj->flags & UNINTERESTING) {
                        mark_parents_uninteresting(commit);
-                       if (everybody_uninteresting(list))
+                       if (everybody_uninteresting(list)) {
+                               if (revs->show_all)
+                                       add_to_list(p, commit, list);
                                break;
-                       continue;
+                       }
+                       if (!revs->show_all)
+                               continue;
                }
                if (revs->min_age != -1 && (commit->date > revs->min_age))
                        continue;
@@@ -691,8 -695,6 +701,8 @@@ static int add_parents_only(struct rev_
                it = get_reference(revs, arg, sha1, 0);
                if (it->type != OBJ_TAG)
                        break;
 +              if (!((struct tag*)it)->tagged)
 +                      return 0;
                hashcpy(sha1, ((struct tag*)it)->tagged->sha1);
        }
        if (it->type != OBJ_COMMIT)
@@@ -1063,6 -1065,10 +1073,10 @@@ int setup_revisions(int argc, const cha
                                revs->dense = 0;
                                continue;
                        }
+                       if (!strcmp(arg, "--show-all")) {
+                               revs->show_all = 1;
+                               continue;
+                       }
                        if (!strcmp(arg, "--remove-empty")) {
                                revs->remove_empty_trees = 1;
                                continue;
@@@ -1446,6 -1452,8 +1460,8 @@@ enum commit_action simplify_commit(stru
                return commit_ignore;
        if (revs->unpacked && has_sha1_pack(commit->object.sha1, revs->ignore_packed))
                return commit_ignore;
+       if (revs->show_all)
+               return commit_show;
        if (commit->object.flags & UNINTERESTING)
                return commit_ignore;
        if (revs->min_age != -1 && (commit->date > revs->min_age))