From: Junio C Hamano Date: Thu, 21 Feb 2008 00:13:24 +0000 (-0800) Subject: Merge branch 'lt/revision-walker' X-Git-Tag: v1.5.5-rc0~181 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/428ae2eff0f7b68f8bbb1fd462aca5112614427d?ds=inline;hp=-c Merge branch 'lt/revision-walker' * lt/revision-walker: Add "--show-all" revision walker flag for debugging --- 428ae2eff0f7b68f8bbb1fd462aca5112614427d diff --combined builtin-rev-list.c index 9426081dae,716311616d..6f7d5f8214 --- a/builtin-rev-list.c +++ b/builtin-rev-list.c @@@ -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 b1aebf8999,76faf4b009..d3e8658104 --- a/revision.c +++ b/revision.c @@@ -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; @@@ -585,9 -585,13 +591,13 @@@ 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))