revision.c: remove implicit dependency on the_index

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy 2018-09-21 17:57:38 +02:00 committed by Junio C Hamano
parent 26d024ecf0
commit 2abf350385
37 changed files with 89 additions and 78 deletions

View file

@ -15,9 +15,9 @@ revision list.
Functions Functions
--------- ---------
`init_revisions`:: `repo_init_revisions`::
Initialize a rev_info structure with default values. The second Initialize a rev_info structure with default values. The third
parameter may be NULL or can be prefix path, and then the `.prefix` parameter may be NULL or can be prefix path, and then the `.prefix`
variable will be set to it. This is typically the first function you variable will be set to it. This is typically the first function you
want to call when you want to deal with a revision list. After calling want to call when you want to deal with a revision list. After calling

View file

@ -632,7 +632,7 @@ static void bisect_rev_setup(struct rev_info *revs, const char *prefix,
struct argv_array rev_argv = ARGV_ARRAY_INIT; struct argv_array rev_argv = ARGV_ARRAY_INIT;
int i; int i;
init_revisions(revs, prefix); repo_init_revisions(the_repository, revs, prefix);
revs->abbrev = 0; revs->abbrev = 0;
revs->commit_format = CMIT_FMT_UNSPECIFIED; revs->commit_format = CMIT_FMT_UNSPECIFIED;
@ -889,7 +889,7 @@ static void show_diff_tree(const char *prefix, struct commit *commit)
struct rev_info opt; struct rev_info opt;
/* diff-tree init */ /* diff-tree init */
init_revisions(&opt, prefix); repo_init_revisions(the_repository, &opt, prefix);
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */ git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
opt.abbrev = 0; opt.abbrev = 0;
opt.diff = 1; opt.diff = 1;

View file

@ -110,7 +110,7 @@ int add_files_to_cache(const char *prefix,
memset(&data, 0, sizeof(data)); memset(&data, 0, sizeof(data));
data.flags = flags; data.flags = flags;
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
setup_revisions(0, NULL, &rev, NULL); setup_revisions(0, NULL, &rev, NULL);
if (pathspec) if (pathspec)
copy_pathspec(&rev.prune_data, pathspec); copy_pathspec(&rev.prune_data, pathspec);
@ -232,7 +232,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)
if (read_cache() < 0) if (read_cache() < 0)
die(_("Could not read the index")); die(_("Could not read the index"));
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
rev.diffopt.context = 7; rev.diffopt.context = 7;
argc = setup_revisions(argc, argv, &rev, NULL); argc = setup_revisions(argc, argv, &rev, NULL);

View file

@ -1372,7 +1372,7 @@ static void write_commit_patch(const struct am_state *state, struct commit *comm
FILE *fp; FILE *fp;
fp = xfopen(am_path(state, "patch"), "w"); fp = xfopen(am_path(state, "patch"), "w");
init_revisions(&rev_info, NULL); repo_init_revisions(the_repository, &rev_info, NULL);
rev_info.diff = 1; rev_info.diff = 1;
rev_info.abbrev = 0; rev_info.abbrev = 0;
rev_info.disable_stdin = 1; rev_info.disable_stdin = 1;
@ -1407,7 +1407,7 @@ static void write_index_patch(const struct am_state *state)
the_repository->hash_algo->empty_tree); the_repository->hash_algo->empty_tree);
fp = xfopen(am_path(state, "patch"), "w"); fp = xfopen(am_path(state, "patch"), "w");
init_revisions(&rev_info, NULL); repo_init_revisions(the_repository, &rev_info, NULL);
rev_info.diff = 1; rev_info.diff = 1;
rev_info.disable_stdin = 1; rev_info.disable_stdin = 1;
rev_info.no_commit_id = 1; rev_info.no_commit_id = 1;
@ -1565,7 +1565,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa
struct rev_info rev_info; struct rev_info rev_info;
const char *diff_filter_str = "--diff-filter=AM"; const char *diff_filter_str = "--diff-filter=AM";
init_revisions(&rev_info, NULL); repo_init_revisions(the_repository, &rev_info, NULL);
rev_info.diffopt.output_format = DIFF_FORMAT_NAME_STATUS; rev_info.diffopt.output_format = DIFF_FORMAT_NAME_STATUS;
diff_opt_parse(&rev_info.diffopt, &diff_filter_str, 1, rev_info.prefix); diff_opt_parse(&rev_info.diffopt, &diff_filter_str, 1, rev_info.prefix);
add_pending_oid(&rev_info, "HEAD", &our_tree, 0); add_pending_oid(&rev_info, "HEAD", &our_tree, 0);

View file

@ -830,7 +830,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
setup_default_color_by_age(); setup_default_color_by_age();
git_config(git_blame_config, &output_option); git_config(git_blame_config, &output_option);
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
revs.date_mode = blame_date_mode; revs.date_mode = blame_date_mode;
revs.diffopt.flags.allow_textconv = 1; revs.diffopt.flags.allow_textconv = 1;
revs.diffopt.flags.follow_renames = 1; revs.diffopt.flags.follow_renames = 1;

View file

@ -392,7 +392,7 @@ static void show_local_changes(struct object *head,
{ {
struct rev_info rev; struct rev_info rev;
/* I think we want full paths, even if we're in a subdirectory. */ /* I think we want full paths, even if we're in a subdirectory. */
init_revisions(&rev, NULL); repo_init_revisions(the_repository, &rev, NULL);
rev.diffopt.flags = opts->flags; rev.diffopt.flags = opts->flags;
rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS; rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
diff_setup_done(&rev.diffopt); diff_setup_done(&rev.diffopt);
@ -801,7 +801,7 @@ static void orphaned_commit_warning(struct commit *old_commit, struct commit *ne
struct rev_info revs; struct rev_info revs;
struct object *object = &old_commit->object; struct object *object = &old_commit->object;
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
setup_revisions(0, NULL, &revs, NULL); setup_revisions(0, NULL, &revs, NULL);
object->flags &= ~UNINTERESTING; object->flags &= ~UNINTERESTING;

View file

@ -980,7 +980,7 @@ static const char *find_author_by_nickname(const char *name)
const char *av[20]; const char *av[20];
int ac = 0; int ac = 0;
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
strbuf_addf(&buf, "--author=%s", name); strbuf_addf(&buf, "--author=%s", name);
av[++ac] = "--all"; av[++ac] = "--all";
av[++ac] = "-i"; av[++ac] = "-i";

View file

@ -488,7 +488,7 @@ static void describe_blob(struct object_id oid, struct strbuf *dst)
"--objects", "--in-commit-order", "--reverse", "HEAD", "--objects", "--in-commit-order", "--reverse", "HEAD",
NULL); NULL);
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
if (setup_revisions(args.argc, args.argv, &revs, NULL) > 1) if (setup_revisions(args.argc, args.argv, &revs, NULL) > 1)
BUG("setup_revisions could not handle all args?"); BUG("setup_revisions could not handle all args?");
@ -636,7 +636,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
if (0 <= fd) if (0 <= fd)
update_index_if_able(&the_index, &index_lock); update_index_if_able(&the_index, &index_lock);
init_revisions(&revs, prefix); repo_init_revisions(the_repository, &revs, prefix);
argv_array_pushv(&args, diff_index_args); argv_array_pushv(&args, diff_index_args);
if (setup_revisions(args.argc, args.argv, &revs, NULL) != 1) if (setup_revisions(args.argc, args.argv, &revs, NULL) != 1)
BUG("malformed internal diff-index command line"); BUG("malformed internal diff-index command line");

View file

@ -25,7 +25,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
usage(diff_files_usage); usage(diff_files_usage);
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */ git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
rev.abbrev = 0; rev.abbrev = 0;
precompose_argv(argc, argv); precompose_argv(argc, argv);

View file

@ -22,7 +22,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
usage(diff_cache_usage); usage(diff_cache_usage);
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */ git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
rev.abbrev = 0; rev.abbrev = 0;
precompose_argv(argc, argv); precompose_argv(argc, argv);

View file

@ -110,7 +110,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
usage(diff_tree_usage); usage(diff_tree_usage);
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */ git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
init_revisions(opt, prefix); repo_init_revisions(the_repository, opt, prefix);
if (read_cache() < 0) if (read_cache() < 0)
die(_("index file corrupt")); die(_("index file corrupt"));
opt->abbrev = 0; opt->abbrev = 0;

View file

@ -318,7 +318,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
git_config(git_diff_ui_config, NULL); git_config(git_diff_ui_config, NULL);
precompose_argv(argc, argv); precompose_argv(argc, argv);
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
if (no_index && argc != i + 2) { if (no_index && argc != i + 2) {
if (no_index == DIFF_NO_INDEX_IMPLICIT) { if (no_index == DIFF_NO_INDEX_IMPLICIT) {

View file

@ -1033,7 +1033,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
/* we handle encodings */ /* we handle encodings */
git_config(git_default_config, NULL); git_config(git_default_config, NULL);
init_revisions(&revs, prefix); repo_init_revisions(the_repository, &revs, prefix);
init_revision_sources(&revision_sources); init_revision_sources(&revision_sources);
revs.topo_order = 1; revs.topo_order = 1;
revs.sources = &revision_sources; revs.sources = &revision_sources;

View file

@ -642,7 +642,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out,
struct rev_info rev; struct rev_info rev;
head = lookup_commit_or_die(&head_oid, "HEAD"); head = lookup_commit_or_die(&head_oid, "HEAD");
init_revisions(&rev, NULL); repo_init_revisions(the_repository, &rev, NULL);
rev.commit_format = CMIT_FMT_ONELINE; rev.commit_format = CMIT_FMT_ONELINE;
rev.ignore_merges = 1; rev.ignore_merges = 1;
rev.limited = 1; rev.limited = 1;

View file

@ -467,7 +467,7 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix)
init_log_defaults(); init_log_defaults();
git_config(git_log_config, NULL); git_config(git_log_config, NULL);
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
rev.diff = 1; rev.diff = 1;
rev.simplify_history = 0; rev.simplify_history = 0;
memset(&opt, 0, sizeof(opt)); memset(&opt, 0, sizeof(opt));
@ -585,7 +585,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
git_config(git_log_config, NULL); git_config(git_log_config, NULL);
memset(&match_all, 0, sizeof(match_all)); memset(&match_all, 0, sizeof(match_all));
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
rev.diff = 1; rev.diff = 1;
rev.always_show_header = 1; rev.always_show_header = 1;
rev.no_walk = REVISION_WALK_NO_WALK_SORTED; rev.no_walk = REVISION_WALK_NO_WALK_SORTED;
@ -665,7 +665,7 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)
init_log_defaults(); init_log_defaults();
git_config(git_log_config, NULL); git_config(git_log_config, NULL);
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
init_reflog_walk(&rev.reflog_info); init_reflog_walk(&rev.reflog_info);
rev.verbose_header = 1; rev.verbose_header = 1;
memset(&opt, 0, sizeof(opt)); memset(&opt, 0, sizeof(opt));
@ -704,7 +704,7 @@ int cmd_log(int argc, const char **argv, const char *prefix)
init_log_defaults(); init_log_defaults();
git_config(git_log_config, NULL); git_config(git_log_config, NULL);
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
rev.always_show_header = 1; rev.always_show_header = 1;
memset(&opt, 0, sizeof(opt)); memset(&opt, 0, sizeof(opt));
opt.def = "HEAD"; opt.def = "HEAD";
@ -917,7 +917,7 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids)
init_patch_ids(the_repository, ids); init_patch_ids(the_repository, ids);
/* given a range a..b get all patch ids for b..a */ /* given a range a..b get all patch ids for b..a */
init_revisions(&check_rev, rev->prefix); repo_init_revisions(the_repository, &check_rev, rev->prefix);
check_rev.max_parents = 1; check_rev.max_parents = 1;
o1->flags ^= UNINTERESTING; o1->flags ^= UNINTERESTING;
o2->flags ^= UNINTERESTING; o2->flags ^= UNINTERESTING;
@ -1367,7 +1367,7 @@ static void prepare_bases(struct base_tree_info *bases,
oidcpy(&bases->base_commit, &base->object.oid); oidcpy(&bases->base_commit, &base->object.oid);
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
revs.max_parents = 1; revs.max_parents = 1;
revs.topo_order = 1; revs.topo_order = 1;
for (i = 0; i < total; i++) { for (i = 0; i < total; i++) {
@ -1528,7 +1528,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
extra_cc.strdup_strings = 1; extra_cc.strdup_strings = 1;
init_log_defaults(); init_log_defaults();
git_config(git_format_config, NULL); git_config(git_format_config, NULL);
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
rev.commit_format = CMIT_FMT_EMAIL; rev.commit_format = CMIT_FMT_EMAIL;
rev.expand_tabs_in_log_default = 0; rev.expand_tabs_in_log_default = 0;
rev.verbose_header = 1; rev.verbose_header = 1;
@ -1939,7 +1939,7 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
} }
} }
init_revisions(&revs, prefix); repo_init_revisions(the_repository, &revs, prefix);
revs.max_parents = 1; revs.max_parents = 1;
if (add_pending_commit(head, &revs, 0)) if (add_pending_commit(head, &revs, 0))

View file

@ -389,7 +389,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead
printf(_("Squash commit -- not updating HEAD\n")); printf(_("Squash commit -- not updating HEAD\n"));
init_revisions(&rev, NULL); repo_init_revisions(the_repository, &rev, NULL);
rev.ignore_merges = 1; rev.ignore_merges = 1;
rev.commit_format = CMIT_FMT_MEDIUM; rev.commit_format = CMIT_FMT_MEDIUM;
@ -911,7 +911,7 @@ static int evaluate_result(void)
struct rev_info rev; struct rev_info rev;
/* Check how many files differ. */ /* Check how many files differ. */
init_revisions(&rev, ""); repo_init_revisions(the_repository, &rev, "");
setup_revisions(0, NULL, &rev, NULL); setup_revisions(0, NULL, &rev, NULL);
rev.diffopt.output_format |= rev.diffopt.output_format |=
DIFF_FORMAT_CALLBACK; DIFF_FORMAT_CALLBACK;

View file

@ -2989,7 +2989,7 @@ static void get_object_list(int ac, const char **av)
char line[1000]; char line[1000];
int flags = 0; int flags = 0;
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
save_commit_buffer = 0; save_commit_buffer = 0;
setup_revisions(ac, av, &revs, NULL); setup_revisions(ac, av, &revs, NULL);

View file

@ -120,7 +120,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
save_commit_buffer = 0; save_commit_buffer = 0;
read_replace_refs = 0; read_replace_refs = 0;
ref_paranoia = 1; ref_paranoia = 1;
init_revisions(&revs, prefix); repo_init_revisions(the_repository, &revs, prefix);
argc = parse_options(argc, argv, prefix, options, prune_usage, 0); argc = parse_options(argc, argv, prefix, options, prune_usage, 0);

View file

@ -567,7 +567,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
* from reflog if the repository was pruned with older git. * from reflog if the repository was pruned with older git.
*/ */
if (cb.cmd.stalefix) { if (cb.cmd.stalefix) {
init_revisions(&cb.cmd.revs, prefix); repo_init_revisions(the_repository, &cb.cmd.revs, prefix);
if (flags & EXPIRE_REFLOGS_VERBOSE) if (flags & EXPIRE_REFLOGS_VERBOSE)
printf("Marking reachable objects..."); printf("Marking reachable objects...");
mark_reachable_objects(&cb.cmd.revs, 0, 0, NULL); mark_reachable_objects(&cb.cmd.revs, 0, 0, NULL);

View file

@ -370,7 +370,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
usage(rev_list_usage); usage(rev_list_usage);
git_config(git_default_config, NULL); git_config(git_default_config, NULL);
init_revisions(&revs, prefix); repo_init_revisions(the_repository, &revs, prefix);
revs.abbrev = DEFAULT_ABBREV; revs.abbrev = DEFAULT_ABBREV;
revs.commit_format = CMIT_FMT_UNSPECIFIED; revs.commit_format = CMIT_FMT_UNSPECIFIED;

View file

@ -174,7 +174,7 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
} else { } else {
struct setup_revision_opt s_r_opt; struct setup_revision_opt s_r_opt;
opts->revs = xmalloc(sizeof(*opts->revs)); opts->revs = xmalloc(sizeof(*opts->revs));
init_revisions(opts->revs, NULL); repo_init_revisions(the_repository, opts->revs, NULL);
opts->revs->no_walk = REVISION_WALK_NO_WALK_UNSORTED; opts->revs->no_walk = REVISION_WALK_NO_WALK_UNSORTED;
if (argc < 2) if (argc < 2)
usage_with_options(usage_str, options); usage_with_options(usage_str, options);

View file

@ -278,7 +278,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
git_config(git_default_config, NULL); git_config(git_default_config, NULL);
shortlog_init(&log); shortlog_init(&log);
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
parse_options_start(&ctx, argc, argv, prefix, options, parse_options_start(&ctx, argc, argv, prefix, options,
PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0); PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0);

View file

@ -792,7 +792,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid,
path, NULL); path, NULL);
git_config(git_diff_basic_config, NULL); git_config(git_diff_basic_config, NULL);
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
rev.abbrev = 0; rev.abbrev = 0;
diff_files_args.argc = setup_revisions(diff_files_args.argc, diff_files_args.argc = setup_revisions(diff_files_args.argc,
diff_files_args.argv, diff_files_args.argv,

View file

@ -140,7 +140,7 @@ int verify_bundle(struct bundle_header *header, int verbose)
int i, ret = 0, req_nr; int i, ret = 0, req_nr;
const char *message = _("Repository lacks these prerequisite commits:"); const char *message = _("Repository lacks these prerequisite commits:");
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
for (i = 0; i < p->nr; i++) { for (i = 0; i < p->nr; i++) {
struct ref_list_entry *e = p->list + i; struct ref_list_entry *e = p->list + i;
struct object *o = parse_object(the_repository, &e->oid); struct object *o = parse_object(the_repository, &e->oid);
@ -441,7 +441,7 @@ int create_bundle(struct bundle_header *header, const char *path,
/* init revs to list objects for pack-objects later */ /* init revs to list objects for pack-objects later */
save_commit_buffer = 0; save_commit_buffer = 0;
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
/* write prerequisites */ /* write prerequisites */
if (compute_and_write_prerequisites(bundle_fd, &revs, argc, argv)) if (compute_and_write_prerequisites(bundle_fd, &revs, argc, argv))

View file

@ -542,7 +542,7 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt)
{ {
struct rev_info revs; struct rev_info revs;
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
copy_pathspec(&revs.prune_data, &opt->pathspec); copy_pathspec(&revs.prune_data, &opt->pathspec);
revs.diffopt = *opt; revs.diffopt = *opt;
@ -557,7 +557,7 @@ int index_differs_from(const char *def, const struct diff_flags *flags,
struct rev_info rev; struct rev_info rev;
struct setup_revision_opt opt; struct setup_revision_opt opt;
init_revisions(&rev, NULL); repo_init_revisions(the_repository, &rev, NULL);
memset(&opt, 0, sizeof(opt)); memset(&opt, 0, sizeof(opt));
opt.def = def; opt.def = def;
setup_revisions(0, NULL, &rev, &opt); setup_revisions(0, NULL, &rev, &opt);

View file

@ -1925,7 +1925,7 @@ int cmd_main(int argc, const char **argv)
if (!push_all && !is_null_oid(&ref->old_oid)) if (!push_all && !is_null_oid(&ref->old_oid))
argv_array_pushf(&commit_argv, "^%s", argv_array_pushf(&commit_argv, "^%s",
oid_to_hex(&ref->old_oid)); oid_to_hex(&ref->old_oid));
init_revisions(&revs, setup_git_directory()); repo_init_revisions(the_repository, &revs, setup_git_directory());
setup_revisions(commit_argv.argc, commit_argv.argv, &revs, NULL); setup_revisions(commit_argv.argc, commit_argv.argv, &revs, NULL);
revs.edge_hint = 0; /* just in case */ revs.edge_hint = 0; /* just in case */

View file

@ -1115,7 +1115,7 @@ static int find_first_merges(struct object_array *result, const char *path,
/* get all revisions that merge commit a */ /* get all revisions that merge commit a */
xsnprintf(merged_revision, sizeof(merged_revision), "^%s", xsnprintf(merged_revision, sizeof(merged_revision), "^%s",
oid_to_hex(&a->object.oid)); oid_to_hex(&a->object.oid));
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
rev_opts.submodule = path; rev_opts.submodule = path;
/* FIXME: can't handle linked worktrees in submodules yet */ /* FIXME: can't handle linked worktrees in submodules yet */
revs.single_worktree = path != NULL; revs.single_worktree = path != NULL;

View file

@ -261,7 +261,7 @@ void bitmap_writer_build(struct packing_data *to_pack)
if (writer.show_progress) if (writer.show_progress)
writer.progress = start_progress("Building bitmaps", writer.selected_nr); writer.progress = start_progress("Building bitmaps", writer.selected_nr);
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
revs.tag_objects = 1; revs.tag_objects = 1;
revs.tree_objects = 1; revs.tree_objects = 1;
revs.blob_objects = 1; revs.blob_objects = 1;

View file

@ -2138,7 +2138,7 @@ static void do_merge_filter(struct ref_filter_cbdata *ref_cbdata)
struct ref_array *array = ref_cbdata->array; struct ref_array *array = ref_cbdata->array;
struct commit **to_clear = xcalloc(sizeof(struct commit *), array->nr); struct commit **to_clear = xcalloc(sizeof(struct commit *), array->nr);
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
for (i = 0; i < array->nr; i++) { for (i = 0; i < array->nr; i++) {
struct ref_array_item *item = array->items[i]; struct ref_array_item *item = array->items[i];

View file

@ -1903,7 +1903,7 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs,
oid_to_hex(&theirs->object.oid)); oid_to_hex(&theirs->object.oid));
argv_array_push(&argv, "--"); argv_array_push(&argv, "--");
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
setup_revisions(argv.argc, argv.argv, &revs, NULL); setup_revisions(argv.argc, argv.argv, &revs, NULL);
if (prepare_revision_walk(&revs)) if (prepare_revision_walk(&revs))
die("revision walk setup failed"); die("revision walk setup failed");

View file

@ -877,7 +877,7 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)
return; return;
left_first = left_count < right_count; left_first = left_count < right_count;
init_patch_ids(the_repository, &ids); init_patch_ids(revs->repo, &ids);
ids.diffopts.pathspec = revs->diffopt.pathspec; ids.diffopts.pathspec = revs->diffopt.pathspec;
/* Compute patch-ids for one side */ /* Compute patch-ids for one side */
@ -1370,8 +1370,8 @@ void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags)
{ {
struct worktree **worktrees, **p; struct worktree **worktrees, **p;
read_cache(); read_index(revs->repo->index);
do_add_index_objects_to_pending(revs, &the_index); do_add_index_objects_to_pending(revs, revs->repo->index);
if (revs->single_worktree) if (revs->single_worktree)
return; return;
@ -1439,10 +1439,13 @@ static int add_parents_only(struct rev_info *revs, const char *arg_, int flags,
return 1; return 1;
} }
void init_revisions(struct rev_info *revs, const char *prefix) void repo_init_revisions(struct repository *r,
struct rev_info *revs,
const char *prefix)
{ {
memset(revs, 0, sizeof(*revs)); memset(revs, 0, sizeof(*revs));
revs->repo = r;
revs->abbrev = DEFAULT_ABBREV; revs->abbrev = DEFAULT_ABBREV;
revs->ignore_merges = 1; revs->ignore_merges = 1;
revs->simplify_history = 1; revs->simplify_history = 1;
@ -1464,11 +1467,11 @@ void init_revisions(struct rev_info *revs, const char *prefix)
revs->commit_format = CMIT_FMT_DEFAULT; revs->commit_format = CMIT_FMT_DEFAULT;
revs->expand_tabs_in_log_default = 8; revs->expand_tabs_in_log_default = 8;
init_grep_defaults(the_repository); init_grep_defaults(revs->repo);
grep_init(&revs->grep_filter, the_repository, prefix); grep_init(&revs->grep_filter, revs->repo, prefix);
revs->grep_filter.status_only = 1; revs->grep_filter.status_only = 1;
repo_diff_setup(the_repository, &revs->diffopt); repo_diff_setup(revs->repo, &revs->diffopt);
if (prefix && !revs->diffopt.prefix) { if (prefix && !revs->diffopt.prefix) {
revs->diffopt.prefix = prefix; revs->diffopt.prefix = prefix;
revs->diffopt.prefix_length = strlen(prefix); revs->diffopt.prefix_length = strlen(prefix);
@ -1496,6 +1499,7 @@ static void prepare_show_merge(struct rev_info *revs)
struct object_id oid; struct object_id oid;
const char **prune = NULL; const char **prune = NULL;
int i, prune_num = 1; /* counting terminating NULL */ int i, prune_num = 1; /* counting terminating NULL */
struct index_state *istate = revs->repo->index;
if (get_oid("HEAD", &oid)) if (get_oid("HEAD", &oid))
die("--merge without HEAD?"); die("--merge without HEAD?");
@ -1511,20 +1515,20 @@ static void prepare_show_merge(struct rev_info *revs)
free_commit_list(bases); free_commit_list(bases);
head->object.flags |= SYMMETRIC_LEFT; head->object.flags |= SYMMETRIC_LEFT;
if (!active_nr) if (!istate->cache_nr)
read_cache(); read_index(istate);
for (i = 0; i < active_nr; i++) { for (i = 0; i < istate->cache_nr; i++) {
const struct cache_entry *ce = active_cache[i]; const struct cache_entry *ce = istate->cache[i];
if (!ce_stage(ce)) if (!ce_stage(ce))
continue; continue;
if (ce_path_match(&the_index, ce, &revs->prune_data, NULL)) { if (ce_path_match(istate, ce, &revs->prune_data, NULL)) {
prune_num++; prune_num++;
REALLOC_ARRAY(prune, prune_num); REALLOC_ARRAY(prune, prune_num);
prune[prune_num-2] = ce->name; prune[prune_num-2] = ce->name;
prune[prune_num-1] = NULL; prune[prune_num-1] = NULL;
} }
while ((i+1 < active_nr) && while ((i+1 < istate->cache_nr) &&
ce_same_name(ce, active_cache[i+1])) ce_same_name(ce, istate->cache[i+1]))
i++; i++;
} }
clear_pathspec(&revs->prune_data); clear_pathspec(&revs->prune_data);

View file

@ -28,8 +28,9 @@
#define DECORATE_SHORT_REFS 1 #define DECORATE_SHORT_REFS 1
#define DECORATE_FULL_REFS 2 #define DECORATE_FULL_REFS 2
struct rev_info;
struct log_info; struct log_info;
struct repository;
struct rev_info;
struct string_list; struct string_list;
struct saved_parents; struct saved_parents;
define_shared_commit_slab(revision_sources, char *); define_shared_commit_slab(revision_sources, char *);
@ -60,6 +61,7 @@ struct rev_info {
/* Starting list */ /* Starting list */
struct commit_list *commits; struct commit_list *commits;
struct object_array pending; struct object_array pending;
struct repository *repo;
/* Parents of shown commits */ /* Parents of shown commits */
struct object_array boundary_commits; struct object_array boundary_commits;
@ -248,12 +250,17 @@ extern volatile show_early_output_fn_t show_early_output;
struct setup_revision_opt { struct setup_revision_opt {
const char *def; const char *def;
void (*tweak)(struct rev_info *, struct setup_revision_opt *); void (*tweak)(struct rev_info *, struct setup_revision_opt *);
const char *submodule; const char *submodule; /* TODO: drop this and use rev_info->repo */
int assume_dashdash; int assume_dashdash;
unsigned revarg_opt; unsigned revarg_opt;
}; };
void init_revisions(struct rev_info *revs, const char *prefix); #ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS
#define init_revisions(revs, prefix) repo_init_revisions(the_repository, revs, prefix)
#endif
void repo_init_revisions(struct repository *r,
struct rev_info *revs,
const char *prefix);
int setup_revisions(int argc, const char **argv, struct rev_info *revs, int setup_revisions(int argc, const char **argv, struct rev_info *revs,
struct setup_revision_opt *); struct setup_revision_opt *);
void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx, void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,

View file

@ -1172,7 +1172,7 @@ void print_commit_summary(const char *prefix, const struct object_id *oid,
strbuf_release(&author_ident); strbuf_release(&author_ident);
strbuf_release(&committer_ident); strbuf_release(&committer_ident);
init_revisions(&rev, prefix); repo_init_revisions(the_repository, &rev, prefix);
setup_revisions(0, NULL, &rev, NULL); setup_revisions(0, NULL, &rev, NULL);
rev.diff = 1; rev.diff = 1;
@ -2595,7 +2595,7 @@ static int make_patch(struct commit *commit, struct replay_opts *opts)
strbuf_addf(&buf, "%s/patch", get_dir(opts)); strbuf_addf(&buf, "%s/patch", get_dir(opts));
memset(&log_tree_opt, 0, sizeof(log_tree_opt)); memset(&log_tree_opt, 0, sizeof(log_tree_opt));
init_revisions(&log_tree_opt, NULL); repo_init_revisions(the_repository, &log_tree_opt, NULL);
log_tree_opt.abbrev = 0; log_tree_opt.abbrev = 0;
log_tree_opt.diff = 1; log_tree_opt.diff = 1;
log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH; log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
@ -3506,7 +3506,7 @@ static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts)
struct object_id orig, head; struct object_id orig, head;
memset(&log_tree_opt, 0, sizeof(log_tree_opt)); memset(&log_tree_opt, 0, sizeof(log_tree_opt));
init_revisions(&log_tree_opt, NULL); repo_init_revisions(the_repository, &log_tree_opt, NULL);
log_tree_opt.diff = 1; log_tree_opt.diff = 1;
log_tree_opt.diffopt.output_format = log_tree_opt.diffopt.output_format =
DIFF_FORMAT_DIFFSTAT; DIFF_FORMAT_DIFFSTAT;
@ -4241,7 +4241,7 @@ int sequencer_make_script(FILE *out, int argc, const char **argv,
const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick"; const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
int rebase_merges = flags & TODO_LIST_REBASE_MERGES; int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
revs.verbose_header = 1; revs.verbose_header = 1;
if (!rebase_merges) if (!rebase_merges)
revs.max_parents = 1; revs.max_parents = 1;

View file

@ -184,7 +184,7 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av,
is_repository_shallow(the_repository); /* make sure shallows are read */ is_repository_shallow(the_repository); /* make sure shallows are read */
init_revisions(&revs, NULL); repo_init_revisions(the_repository, &revs, NULL);
save_commit_buffer = 0; save_commit_buffer = 0;
setup_revisions(ac, av, &revs, NULL); setup_revisions(ac, av, &revs, NULL);

View file

@ -428,7 +428,7 @@ static int prepare_submodule_summary(struct rev_info *rev, const char *path,
{ {
struct commit_list *list; struct commit_list *list;
init_revisions(rev, NULL); repo_init_revisions(the_repository, rev, NULL);
setup_revisions(0, NULL, rev, NULL); setup_revisions(0, NULL, rev, NULL);
rev->left_right = 1; rev->left_right = 1;
rev->first_parent_only = 1; rev->first_parent_only = 1;
@ -773,7 +773,7 @@ static void collect_changed_submodules(struct index_state *istate,
struct rev_info rev; struct rev_info rev;
const struct commit *commit; const struct commit *commit;
init_revisions(&rev, NULL); repo_init_revisions(the_repository, &rev, NULL);
setup_revisions(argv->argc, argv->argv, &rev, NULL); setup_revisions(argv->argc, argv->argv, &rev, NULL);
if (prepare_revision_walk(&rev)) if (prepare_revision_walk(&rev))
die("revision walk setup failed"); die("revision walk setup failed");
@ -784,7 +784,7 @@ static void collect_changed_submodules(struct index_state *istate,
data.changed = changed; data.changed = changed;
data.commit_oid = &commit->object.oid; data.commit_oid = &commit->object.oid;
init_revisions(&diff_rev, NULL); repo_init_revisions(the_repository, &diff_rev, NULL);
diff_rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK; diff_rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK;
diff_rev.diffopt.format_callback = collect_changed_submodules_cb; diff_rev.diffopt.format_callback = collect_changed_submodules_cb;
diff_rev.diffopt.format_callback_data = &data; diff_rev.diffopt.format_callback_data = &data;

View file

@ -32,7 +32,7 @@ static int run_revision_walk(void)
int argc = ARRAY_SIZE(argv) - 1; int argc = ARRAY_SIZE(argv) - 1;
int got_revision = 0; int got_revision = 0;
init_revisions(&rev, NULL); repo_init_revisions(the_repository, &rev, NULL);
setup_revisions(argc, argv, &rev, NULL); setup_revisions(argc, argv, &rev, NULL);
if (prepare_revision_walk(&rev)) if (prepare_revision_walk(&rev))
die("revision walk setup failed"); die("revision walk setup failed");

View file

@ -582,7 +582,7 @@ static void wt_status_collect_changes_worktree(struct wt_status *s)
{ {
struct rev_info rev; struct rev_info rev;
init_revisions(&rev, NULL); repo_init_revisions(the_repository, &rev, NULL);
setup_revisions(0, NULL, &rev, NULL); setup_revisions(0, NULL, &rev, NULL);
rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK; rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK;
rev.diffopt.flags.dirty_submodules = 1; rev.diffopt.flags.dirty_submodules = 1;
@ -607,7 +607,7 @@ static void wt_status_collect_changes_index(struct wt_status *s)
struct rev_info rev; struct rev_info rev;
struct setup_revision_opt opt; struct setup_revision_opt opt;
init_revisions(&rev, NULL); repo_init_revisions(the_repository, &rev, NULL);
memset(&opt, 0, sizeof(opt)); memset(&opt, 0, sizeof(opt));
opt.def = s->is_initial ? empty_tree_oid_hex() : s->reference; opt.def = s->is_initial ? empty_tree_oid_hex() : s->reference;
setup_revisions(0, NULL, &rev, &opt); setup_revisions(0, NULL, &rev, &opt);
@ -982,7 +982,7 @@ static void wt_longstatus_print_verbose(struct wt_status *s)
int dirty_submodules; int dirty_submodules;
const char *c = color(WT_STATUS_HEADER, s); const char *c = color(WT_STATUS_HEADER, s);
init_revisions(&rev, NULL); repo_init_revisions(the_repository, &rev, NULL);
rev.diffopt.flags.allow_textconv = 1; rev.diffopt.flags.allow_textconv = 1;
rev.diffopt.ita_invisible_in_index = 1; rev.diffopt.ita_invisible_in_index = 1;
@ -2314,7 +2314,7 @@ int has_unstaged_changes(int ignore_submodules)
struct rev_info rev_info; struct rev_info rev_info;
int result; int result;
init_revisions(&rev_info, NULL); repo_init_revisions(the_repository, &rev_info, NULL);
if (ignore_submodules) { if (ignore_submodules) {
rev_info.diffopt.flags.ignore_submodules = 1; rev_info.diffopt.flags.ignore_submodules = 1;
rev_info.diffopt.flags.override_submodule_config = 1; rev_info.diffopt.flags.override_submodule_config = 1;
@ -2336,7 +2336,7 @@ int has_uncommitted_changes(int ignore_submodules)
if (is_cache_unborn()) if (is_cache_unborn())
return 0; return 0;
init_revisions(&rev_info, NULL); repo_init_revisions(the_repository, &rev_info, NULL);
if (ignore_submodules) if (ignore_submodules)
rev_info.diffopt.flags.ignore_submodules = 1; rev_info.diffopt.flags.ignore_submodules = 1;
rev_info.diffopt.flags.quick = 1; rev_info.diffopt.flags.quick = 1;