From 183df63940bf92ea626af64d0057165b8aad24f6 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sat, 15 Apr 2006 01:59:40 -0700 Subject: Revert all the rev-list option parsing changes. Signed-off-by: Junio C Hamano --- revision.c | 173 ++++++++++++------------------------------------------------- 1 file changed, 34 insertions(+), 139 deletions(-) (limited to 'revision.c') diff --git a/revision.c b/revision.c index bdf8005aec..0505f3f455 100644 --- a/revision.c +++ b/revision.c @@ -116,27 +116,21 @@ static void add_pending_object(struct rev_info *revs, struct object *obj, const add_object(obj, &revs->pending_objects, NULL, name); } -static struct object *get_reference(struct rev_info *revs, const char *name, const unsigned char *sha1, unsigned int flags) +static struct commit *get_commit_reference(struct rev_info *revs, const char *name, const unsigned char *sha1, unsigned int flags) { struct object *object; object = parse_object(sha1); if (!object) die("bad object %s", name); - object->flags |= flags; - return object; -} - -static struct commit *handle_commit(struct rev_info *revs, struct object *object, const char *name) -{ - unsigned long flags = object->flags; /* * Tag object? Look what it points to.. */ while (object->type == tag_type) { struct tag *tag = (struct tag *) object; - if (revs->tag_objects && !(flags & UNINTERESTING)) + object->flags |= flags; + if (revs->tag_objects && !(object->flags & UNINTERESTING)) add_pending_object(revs, object, tag->tag); object = parse_object(tag->tagged->sha1); if (!object) @@ -149,6 +143,7 @@ static struct commit *handle_commit(struct rev_info *revs, struct object *object */ if (object->type == commit_type) { struct commit *commit = (struct commit *)object; + object->flags |= flags; if (parse_commit(commit) < 0) die("unable to parse commit %s", name); if (flags & UNINTERESTING) { @@ -246,7 +241,7 @@ int rev_compare_tree(struct rev_info *revs, struct tree *t1, struct tree *t2) return REV_TREE_DIFFERENT; tree_difference = REV_TREE_SAME; if (diff_tree_sha1(t1->object.sha1, t2->object.sha1, "", - &revs->pruning) < 0) + &revs->diffopt) < 0) return REV_TREE_DIFFERENT; return tree_difference; } @@ -269,7 +264,7 @@ int rev_same_tree_as_empty(struct rev_info *revs, struct tree *t1) empty.size = 0; tree_difference = 0; - retval = diff_tree(&empty, &real, "", &revs->pruning); + retval = diff_tree(&empty, &real, "", &revs->diffopt); free(tree); return retval >= 0 && !tree_difference; @@ -456,13 +451,21 @@ static void limit_list(struct rev_info *revs) revs->commits = newlist; } +static void add_one_commit(struct commit *commit, struct rev_info *revs) +{ + if (!commit || (commit->object.flags & SEEN)) + return; + commit->object.flags |= SEEN; + commit_list_insert(commit, &revs->commits); +} + static int all_flags; static struct rev_info *all_revs; static int handle_one_ref(const char *path, const unsigned char *sha1) { - struct object *object = get_reference(all_revs, path, sha1, all_flags); - add_pending_object(all_revs, object, ""); + struct commit *commit = get_commit_reference(all_revs, path, sha1, all_flags); + add_one_commit(commit, all_revs); return 0; } @@ -475,15 +478,10 @@ static void handle_all(struct rev_info *revs, unsigned flags) void init_revisions(struct rev_info *revs) { - unsigned abbrev = revs->abbrev; - memset(revs, 0, sizeof(*revs)); - - revs->abbrev = abbrev; - revs->ignore_merges = 1; - revs->pruning.recursive = 1; - revs->pruning.add_remove = file_add_remove; - revs->pruning.change = file_change; + revs->diffopt.recursive = 1; + revs->diffopt.add_remove = file_add_remove; + revs->diffopt.change = file_change; revs->lifo = 1; revs->dense = 1; revs->prefix = setup_git_directory(); @@ -496,11 +494,6 @@ void init_revisions(struct rev_info *revs) revs->topo_setter = topo_sort_default_setter; revs->topo_getter = topo_sort_default_getter; - - revs->header_prefix = ""; - revs->commit_format = CMIT_FMT_DEFAULT; - - diff_setup(&revs->diffopt); } /* @@ -533,14 +526,13 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch flags = 0; for (i = 1; i < argc; i++) { - struct object *object; + struct commit *commit; const char *arg = argv[i]; unsigned char sha1[20]; char *dotdot; int local_flags; if (*arg == '-') { - int opts; if (!strncmp(arg, "--max-count=", 12)) { revs->max_count = atoi(arg + 12); continue; @@ -648,78 +640,6 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch revs->unpacked = 1; continue; } - if (!strcmp(arg, "-r")) { - revs->diff = 1; - revs->diffopt.recursive = 1; - continue; - } - if (!strcmp(arg, "-t")) { - revs->diff = 1; - revs->diffopt.recursive = 1; - revs->diffopt.tree_in_recursive = 1; - continue; - } - if (!strcmp(arg, "-m")) { - revs->ignore_merges = 0; - continue; - } - if (!strcmp(arg, "-c")) { - revs->diff = 1; - revs->combine_merges = 1; - continue; - } - if (!strcmp(arg, "--cc")) { - revs->diff = 1; - revs->dense_combined_merges = 1; - revs->combine_merges = 1; - continue; - } - if (!strcmp(arg, "-v")) { - revs->verbose_header = 1; - revs->header_prefix = "diff-tree "; - continue; - } - if (!strncmp(arg, "--pretty", 8)) { - revs->verbose_header = 1; - revs->header_prefix = "diff-tree "; - revs->commit_format = get_commit_format(arg+8); - continue; - } - if (!strcmp(arg, "--root")) { - revs->show_root_diff = 1; - continue; - } - if (!strcmp(arg, "--no-commit-id")) { - revs->no_commit_id = 1; - continue; - } - if (!strcmp(arg, "--always")) { - revs->always_show_header = 1; - continue; - } - if (!strcmp(arg, "--no-abbrev")) { - revs->abbrev = 0; - continue; - } - if (!strcmp(arg, "--abbrev")) { - revs->abbrev = DEFAULT_ABBREV; - continue; - } - if (!strcmp(arg, "--abbrev-commit")) { - revs->abbrev_commit = 1; - continue; - } - if (!strcmp(arg, "--full-diff")) { - revs->diff = 1; - revs->full_diff = 1; - continue; - } - opts = diff_opt_parse(&revs->diffopt, argv+i, argc-i); - if (opts > 0) { - revs->diff = 1; - i += opts - 1; - continue; - } *unrecognized++ = arg; left++; continue; @@ -736,15 +656,15 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch this = "HEAD"; if (!get_sha1(this, from_sha1) && !get_sha1(next, sha1)) { - struct object *exclude; - struct object *include; + struct commit *exclude; + struct commit *include; - exclude = get_reference(revs, this, from_sha1, flags ^ UNINTERESTING); - include = get_reference(revs, next, sha1, flags); + exclude = get_commit_reference(revs, this, from_sha1, flags ^ UNINTERESTING); + include = get_commit_reference(revs, next, sha1, flags); if (!exclude || !include) die("Invalid revision range %s..%s", arg, next); - add_pending_object(revs, exclude, this); - add_pending_object(revs, include, next); + add_one_commit(exclude, revs); + add_one_commit(include, revs); continue; } *dotdot = '.'; @@ -769,57 +689,32 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch revs->prune_data = get_pathspec(revs->prefix, argv + i); break; } - object = get_reference(revs, arg, sha1, flags ^ local_flags); - add_pending_object(revs, object, arg); + commit = get_commit_reference(revs, arg, sha1, flags ^ local_flags); + add_one_commit(commit, revs); } - if (def && !revs->pending_objects) { + if (def && !revs->commits) { unsigned char sha1[20]; - struct object *object; + struct commit *commit; if (get_sha1(def, sha1) < 0) die("bad default revision '%s'", def); - object = get_reference(revs, def, sha1, 0); - add_pending_object(revs, object, def); + commit = get_commit_reference(revs, def, sha1, 0); + add_one_commit(commit, revs); } if (revs->topo_order || revs->unpacked) revs->limited = 1; if (revs->prune_data) { - diff_tree_setup_paths(revs->prune_data, &revs->pruning); + diff_tree_setup_paths(revs->prune_data, &revs->diffopt); revs->prune_fn = try_to_simplify_commit; - if (!revs->full_diff) - diff_tree_setup_paths(revs->prune_data, &revs->diffopt); - } - if (revs->combine_merges) { - revs->ignore_merges = 0; - if (revs->dense_combined_merges) - revs->diffopt.output_format = DIFF_FORMAT_PATCH; } - if (revs->diffopt.output_format == DIFF_FORMAT_PATCH) - revs->diffopt.recursive = 1; - revs->diffopt.abbrev = revs->abbrev; - diff_setup_done(&revs->diffopt); return left; } void prepare_revision_walk(struct rev_info *revs) { - struct object_list *list; - - list = revs->pending_objects; - revs->pending_objects = NULL; - while (list) { - struct commit *commit = handle_commit(revs, list->item, list->name); - if (commit) { - if (!(commit->object.flags & SEEN)) { - commit->object.flags |= SEEN; - insert_by_date(commit, &revs->commits); - } - } - list = list->next; - } - + sort_by_date(&revs->commits); if (revs->limited) limit_list(revs); if (revs->topo_order) -- cgit v1.2.3