From: Firmin Martin <firminmartin24@gmail.com>
To: Firmin Martin <firminmartin24@gmail.com>, git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>,
Johannes Schindelin <johannes.schindelin@gmail.com>,
Erik Faye-Lund <kusmabite@gmail.com>,
Denton Liu <liu.denton@gmail.com>
Subject: [PATCH v1 2/8] format-patch: confirmation whenever patches exist
Date: Thu, 6 May 2021 18:50:56 +0200 [thread overview]
Message-ID: <20210506165102.123739-3-firminmartin24@gmail.com> (raw)
In-Reply-To: <20210506165102.123739-1-firminmartin24@gmail.com>
Currently, git-format-patch, along with the option --cover-letter,
unconditionaly overwrites a cover letter with the same name (if
present). Although this is a desired behaviour for patches which are
auto-generated from Git commits log, it might not be the case for a
cover letter whose the content is meticulously written manually.
Particulary, this behaviour could be awkward in the following
hypothetical situations:
* The user can easily erase a cover letter coming from prior versions or
another patch series by reusing an old command line (e.g. autocompleted
from the shell history).
* Assuming that the user is writing a cover letter and realizes that
small changes should be made. They make the change, amend and
format-patch again to regenerate patches. If it happens that they use
the same command again (e.g. with --cover-letter), the cover letter
being written is gone.
This patch addresses this issue by asking confirmation from the user
whenever a cover letter or a patch with the same name already exists.
Signed-off-by: Firmin Martin <firminmartin24@gmail.com>
---
builtin/log.c | 33 ++++++++++++++++++++++++++++-----
1 file changed, 28 insertions(+), 5 deletions(-)
diff --git a/builtin/log.c b/builtin/log.c
index 6102893fcc..bada3db9eb 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -35,6 +35,7 @@
#include "repository.h"
#include "commit-reach.h"
#include "range-diff.h"
+#include "prompt.h"
#define MAIL_DEFAULT_WRAP 72
#define COVER_FROM_AUTO_MAX_SUBJECT_LEN 100
@@ -959,6 +960,10 @@ static int open_next_file(struct commit *commit, const char *subject,
struct rev_info *rev, int quiet)
{
struct strbuf filename = STRBUF_INIT;
+ struct strbuf file_exists_prompt = STRBUF_INIT;
+ const char *yesno;
+ static int not_prompted = 1;
+ int res = 0;
if (output_directory) {
strbuf_addstr(&filename, output_directory);
@@ -972,17 +977,35 @@ static int open_next_file(struct commit *commit, const char *subject,
else
fmt_output_subject(&filename, subject, rev);
- if (!quiet)
- printf("%s\n", filename.buf + outdir_offset);
+ if (not_prompted && !access(filename.buf, F_OK)) {
+
+ /*
+ * TRANSLATORS: Make sure to include [Y] and [n] in your
+ * translation. The program will only accept English input
+ * at this point.
+ */
+ strbuf_addf(&file_exists_prompt, _("The file '%s' already exists.\n"
+ "Would you overwrite this file and subsequent ones [Y/n]? "), filename.buf);
+ yesno = git_prompt(file_exists_prompt.buf, PROMPT_ECHO);
+ not_prompted = 0;
+ if (tolower(*yesno) == 'n') {
+ res = -1;
+ goto done;
+ }
+ }
if ((rev->diffopt.file = fopen(filename.buf, "w")) == NULL) {
error_errno(_("cannot open patch file %s"), filename.buf);
- strbuf_release(&filename);
- return -1;
+ res = -1;
+ goto done;
}
+ if (!quiet)
+ printf("%s\n", filename.buf + outdir_offset);
+done:
strbuf_release(&filename);
- return 0;
+ strbuf_release(&file_exists_prompt);
+ return res;
}
static void get_patch_ids(struct rev_info *rev, struct patch_ids *ids)
--
2.31.1.449.g4a44fa8106
next prev parent reply other threads:[~2021-05-06 16:52 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-06 16:50 [PATCH v1 0/8] format-patch: introduce --confirm-overwrite Firmin Martin
2021-05-06 16:50 ` [PATCH v1 1/8] compat/terminal: let prompt accept input from pipe Firmin Martin
2021-05-06 23:37 ` Junio C Hamano
2021-05-07 4:54 ` Jeff King
2021-05-07 5:25 ` Junio C Hamano
2021-05-10 4:18 ` Firmin Martin
2021-05-10 21:32 ` Jeff King
2021-05-11 3:38 ` Junio C Hamano
2021-05-11 6:10 ` Jeff King
2021-05-11 6:17 ` Junio C Hamano
2021-05-11 6:37 ` Jeff King
2021-05-06 16:50 ` Firmin Martin [this message]
2021-05-06 23:48 ` [PATCH v1 2/8] format-patch: confirmation whenever patches exist Junio C Hamano
2021-05-10 3:30 ` Firmin Martin
2021-05-10 7:32 ` Junio C Hamano
2021-05-11 3:17 ` Firmin Martin
2021-05-06 16:50 ` [PATCH v1 3/8] format-patch: add config option confirmOverwrite Firmin Martin
2021-05-06 16:50 ` [PATCH v1 4/8] format-patch: add the option --confirm-overwrite Firmin Martin
2021-05-06 16:50 ` [PATCH v1 5/8] t4014: test patches overwrite confirmation Firmin Martin
2021-05-06 16:51 ` [PATCH v1 6/8] t4014: fix tests overwriting cover letter in silent Firmin Martin
2021-05-06 16:51 ` [PATCH v1 7/8] doc/format-patch: describe --confirm-overwrite Firmin Martin
2021-05-07 3:32 ` Bagas Sanjaya
2021-05-10 4:22 ` Firmin Martin
2021-05-06 16:51 ` [PATCH v1 8/8] config/format: describe format.confirmOverwrite Firmin Martin
2021-05-06 22:33 ` [PATCH v1 0/8] format-patch: introduce --confirm-overwrite Junio C Hamano
2021-05-11 0:18 ` Firmin Martin
2021-05-07 1:46 ` Felipe Contreras
2021-05-07 8:55 ` Denton Liu
2021-05-11 1:09 ` Firmin Martin
2021-05-11 5:12 ` Felipe Contreras
2021-05-11 5:03 ` Felipe Contreras
2021-05-07 14:02 ` Sergey Organov
2021-05-11 0:46 ` Firmin Martin
2021-05-10 12:02 ` Ævar Arnfjörð Bjarmason
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210506165102.123739-3-firminmartin24@gmail.com \
--to=firminmartin24@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmail.com \
--cc=kusmabite@gmail.com \
--cc=liu.denton@gmail.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).