From: Dmitry Safonov <dima@arista.com> To: git@vger.kernel.org Cc: "Junio C Hamano" <gitster@pobox.com>, "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>, "Dmitry Safonov" <0x7f454c46@gmail.com>, "SZEDER Gábor" <szeder.dev@gmail.com>, "Dmitry Safonov" <dima@arista.com>, "Andrei Vagin" <avagin@openvz.org> Subject: [PATCHv3] send-email: Ask if a patch should be sent twice Date: Tue, 30 Jul 2019 21:33:27 +0100 [thread overview] Message-ID: <20190730203327.30958-1-dima@arista.com> (raw) I was almost certain that git won't let me send the same patch twice, but today I've managed to double-send a directory by a mistake: git send-email --to linux-kernel@vger.kernel.org /tmp/timens/ --cc 'Dmitry Safonov <0x7f454c46@gmail.com>' /tmp/timens/` [I haven't noticed that I put the directory twice ^^] Prevent this shipwreck from happening again by asking if a patch is sent multiple times on purpose. link: https://lkml.kernel.org/r/4d53ebc7-d5b2-346e-c383-606401d19d3a@gmail.com Cc: Andrei Vagin <avagin@openvz.org> Suggested-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Dmitry Safonov <dima@arista.com> --- v3: Use `test_i18ngrep` instead of plain `grep` v2: Moved the check under --validate, fixed tests, added a new test, updated documentation for --validate Documentation/git-send-email.txt | 2 ++ git-send-email.perl | 14 ++++++++++++++ t/t9001-send-email.sh | 15 +++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt index d93e5d0f58f0..0441bb1b5d3b 100644 --- a/Documentation/git-send-email.txt +++ b/Documentation/git-send-email.txt @@ -421,6 +421,8 @@ have been specified, in which case default to 'compose'. ('auto', 'base64', or 'quoted-printable') is used; this is due to SMTP limits as described by http://www.ietf.org/rfc/rfc5322.txt. + * Ask confirmation before sending patches multiple times + if the supplied patches set overlaps. -- + Default is the value of `sendemail.validate`; if this is not set, diff --git a/git-send-email.perl b/git-send-email.perl index 5f92c89c1c1b..c1638d06f81d 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -688,6 +688,9 @@ sub is_format_patch_arg { @files = handle_backup_files(@files); if ($validate) { + my %seen; + my @dupes = grep { $seen{$_}++ } @files; + foreach my $f (@files) { unless (-p $f) { my $error = validate_patch($f, $target_xfer_encoding); @@ -695,6 +698,17 @@ sub is_format_patch_arg { $f, $error); } } + if (@dupes) { + printf(__("Patches specified several times: \n")); + printf(__("%s \n" x @dupes), @dupes); + $_ = ask(__("Do you want to send those patches several times? Y/n "), + default => "y", + valid_re => qr/^(?:yes|y|no|n)/i); + if (/^n/i) { + cleanup_compose_files(); + exit(0); + } + } } if (@files) { diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh index 997f90b42b3e..496005af1763 100755 --- a/t/t9001-send-email.sh +++ b/t/t9001-send-email.sh @@ -555,6 +555,7 @@ test_expect_success $PREREQ 'In-Reply-To without --chain-reply-to' ' --no-chain-reply-to \ --in-reply-to="$(cat expect)" \ --smtp-server="$(pwd)/fake.sendmail" \ + --no-validate \ $patches $patches $patches \ 2>errors && # The first message is a reply to --in-reply-to @@ -577,6 +578,7 @@ test_expect_success $PREREQ 'In-Reply-To with --chain-reply-to' ' --chain-reply-to \ --in-reply-to="$(cat expect)" \ --smtp-server="$(pwd)/fake.sendmail" \ + --no-validate \ $patches $patches $patches \ 2>errors && sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt1 >actual && @@ -589,6 +591,19 @@ test_expect_success $PREREQ 'In-Reply-To with --chain-reply-to' ' test_cmp expect actual ' +test_expect_success $PREREQ 'ask confirmation for double-send' ' + clean_fake_sendmail && + echo y | \ + GIT_SEND_EMAIL_NOTTY=1 \ + git send-email --from=author@example.com \ + --to=nobody@example.com \ + --smtp-server="$(pwd)/fake.sendmail" \ + --validate \ + $patches $patches $patches \ + >stdout && + ! test_i18ngrep "Patches specified several times: " stdout +' + test_expect_success $PREREQ 'setup fake editor' ' write_script fake-editor <<-\EOF echo fake edit >>"$1" -- 2.22.0
next reply other threads:[~2019-07-30 20:33 UTC|newest] Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-07-30 20:33 Dmitry Safonov [this message] 2019-07-30 21:10 ` SZEDER Gábor 2019-07-30 21:19 ` Dmitry Safonov 2019-07-30 22:13 ` Junio C Hamano 2019-07-30 22:56 ` Andrey Vagin 2019-07-31 1:06 ` Jeff King 2019-07-30 23:05 ` Dmitry Safonov
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=20190730203327.30958-1-dima@arista.com \ --to=dima@arista.com \ --cc=0x7f454c46@gmail.com \ --cc=avagin@openvz.org \ --cc=avarab@gmail.com \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --cc=szeder.dev@gmail.com \ --subject='Re: [PATCHv3] send-email: Ask if a patch should be sent twice' \ /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
Code repositories for project(s) associated with this 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).