From: Linus Torvalds Date: Mon, 27 Feb 2006 16:54:36 +0000 (-0800) Subject: Splitting rev-list into revisions lib, end of beginning. X-Git-Tag: v1.3.0-rc1~57^2~7 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=d9a83684c473e04c61f0060c4926d20f8183f7b6;p=git.git Splitting rev-list into revisions lib, end of beginning. This makes the rewrite easier to validate in that revision flag parsing and warlking part are now all in rev_info structure. Signed-off-by: Junio C Hamano --- diff --git a/rev-list.c b/rev-list.c index 630626ec..2e80930b 100644 --- a/rev-list.c +++ b/rev-list.c @@ -41,7 +41,6 @@ static const char rev_list_usage[] = struct rev_info revs; -static int unpacked = 0; static int bisect_list = 0; static int verbose_header = 0; static int abbrev = DEFAULT_ABBREV; @@ -572,7 +571,7 @@ static struct commit_list *limit_list(struct commit_list *list) if (revs.max_age != -1 && (commit->date < revs.max_age)) obj->flags |= UNINTERESTING; - if (unpacked && has_sha1_pack(obj->sha1)) + if (revs.unpacked && has_sha1_pack(obj->sha1)) obj->flags |= UNINTERESTING; add_parents_to_list(commit, &list); if (obj->flags & UNINTERESTING) { @@ -595,7 +594,7 @@ static struct commit_list *limit_list(struct commit_list *list) int main(int argc, const char **argv) { struct commit_list *list; - int i, limited = 0; + int i; argc = setup_revisions(argc, argv, &revs); @@ -655,11 +654,6 @@ int main(int argc, const char **argv) bisect_list = 1; continue; } - if (!strcmp(arg, "--unpacked")) { - unpacked = 1; - limited = 1; - continue; - } if (!strcmp(arg, "--merge-order")) { merge_order = 1; continue; @@ -673,34 +667,25 @@ int main(int argc, const char **argv) } list = revs.commits; - if (list) - limited = 1; - - if (revs.topo_order) - limited = 1; if (!list && (!(revs.tag_objects||revs.tree_objects||revs.blob_objects) && !revs.pending_objects)) usage(rev_list_usage); - if (revs.paths) { - limited = 1; + if (revs.paths) diff_tree_setup_paths(revs.paths); - } - if (revs.max_age != -1 || revs.min_age != -1) - limited = 1; save_commit_buffer = verbose_header; track_object_refs = 0; if (!merge_order) { sort_by_date(&list); - if (list && !limited && revs.max_count == 1 && + if (list && !revs.limited && revs.max_count == 1 && !revs.tag_objects && !revs.tree_objects && !revs.blob_objects) { show_commit(list->item); return 0; } - if (limited) + if (revs.limited) list = limit_list(list); if (revs.topo_order) sort_in_topological_order(&list, revs.lifo); diff --git a/revision.c b/revision.c index d61410bc..67ff4de2 100644 --- a/revision.c +++ b/revision.c @@ -143,8 +143,10 @@ static struct commit *get_commit_reference(struct rev_info *revs, const char *na object->flags |= flags; if (parse_commit(commit) < 0) die("unable to parse commit %s", name); - if (flags & UNINTERESTING) + if (flags & UNINTERESTING) { mark_parents_uninteresting(commit); + revs->limited = 1; + } return commit; } @@ -255,10 +257,12 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs) } if (!strncmp(arg, "--max-age=", 10)) { revs->max_age = atoi(arg + 10); + revs->limited = 1; continue; } if (!strncmp(arg, "--min-age=", 10)) { revs->min_age = atoi(arg + 10); + revs->limited = 1; continue; } if (!strcmp(arg, "--all")) { @@ -277,11 +281,13 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs) } if (!strcmp(arg, "--topo-order")) { revs->topo_order = 1; + revs->limited = 1; continue; } if (!strcmp(arg, "--date-order")) { revs->lifo = 0; revs->topo_order = 1; + revs->limited = 1; continue; } if (!strcmp(arg, "--dense")) { @@ -309,6 +315,11 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs) revs->edge_hint = 1; continue; } + if (!strcmp(arg, "--unpacked")) { + revs->unpacked = 1; + revs->limited = 1; + continue; + } *unrecognized++ = arg; left++; continue; @@ -365,6 +376,8 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs) commit = get_commit_reference(revs, def, sha1, 0); add_one_commit(commit, revs); } + if (revs->paths) + revs->limited = 1; *unrecognized = NULL; return left; } diff --git a/revision.h b/revision.h index 5170ac42..a22f1985 100644 --- a/revision.h +++ b/revision.h @@ -21,7 +21,9 @@ struct rev_info { tag_objects:1, tree_objects:1, blob_objects:1, - edge_hint:1; + edge_hint:1, + limited:1, + unpacked:1; /* special limits */ int max_count;