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>

Nguyễn Thái Ngọc Duy committed Sep 21, 2018 at 17:57 UTC 2abf3503854e27e18b2fb5ba97ceeb3f79240ee5
37 files changed +89 -78
Documentation/technical/api-revision-walking.txt
+2 -2
@@ -15,9 +15,9 @@ revision list.
15 Functions
16 ---------
17
18 -`init_revisions`::
18 +`repo_init_revisions`::
19
20 - Initialize a rev_info structure with default values. The second
20 + Initialize a rev_info structure with default values. The third
21 parameter may be NULL or can be prefix path, and then the `.prefix`
22 variable will be set to it. This is typically the first function you
23 want to call when you want to deal with a revision list. After calling
bisect.c
+2 -2
@@ -632,7 +632,7 @@ static void bisect_rev_setup(struct rev_info *revs, const char *prefix,
632 struct argv_array rev_argv = ARGV_ARRAY_INIT;
633 int i;
634
635 - init_revisions(revs, prefix);
635 + repo_init_revisions(the_repository, revs, prefix);
636 revs->abbrev = 0;
637 revs->commit_format = CMIT_FMT_UNSPECIFIED;
638
@@ -889,7 +889,7 @@ static void show_diff_tree(const char *prefix, struct commit *commit)
889 struct rev_info opt;
890
891 /* diff-tree init */
892 - init_revisions(&opt, prefix);
892 + repo_init_revisions(the_repository, &opt, prefix);
893 git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
894 opt.abbrev = 0;
895 opt.diff = 1;
builtin/add.c
+2 -2
@@ -110,7 +110,7 @@ int add_files_to_cache(const char *prefix,
110 memset(&data, 0, sizeof(data));
111 data.flags = flags;
112
113 - init_revisions(&rev, prefix);
113 + repo_init_revisions(the_repository, &rev, prefix);
114 setup_revisions(0, NULL, &rev, NULL);
115 if (pathspec)
116 copy_pathspec(&rev.prune_data, pathspec);
@@ -232,7 +232,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix)
232 if (read_cache() < 0)
233 die(_("Could not read the index"));
234
235 - init_revisions(&rev, prefix);
235 + repo_init_revisions(the_repository, &rev, prefix);
236 rev.diffopt.context = 7;
237
238 argc = setup_revisions(argc, argv, &rev, NULL);
builtin/am.c
+3 -3
@@ -1372,7 +1372,7 @@ static void write_commit_patch(const struct am_state *state, struct commit *comm
1372 FILE *fp;
1373
1374 fp = xfopen(am_path(state, "patch"), "w");
1375 - init_revisions(&rev_info, NULL);
1375 + repo_init_revisions(the_repository, &rev_info, NULL);
1376 rev_info.diff = 1;
1377 rev_info.abbrev = 0;
1378 rev_info.disable_stdin = 1;
@@ -1407,7 +1407,7 @@ static void write_index_patch(const struct am_state *state)
1407 the_repository->hash_algo->empty_tree);
1408
1409 fp = xfopen(am_path(state, "patch"), "w");
1410 - init_revisions(&rev_info, NULL);
1410 + repo_init_revisions(the_repository, &rev_info, NULL);
1411 rev_info.diff = 1;
1412 rev_info.disable_stdin = 1;
1413 rev_info.no_commit_id = 1;
@@ -1565,7 +1565,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa
1565 struct rev_info rev_info;
1566 const char *diff_filter_str = "--diff-filter=AM";
1567
1568 - init_revisions(&rev_info, NULL);
1568 + repo_init_revisions(the_repository, &rev_info, NULL);
1569 rev_info.diffopt.output_format = DIFF_FORMAT_NAME_STATUS;
1570 diff_opt_parse(&rev_info.diffopt, &diff_filter_str, 1, rev_info.prefix);
1571 add_pending_oid(&rev_info, "HEAD", &our_tree, 0);
builtin/blame.c
+1 -1
@@ -830,7 +830,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
830
831 setup_default_color_by_age();
832 git_config(git_blame_config, &output_option);
833 - init_revisions(&revs, NULL);
833 + repo_init_revisions(the_repository, &revs, NULL);
834 revs.date_mode = blame_date_mode;
835 revs.diffopt.flags.allow_textconv = 1;
836 revs.diffopt.flags.follow_renames = 1;
builtin/checkout.c
+2 -2
@@ -392,7 +392,7 @@ static void show_local_changes(struct object *head,
392 {
393 struct rev_info rev;
394 /* I think we want full paths, even if we're in a subdirectory. */
395 - init_revisions(&rev, NULL);
395 + repo_init_revisions(the_repository, &rev, NULL);
396 rev.diffopt.flags = opts->flags;
397 rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
398 diff_setup_done(&rev.diffopt);
@@ -801,7 +801,7 @@ static void orphaned_commit_warning(struct commit *old_commit, struct commit *ne
801 struct rev_info revs;
802 struct object *object = &old_commit->object;
803
804 - init_revisions(&revs, NULL);
804 + repo_init_revisions(the_repository, &revs, NULL);
805 setup_revisions(0, NULL, &revs, NULL);
806
807 object->flags &= ~UNINTERESTING;
builtin/commit.c
+1 -1
@@ -980,7 +980,7 @@ static const char *find_author_by_nickname(const char *name)
980 const char *av[20];
981 int ac = 0;
982
983 - init_revisions(&revs, NULL);
983 + repo_init_revisions(the_repository, &revs, NULL);
984 strbuf_addf(&buf, "--author=%s", name);
985 av[++ac] = "--all";
986 av[++ac] = "-i";
builtin/describe.c
+2 -2
@@ -488,7 +488,7 @@ static void describe_blob(struct object_id oid, struct strbuf *dst)
488 "--objects", "--in-commit-order", "--reverse", "HEAD",
489 NULL);
490
491 - init_revisions(&revs, NULL);
491 + repo_init_revisions(the_repository, &revs, NULL);
492 if (setup_revisions(args.argc, args.argv, &revs, NULL) > 1)
493 BUG("setup_revisions could not handle all args?");
494
@@ -636,7 +636,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
636 if (0 <= fd)
637 update_index_if_able(&the_index, &index_lock);
638
639 - init_revisions(&revs, prefix);
639 + repo_init_revisions(the_repository, &revs, prefix);
640 argv_array_pushv(&args, diff_index_args);
641 if (setup_revisions(args.argc, args.argv, &revs, NULL) != 1)
642 BUG("malformed internal diff-index command line");
builtin/diff-files.c
+1 -1
@@ -25,7 +25,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
25 usage(diff_files_usage);
26
27 git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
28 - init_revisions(&rev, prefix);
28 + repo_init_revisions(the_repository, &rev, prefix);
29 rev.abbrev = 0;
30 precompose_argv(argc, argv);
31
builtin/diff-index.c
+1 -1
@@ -22,7 +22,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
22 usage(diff_cache_usage);
23
24 git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
25 - init_revisions(&rev, prefix);
25 + repo_init_revisions(the_repository, &rev, prefix);
26 rev.abbrev = 0;
27 precompose_argv(argc, argv);
28
builtin/diff-tree.c
+1 -1
@@ -110,7 +110,7 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
110 usage(diff_tree_usage);
111
112 git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
113 - init_revisions(opt, prefix);
113 + repo_init_revisions(the_repository, opt, prefix);
114 if (read_cache() < 0)
115 die(_("index file corrupt"));
116 opt->abbrev = 0;
builtin/diff.c
+1 -1
@@ -318,7 +318,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
318 git_config(git_diff_ui_config, NULL);
319 precompose_argv(argc, argv);
320
321 - init_revisions(&rev, prefix);
321 + repo_init_revisions(the_repository, &rev, prefix);
322
323 if (no_index && argc != i + 2) {
324 if (no_index == DIFF_NO_INDEX_IMPLICIT) {
builtin/fast-export.c
+1 -1
@@ -1033,7 +1033,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
1033 /* we handle encodings */
1034 git_config(git_default_config, NULL);
1035
1036 - init_revisions(&revs, prefix);
1036 + repo_init_revisions(the_repository, &revs, prefix);
1037 init_revision_sources(&revision_sources);
1038 revs.topo_order = 1;
1039 revs.sources = &revision_sources;
builtin/fmt-merge-msg.c
+1 -1
@@ -642,7 +642,7 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out,
642 struct rev_info rev;
643
644 head = lookup_commit_or_die(&head_oid, "HEAD");
645 - init_revisions(&rev, NULL);
645 + repo_init_revisions(the_repository, &rev, NULL);
646 rev.commit_format = CMIT_FMT_ONELINE;
647 rev.ignore_merges = 1;
648 rev.limited = 1;
builtin/log.c
+8 -8
@@ -467,7 +467,7 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix)
467 init_log_defaults();
468 git_config(git_log_config, NULL);
469
470 - init_revisions(&rev, prefix);
470 + repo_init_revisions(the_repository, &rev, prefix);
471 rev.diff = 1;
472 rev.simplify_history = 0;
473 memset(&opt, 0, sizeof(opt));
@@ -585,7 +585,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
585 git_config(git_log_config, NULL);
586
587 memset(&match_all, 0, sizeof(match_all));
588 - init_revisions(&rev, prefix);
588 + repo_init_revisions(the_repository, &rev, prefix);
589 rev.diff = 1;
590 rev.always_show_header = 1;
591 rev.no_walk = REVISION_WALK_NO_WALK_SORTED;
@@ -665,7 +665,7 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)
665 init_log_defaults();
666 git_config(git_log_config, NULL);
667
668 - init_revisions(&rev, prefix);
668 + repo_init_revisions(the_repository, &rev, prefix);
669 init_reflog_walk(&rev.reflog_info);
670 rev.verbose_header = 1;
671 memset(&opt, 0, sizeof(opt));
@@ -704,7 +704,7 @@ int cmd_log(int argc, const char **argv, const char *prefix)
704 init_log_defaults();
705 git_config(git_log_config, NULL);
706
707 - init_revisions(&rev, prefix);
707 + repo_init_revisions(the_repository, &rev, prefix);
708 rev.always_show_header = 1;
709 memset(&opt, 0, sizeof(opt));
710 opt.def = "HEAD";
@@ -917,7 +917,7 @@ static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids)
917 init_patch_ids(the_repository, ids);
918
919 /* given a range a..b get all patch ids for b..a */
920 - init_revisions(&check_rev, rev->prefix);
920 + repo_init_revisions(the_repository, &check_rev, rev->prefix);
921 check_rev.max_parents = 1;
922 o1->flags ^= UNINTERESTING;
923 o2->flags ^= UNINTERESTING;
@@ -1367,7 +1367,7 @@ static void prepare_bases(struct base_tree_info *bases,
1367
1368 oidcpy(&bases->base_commit, &base->object.oid);
1369
1370 - init_revisions(&revs, NULL);
1370 + repo_init_revisions(the_repository, &revs, NULL);
1371 revs.max_parents = 1;
1372 revs.topo_order = 1;
1373 for (i = 0; i < total; i++) {
@@ -1528,7 +1528,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
1528 extra_cc.strdup_strings = 1;
1529 init_log_defaults();
1530 git_config(git_format_config, NULL);
1531 - init_revisions(&rev, prefix);
1531 + repo_init_revisions(the_repository, &rev, prefix);
1532 rev.commit_format = CMIT_FMT_EMAIL;
1533 rev.expand_tabs_in_log_default = 0;
1534 rev.verbose_header = 1;
@@ -1939,7 +1939,7 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
1939 }
1940 }
1941
1942 - init_revisions(&revs, prefix);
1942 + repo_init_revisions(the_repository, &revs, prefix);
1943 revs.max_parents = 1;
1944
1945 if (add_pending_commit(head, &revs, 0))
builtin/merge.c
+2 -2
@@ -389,7 +389,7 @@ static void squash_message(struct commit *commit, struct commit_list *remotehead
389
390 printf(_("Squash commit -- not updating HEAD\n"));
391
392 - init_revisions(&rev, NULL);
392 + repo_init_revisions(the_repository, &rev, NULL);
393 rev.ignore_merges = 1;
394 rev.commit_format = CMIT_FMT_MEDIUM;
395
@@ -911,7 +911,7 @@ static int evaluate_result(void)
911 struct rev_info rev;
912
913 /* Check how many files differ. */
914 - init_revisions(&rev, "");
914 + repo_init_revisions(the_repository, &rev, "");
915 setup_revisions(0, NULL, &rev, NULL);
916 rev.diffopt.output_format |=
917 DIFF_FORMAT_CALLBACK;
builtin/pack-objects.c
+1 -1
@@ -2989,7 +2989,7 @@ static void get_object_list(int ac, const char **av)
2989 char line[1000];
2990 int flags = 0;
2991
2992 - init_revisions(&revs, NULL);
2992 + repo_init_revisions(the_repository, &revs, NULL);
2993 save_commit_buffer = 0;
2994 setup_revisions(ac, av, &revs, NULL);
2995
builtin/prune.c
+1 -1
@@ -120,7 +120,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
120 save_commit_buffer = 0;
121 read_replace_refs = 0;
122 ref_paranoia = 1;
123 - init_revisions(&revs, prefix);
123 + repo_init_revisions(the_repository, &revs, prefix);
124
125 argc = parse_options(argc, argv, prefix, options, prune_usage, 0);
126
builtin/reflog.c
+1 -1
@@ -567,7 +567,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
567 * from reflog if the repository was pruned with older git.
568 */
569 if (cb.cmd.stalefix) {
570 - init_revisions(&cb.cmd.revs, prefix);
570 + repo_init_revisions(the_repository, &cb.cmd.revs, prefix);
571 if (flags & EXPIRE_REFLOGS_VERBOSE)
572 printf("Marking reachable objects...");
573 mark_reachable_objects(&cb.cmd.revs, 0, 0, NULL);
builtin/rev-list.c
+1 -1
@@ -370,7 +370,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
370 usage(rev_list_usage);
371
372 git_config(git_default_config, NULL);
373 - init_revisions(&revs, prefix);
373 + repo_init_revisions(the_repository, &revs, prefix);
374 revs.abbrev = DEFAULT_ABBREV;
375 revs.commit_format = CMIT_FMT_UNSPECIFIED;
376
builtin/revert.c
+1 -1
@@ -174,7 +174,7 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
174 } else {
175 struct setup_revision_opt s_r_opt;
176 opts->revs = xmalloc(sizeof(*opts->revs));
177 - init_revisions(opts->revs, NULL);
177 + repo_init_revisions(the_repository, opts->revs, NULL);
178 opts->revs->no_walk = REVISION_WALK_NO_WALK_UNSORTED;
179 if (argc < 2)
180 usage_with_options(usage_str, options);
builtin/shortlog.c
+1 -1
@@ -278,7 +278,7 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
278
279 git_config(git_default_config, NULL);
280 shortlog_init(&log);
281 - init_revisions(&rev, prefix);
281 + repo_init_revisions(the_repository, &rev, prefix);
282 parse_options_start(&ctx, argc, argv, prefix, options,
283 PARSE_OPT_KEEP_DASHDASH | PARSE_OPT_KEEP_ARGV0);
284
builtin/submodule--helper.c
+1 -1
@@ -792,7 +792,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid,
792 path, NULL);
793
794 git_config(git_diff_basic_config, NULL);
795 - init_revisions(&rev, prefix);
795 + repo_init_revisions(the_repository, &rev, prefix);
796 rev.abbrev = 0;
797 diff_files_args.argc = setup_revisions(diff_files_args.argc,
798 diff_files_args.argv,
bundle.c
+2 -2
@@ -140,7 +140,7 @@ int verify_bundle(struct bundle_header *header, int verbose)
140 int i, ret = 0, req_nr;
141 const char *message = _("Repository lacks these prerequisite commits:");
142
143 - init_revisions(&revs, NULL);
143 + repo_init_revisions(the_repository, &revs, NULL);
144 for (i = 0; i < p->nr; i++) {
145 struct ref_list_entry *e = p->list + i;
146 struct object *o = parse_object(the_repository, &e->oid);
@@ -441,7 +441,7 @@ int create_bundle(struct bundle_header *header, const char *path,
441
442 /* init revs to list objects for pack-objects later */
443 save_commit_buffer = 0;
444 - init_revisions(&revs, NULL);
444 + repo_init_revisions(the_repository, &revs, NULL);
445
446 /* write prerequisites */
447 if (compute_and_write_prerequisites(bundle_fd, &revs, argc, argv))
diff-lib.c
+2 -2
@@ -542,7 +542,7 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt)
542 {
543 struct rev_info revs;
544
545 - init_revisions(&revs, NULL);
545 + repo_init_revisions(the_repository, &revs, NULL);
546 copy_pathspec(&revs.prune_data, &opt->pathspec);
547 revs.diffopt = *opt;
548
@@ -557,7 +557,7 @@ int index_differs_from(const char *def, const struct diff_flags *flags,
557 struct rev_info rev;
558 struct setup_revision_opt opt;
559
560 - init_revisions(&rev, NULL);
560 + repo_init_revisions(the_repository, &rev, NULL);
561 memset(&opt, 0, sizeof(opt));
562 opt.def = def;
563 setup_revisions(0, NULL, &rev, &opt);
http-push.c
+1 -1
@@ -1925,7 +1925,7 @@ int cmd_main(int argc, const char **argv)
1925 if (!push_all && !is_null_oid(&ref->old_oid))
1926 argv_array_pushf(&commit_argv, "^%s",
1927 oid_to_hex(&ref->old_oid));
1928 - init_revisions(&revs, setup_git_directory());
1928 + repo_init_revisions(the_repository, &revs, setup_git_directory());
1929 setup_revisions(commit_argv.argc, commit_argv.argv, &revs, NULL);
1930 revs.edge_hint = 0; /* just in case */
1931
merge-recursive.c
+1 -1
@@ -1115,7 +1115,7 @@ static int find_first_merges(struct object_array *result, const char *path,
1115 /* get all revisions that merge commit a */
1116 xsnprintf(merged_revision, sizeof(merged_revision), "^%s",
1117 oid_to_hex(&a->object.oid));
1118 - init_revisions(&revs, NULL);
1118 + repo_init_revisions(the_repository, &revs, NULL);
1119 rev_opts.submodule = path;
1120 /* FIXME: can't handle linked worktrees in submodules yet */
1121 revs.single_worktree = path != NULL;
pack-bitmap-write.c
+1 -1
@@ -261,7 +261,7 @@ void bitmap_writer_build(struct packing_data *to_pack)
261 if (writer.show_progress)
262 writer.progress = start_progress("Building bitmaps", writer.selected_nr);
263
264 - init_revisions(&revs, NULL);
264 + repo_init_revisions(the_repository, &revs, NULL);
265 revs.tag_objects = 1;
266 revs.tree_objects = 1;
267 revs.blob_objects = 1;
ref-filter.c
+1 -1
@@ -2138,7 +2138,7 @@ static void do_merge_filter(struct ref_filter_cbdata *ref_cbdata)
2138 struct ref_array *array = ref_cbdata->array;
2139 struct commit **to_clear = xcalloc(sizeof(struct commit *), array->nr);
2140
2141 - init_revisions(&revs, NULL);
2141 + repo_init_revisions(the_repository, &revs, NULL);
2142
2143 for (i = 0; i < array->nr; i++) {
2144 struct ref_array_item *item = array->items[i];
remote.c
+1 -1
@@ -1903,7 +1903,7 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs,
1903 oid_to_hex(&theirs->object.oid));
1904 argv_array_push(&argv, "--");
1905
1906 - init_revisions(&revs, NULL);
1906 + repo_init_revisions(the_repository, &revs, NULL);
1907 setup_revisions(argv.argc, argv.argv, &revs, NULL);
1908 if (prepare_revision_walk(&revs))
1909 die("revision walk setup failed");
revision.c
+18 -14
@@ -877,7 +877,7 @@ static void cherry_pick_list(struct commit_list *list, struct rev_info *revs)
877 return;
878
879 left_first = left_count < right_count;
880 - init_patch_ids(the_repository, &ids);
880 + init_patch_ids(revs->repo, &ids);
881 ids.diffopts.pathspec = revs->diffopt.pathspec;
882
883 /* Compute patch-ids for one side */
@@ -1370,8 +1370,8 @@ void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags)
1370 {
1371 struct worktree **worktrees, **p;
1372
1373 - read_cache();
1374 - do_add_index_objects_to_pending(revs, &the_index);
1373 + read_index(revs->repo->index);
1374 + do_add_index_objects_to_pending(revs, revs->repo->index);
1375
1376 if (revs->single_worktree)
1377 return;
@@ -1439,10 +1439,13 @@ static int add_parents_only(struct rev_info *revs, const char *arg_, int flags,
1439 return 1;
1440 }
1441
1442 -void init_revisions(struct rev_info *revs, const char *prefix)
1442 +void repo_init_revisions(struct repository *r,
1443 + struct rev_info *revs,
1444 + const char *prefix)
1445 {
1446 memset(revs, 0, sizeof(*revs));
1447
1448 + revs->repo = r;
1449 revs->abbrev = DEFAULT_ABBREV;
1450 revs->ignore_merges = 1;
1451 revs->simplify_history = 1;
@@ -1464,11 +1467,11 @@ void init_revisions(struct rev_info *revs, const char *prefix)
1467 revs->commit_format = CMIT_FMT_DEFAULT;
1468 revs->expand_tabs_in_log_default = 8;
1469
1467 - init_grep_defaults(the_repository);
1468 - grep_init(&revs->grep_filter, the_repository, prefix);
1470 + init_grep_defaults(revs->repo);
1471 + grep_init(&revs->grep_filter, revs->repo, prefix);
1472 revs->grep_filter.status_only = 1;
1473
1471 - repo_diff_setup(the_repository, &revs->diffopt);
1474 + repo_diff_setup(revs->repo, &revs->diffopt);
1475 if (prefix && !revs->diffopt.prefix) {
1476 revs->diffopt.prefix = prefix;
1477 revs->diffopt.prefix_length = strlen(prefix);
@@ -1496,6 +1499,7 @@ static void prepare_show_merge(struct rev_info *revs)
1499 struct object_id oid;
1500 const char **prune = NULL;
1501 int i, prune_num = 1; /* counting terminating NULL */
1502 + struct index_state *istate = revs->repo->index;
1503
1504 if (get_oid("HEAD", &oid))
1505 die("--merge without HEAD?");
@@ -1511,20 +1515,20 @@ static void prepare_show_merge(struct rev_info *revs)
1515 free_commit_list(bases);
1516 head->object.flags |= SYMMETRIC_LEFT;
1517
1514 - if (!active_nr)
1515 - read_cache();
1516 - for (i = 0; i < active_nr; i++) {
1517 - const struct cache_entry *ce = active_cache[i];
1518 + if (!istate->cache_nr)
1519 + read_index(istate);
1520 + for (i = 0; i < istate->cache_nr; i++) {
1521 + const struct cache_entry *ce = istate->cache[i];
1522 if (!ce_stage(ce))
1523 continue;
1520 - if (ce_path_match(&the_index, ce, &revs->prune_data, NULL)) {
1524 + if (ce_path_match(istate, ce, &revs->prune_data, NULL)) {
1525 prune_num++;
1526 REALLOC_ARRAY(prune, prune_num);
1527 prune[prune_num-2] = ce->name;
1528 prune[prune_num-1] = NULL;
1529 }
1526 - while ((i+1 < active_nr) &&
1527 - ce_same_name(ce, active_cache[i+1]))
1530 + while ((i+1 < istate->cache_nr) &&
1531 + ce_same_name(ce, istate->cache[i+1]))
1532 i++;
1533 }
1534 clear_pathspec(&revs->prune_data);
revision.h
+10 -3
@@ -28,8 +28,9 @@
28 #define DECORATE_SHORT_REFS 1
29 #define DECORATE_FULL_REFS 2
30
31 -struct rev_info;
31 struct log_info;
32 +struct repository;
33 +struct rev_info;
34 struct string_list;
35 struct saved_parents;
36 define_shared_commit_slab(revision_sources, char *);
@@ -60,6 +61,7 @@ struct rev_info {
61 /* Starting list */
62 struct commit_list *commits;
63 struct object_array pending;
64 + struct repository *repo;
65
66 /* Parents of shown commits */
67 struct object_array boundary_commits;
@@ -248,12 +250,17 @@ extern volatile show_early_output_fn_t show_early_output;
250 struct setup_revision_opt {
251 const char *def;
252 void (*tweak)(struct rev_info *, struct setup_revision_opt *);
251 - const char *submodule;
253 + const char *submodule; /* TODO: drop this and use rev_info->repo */
254 int assume_dashdash;
255 unsigned revarg_opt;
256 };
257
256 -void init_revisions(struct rev_info *revs, const char *prefix);
258 +#ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS
259 +#define init_revisions(revs, prefix) repo_init_revisions(the_repository, revs, prefix)
260 +#endif
261 +void repo_init_revisions(struct repository *r,
262 + struct rev_info *revs,
263 + const char *prefix);
264 int setup_revisions(int argc, const char **argv, struct rev_info *revs,
265 struct setup_revision_opt *);
266 void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
sequencer.c
+4 -4
@@ -1172,7 +1172,7 @@ void print_commit_summary(const char *prefix, const struct object_id *oid,
1172 strbuf_release(&author_ident);
1173 strbuf_release(&committer_ident);
1174
1175 - init_revisions(&rev, prefix);
1175 + repo_init_revisions(the_repository, &rev, prefix);
1176 setup_revisions(0, NULL, &rev, NULL);
1177
1178 rev.diff = 1;
@@ -2595,7 +2595,7 @@ static int make_patch(struct commit *commit, struct replay_opts *opts)
2595
2596 strbuf_addf(&buf, "%s/patch", get_dir(opts));
2597 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
2598 - init_revisions(&log_tree_opt, NULL);
2598 + repo_init_revisions(the_repository, &log_tree_opt, NULL);
2599 log_tree_opt.abbrev = 0;
2600 log_tree_opt.diff = 1;
2601 log_tree_opt.diffopt.output_format = DIFF_FORMAT_PATCH;
@@ -3506,7 +3506,7 @@ cleanup_head_ref:
3506 struct object_id orig, head;
3507
3508 memset(&log_tree_opt, 0, sizeof(log_tree_opt));
3509 - init_revisions(&log_tree_opt, NULL);
3509 + repo_init_revisions(the_repository, &log_tree_opt, NULL);
3510 log_tree_opt.diff = 1;
3511 log_tree_opt.diffopt.output_format =
3512 DIFF_FORMAT_DIFFSTAT;
@@ -4241,7 +4241,7 @@ int sequencer_make_script(FILE *out, int argc, const char **argv,
4241 const char *insn = flags & TODO_LIST_ABBREVIATE_CMDS ? "p" : "pick";
4242 int rebase_merges = flags & TODO_LIST_REBASE_MERGES;
4243
4244 - init_revisions(&revs, NULL);
4244 + repo_init_revisions(the_repository, &revs, NULL);
4245 revs.verbose_header = 1;
4246 if (!rebase_merges)
4247 revs.max_parents = 1;
shallow.c
+1 -1
@@ -184,7 +184,7 @@ struct commit_list *get_shallow_commits_by_rev_list(int ac, const char **av,
184
185 is_repository_shallow(the_repository); /* make sure shallows are read */
186
187 - init_revisions(&revs, NULL);
187 + repo_init_revisions(the_repository, &revs, NULL);
188 save_commit_buffer = 0;
189 setup_revisions(ac, av, &revs, NULL);
190
submodule.c
+3 -3
@@ -428,7 +428,7 @@ static int prepare_submodule_summary(struct rev_info *rev, const char *path,
428 {
429 struct commit_list *list;
430
431 - init_revisions(rev, NULL);
431 + repo_init_revisions(the_repository, rev, NULL);
432 setup_revisions(0, NULL, rev, NULL);
433 rev->left_right = 1;
434 rev->first_parent_only = 1;
@@ -773,7 +773,7 @@ static void collect_changed_submodules(struct index_state *istate,
773 struct rev_info rev;
774 const struct commit *commit;
775
776 - init_revisions(&rev, NULL);
776 + repo_init_revisions(the_repository, &rev, NULL);
777 setup_revisions(argv->argc, argv->argv, &rev, NULL);
778 if (prepare_revision_walk(&rev))
779 die("revision walk setup failed");
@@ -784,7 +784,7 @@ static void collect_changed_submodules(struct index_state *istate,
784 data.changed = changed;
785 data.commit_oid = &commit->object.oid;
786
787 - init_revisions(&diff_rev, NULL);
787 + repo_init_revisions(the_repository, &diff_rev, NULL);
788 diff_rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK;
789 diff_rev.diffopt.format_callback = collect_changed_submodules_cb;
790 diff_rev.diffopt.format_callback_data = &data;
t/helper/test-revision-walking.c
+1 -1
@@ -32,7 +32,7 @@ static int run_revision_walk(void)
32 int argc = ARRAY_SIZE(argv) - 1;
33 int got_revision = 0;
34
35 - init_revisions(&rev, NULL);
35 + repo_init_revisions(the_repository, &rev, NULL);
36 setup_revisions(argc, argv, &rev, NULL);
37 if (prepare_revision_walk(&rev))
38 die("revision walk setup failed");
wt-status.c
+5 -5
@@ -582,7 +582,7 @@ static void wt_status_collect_changes_worktree(struct wt_status *s)
582 {
583 struct rev_info rev;
584
585 - init_revisions(&rev, NULL);
585 + repo_init_revisions(the_repository, &rev, NULL);
586 setup_revisions(0, NULL, &rev, NULL);
587 rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK;
588 rev.diffopt.flags.dirty_submodules = 1;
@@ -607,7 +607,7 @@ static void wt_status_collect_changes_index(struct wt_status *s)
607 struct rev_info rev;
608 struct setup_revision_opt opt;
609
610 - init_revisions(&rev, NULL);
610 + repo_init_revisions(the_repository, &rev, NULL);
611 memset(&opt, 0, sizeof(opt));
612 opt.def = s->is_initial ? empty_tree_oid_hex() : s->reference;
613 setup_revisions(0, NULL, &rev, &opt);
@@ -982,7 +982,7 @@ static void wt_longstatus_print_verbose(struct wt_status *s)
982 int dirty_submodules;
983 const char *c = color(WT_STATUS_HEADER, s);
984
985 - init_revisions(&rev, NULL);
985 + repo_init_revisions(the_repository, &rev, NULL);
986 rev.diffopt.flags.allow_textconv = 1;
987 rev.diffopt.ita_invisible_in_index = 1;
988
@@ -2314,7 +2314,7 @@ int has_unstaged_changes(int ignore_submodules)
2314 struct rev_info rev_info;
2315 int result;
2316
2317 - init_revisions(&rev_info, NULL);
2317 + repo_init_revisions(the_repository, &rev_info, NULL);
2318 if (ignore_submodules) {
2319 rev_info.diffopt.flags.ignore_submodules = 1;
2320 rev_info.diffopt.flags.override_submodule_config = 1;
@@ -2336,7 +2336,7 @@ int has_uncommitted_changes(int ignore_submodules)
2336 if (is_cache_unborn())
2337 return 0;
2338
2339 - init_revisions(&rev_info, NULL);
2339 + repo_init_revisions(the_repository, &rev_info, NULL);
2340 if (ignore_submodules)
2341 rev_info.diffopt.flags.ignore_submodules = 1;
2342 rev_info.diffopt.flags.quick = 1;