diff --git a/builtin/am.c b/builtin/am.c index 232f3962d78..f0eeec82a9e 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -2033,7 +2033,7 @@ static int clean_index(const struct object_id *head, const struct object_id *rem static void am_rerere_clear(void) { struct string_list merge_rr = STRING_LIST_INIT_DUP; - rerere_clear(&merge_rr); + rerere_clear(the_repository, &merge_rr); string_list_clear(&merge_rr, 1); } diff --git a/builtin/rebase--interactive.c b/builtin/rebase--interactive.c index d867050fd25..bd7d39e2af9 100644 --- a/builtin/rebase--interactive.c +++ b/builtin/rebase--interactive.c @@ -233,7 +233,7 @@ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix) case SKIP: { struct string_list merge_rr = STRING_LIST_INIT_DUP; - rerere_clear(&merge_rr); + rerere_clear(the_repository, &merge_rr); /* fallthrough */ case CONTINUE: ret = sequencer_continue(the_repository, &opts); diff --git a/builtin/rebase.c b/builtin/rebase.c index d9bedecf86b..bc07d932a55 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -997,7 +997,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix) options.action = "skip"; - rerere_clear(&merge_rr); + rerere_clear(the_repository, &merge_rr); string_list_clear(&merge_rr, 1); if (reset_head(NULL, "reset", NULL, 0, NULL, NULL) < 0) @@ -1010,7 +1010,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix) struct string_list merge_rr = STRING_LIST_INIT_DUP; options.action = "abort"; - rerere_clear(&merge_rr); + rerere_clear(the_repository, &merge_rr); string_list_clear(&merge_rr, 1); if (read_basic_state(&options)) diff --git a/builtin/rerere.c b/builtin/rerere.c index e89ccbc524a..6f28c19b20d 100644 --- a/builtin/rerere.c +++ b/builtin/rerere.c @@ -82,11 +82,12 @@ int cmd_rerere(int argc, const char **argv, const char *prefix) } if (!strcmp(argv[0], "clear")) { - rerere_clear(&merge_rr); + rerere_clear(the_repository, &merge_rr); } else if (!strcmp(argv[0], "gc")) - rerere_gc(&merge_rr); + rerere_gc(the_repository, &merge_rr); else if (!strcmp(argv[0], "status")) { - if (setup_rerere(&merge_rr, flags | RERERE_READONLY) < 0) + if (setup_rerere(the_repository, &merge_rr, + flags | RERERE_READONLY) < 0) return 0; for (i = 0; i < merge_rr.nr; i++) printf("%s\n", merge_rr.items[i].string); @@ -101,7 +102,8 @@ int cmd_rerere(int argc, const char **argv, const char *prefix) merge_rr.items[i].util = NULL; } } else if (!strcmp(argv[0], "diff")) { - if (setup_rerere(&merge_rr, flags | RERERE_READONLY) < 0) + if (setup_rerere(the_repository, &merge_rr, + flags | RERERE_READONLY) < 0) return 0; for (i = 0; i < merge_rr.nr; i++) { const char *path = merge_rr.items[i].string; diff --git a/rerere.c b/rerere.c index b5b2357411f..13624038e66 100644 --- a/rerere.c +++ b/rerere.c @@ -198,10 +198,10 @@ static struct rerere_id *new_rerere_id(unsigned char *sha1) * work on (i.e. what is left by the previous invocation of "git * rerere" during the current conflict resolution session). */ -static void read_rr(struct string_list *rr) +static void read_rr(struct repository *r, struct string_list *rr) { struct strbuf buf = STRBUF_INIT; - FILE *in = fopen_or_warn(git_path_merge_rr(the_repository), "r"); + FILE *in = fopen_or_warn(git_path_merge_rr(r), "r"); if (!in) return; @@ -593,7 +593,7 @@ int rerere_remaining(struct repository *r, struct string_list *merge_rr) { int i; - if (setup_rerere(merge_rr, RERERE_READONLY)) + if (setup_rerere(r, merge_rr, RERERE_READONLY)) return 0; if (read_index(r->index) < 0) return error(_("index file corrupt")); @@ -882,7 +882,7 @@ static int is_rerere_enabled(void) return 1; } -int setup_rerere(struct string_list *merge_rr, int flags) +int setup_rerere(struct repository *r, struct string_list *merge_rr, int flags) { int fd; @@ -896,9 +896,9 @@ int setup_rerere(struct string_list *merge_rr, int flags) fd = 0; else fd = hold_lock_file_for_update(&write_lock, - git_path_merge_rr(the_repository), + git_path_merge_rr(r), LOCK_DIE_ON_ERROR); - read_rr(merge_rr); + read_rr(r, merge_rr); return fd; } @@ -912,7 +912,7 @@ int repo_rerere(struct repository *r, int flags) struct string_list merge_rr = STRING_LIST_INIT_DUP; int fd, status; - fd = setup_rerere(&merge_rr, flags); + fd = setup_rerere(r, &merge_rr, flags); if (fd < 0) return 0; status = do_plain_rerere(r, &merge_rr, fd); @@ -1110,7 +1110,7 @@ int rerere_forget(struct repository *r, struct pathspec *pathspec) if (read_index(r->index) < 0) return error(_("index file corrupt")); - fd = setup_rerere(&merge_rr, RERERE_NOAUTOUPDATE); + fd = setup_rerere(r, &merge_rr, RERERE_NOAUTOUPDATE); if (fd < 0) return 0; @@ -1178,7 +1178,7 @@ static void prune_one(struct rerere_id *id, unlink_rr_item(id); } -void rerere_gc(struct string_list *rr) +void rerere_gc(struct repository *r, struct string_list *rr) { struct string_list to_remove = STRING_LIST_INIT_DUP; DIR *dir; @@ -1188,7 +1188,7 @@ void rerere_gc(struct string_list *rr) timestamp_t cutoff_noresolve = now - 15 * 86400; timestamp_t cutoff_resolve = now - 60 * 86400; - if (setup_rerere(rr, 0) < 0) + if (setup_rerere(r, rr, 0) < 0) return; git_config_get_expiry_in_days("gc.rerereresolved", &cutoff_resolve, now); @@ -1236,11 +1236,11 @@ void rerere_gc(struct string_list *rr) * * NEEDSWORK: shouldn't we be calling this from "reset --hard"? */ -void rerere_clear(struct string_list *merge_rr) +void rerere_clear(struct repository *r, struct string_list *merge_rr) { int i; - if (setup_rerere(merge_rr, 0) < 0) + if (setup_rerere(r, merge_rr, 0) < 0) return; for (i = 0; i < merge_rr->nr; i++) { @@ -1250,6 +1250,6 @@ void rerere_clear(struct string_list *merge_rr) rmdir(rerere_path(id, NULL)); } } - unlink_or_warn(git_path_merge_rr(the_repository)); + unlink_or_warn(git_path_merge_rr(r)); rollback_lock_file(&write_lock); } diff --git a/rerere.h b/rerere.h index 5ad8864b3c7..c32d79c3bd8 100644 --- a/rerere.h +++ b/rerere.h @@ -23,7 +23,7 @@ struct rerere_id { int variant; }; -int setup_rerere(struct string_list *, int); +int setup_rerere(struct repository *,struct string_list *, int); #ifndef NO_THE_REPOSITORY_COMPATIBILITY_MACROS #define rerere(flags) repo_rerere(the_repository, flags) #endif @@ -37,8 +37,8 @@ int repo_rerere(struct repository *, int); const char *rerere_path(const struct rerere_id *, const char *file); int rerere_forget(struct repository *, struct pathspec *); int rerere_remaining(struct repository *, struct string_list *); -void rerere_clear(struct string_list *); -void rerere_gc(struct string_list *); +void rerere_clear(struct repository *, struct string_list *); +void rerere_gc(struct repository *, struct string_list *); #define OPT_RERERE_AUTOUPDATE(v) OPT_UYN(0, "rerere-autoupdate", (v), \ N_("update the index with reused conflict resolution if possible"))