[PATCH v1 3/8] format-patch: add config option confirmOverwrite
From: Firmin Martin <hidden>
Date: 2021-05-06 16:52:47
Subsystem:
the rest · Maintainer:
Linus Torvalds
Provide the configuration option format.confirmOverwrite. This option will decide whether a confirmation is required to overwrite cover letter or patches issued by git-format-patch. It accepts three values. * "never"/"always": never/always ask confirmation whenever cover letter or patches are subject to be overwritten. * "cover": ask confirmation only if a cover letter is subject to be overwritten. format.confirmOverwrite defaults to "cover" to avoid cover letter being written be overwritten mistakenly. Signed-off-by: Firmin Martin <redacted> --- builtin/log.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/builtin/log.c b/builtin/log.c
index bada3db9eb..ec9848da70 100644
--- a/builtin/log.c
+++ b/builtin/log.c@@ -816,6 +816,12 @@ enum auto_base_setting { AUTO_BASE_WHEN_ABLE }; +enum confirm_overwrite_setting { + CONFIRM_OVERWRITE_NEVER, + CONFIRM_OVERWRITE_ALWAYS, + CONFIRM_OVERWRITE_COVER +}; + static enum thread_level thread; static int do_signoff; static enum auto_base_setting auto_base;
@@ -827,6 +833,7 @@ static const char *config_output_directory; static enum cover_from_description cover_from_description_mode = COVER_FROM_MESSAGE; static int show_notes; static struct display_notes_opt notes_opt; +static enum confirm_overwrite_setting confirm_overwrite = CONFIRM_OVERWRITE_COVER; static enum cover_from_description parse_cover_from_description(const char *arg) {
@@ -844,6 +851,18 @@ static enum cover_from_description parse_cover_from_description(const char *arg) die(_("%s: invalid cover from description mode"), arg); } +static enum confirm_overwrite_setting parse_confirm_overwrite(const char *arg) +{ + if (!arg || !strcasecmp(arg, "cover")) + return CONFIRM_OVERWRITE_COVER; + else if (!strcasecmp(arg, "always")) + return CONFIRM_OVERWRITE_ALWAYS; + else if (!strcasecmp(arg, "never")) + return CONFIRM_OVERWRITE_NEVER; + else + die(_("%s: invalid file overwrite setting"), arg); +} + static int git_format_config(const char *var, const char *value, void *cb) { if (!strcmp(var, "format.headers")) {
@@ -949,6 +968,10 @@ static int git_format_config(const char *var, const char *value, void *cb) cover_from_description_mode = parse_cover_from_description(value); return 0; } + if (!strcmp(var, "format.confirmoverwrite")) { + confirm_overwrite = parse_confirm_overwrite(value); + return 0; + } return git_log_config(var, value, cb); }
@@ -977,7 +1000,10 @@ static int open_next_file(struct commit *commit, const char *subject, else fmt_output_subject(&filename, subject, rev); - if (not_prompted && !access(filename.buf, F_OK)) { + if (not_prompted && + ((rev->nr == 0 && confirm_overwrite == CONFIRM_OVERWRITE_COVER) || + confirm_overwrite == CONFIRM_OVERWRITE_ALWAYS) && + !access(filename.buf, F_OK)) { /* * TRANSLATORS: Make sure to include [Y] and [n] in your
--
2.31.1.449.g4a44fa8106