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@xxxxxxxxxxxxxxx /tmp/timens/ --cc 'Dmitry Safonov <0x7f454c46@xxxxxxxxx>' /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@xxxxxxxxx Cc: Andrei Vagin <avagin@xxxxxxxxxx> Signed-off-by: Dmitry Safonov <dima@xxxxxxxxxx> --- git-send-email.perl | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/git-send-email.perl b/git-send-email.perl index 5f92c89c1c1b..0caafc104478 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -33,6 +33,7 @@ use Net::Domain (); use Net::SMTP (); use Git::LoadCPAN::Mail::Address; +use experimental 'smartmatch'; Getopt::Long::Configure qw/ pass_through /; @@ -658,6 +659,17 @@ sub is_format_patch_arg { } } +sub send_file_twice { + my $f = shift; + $_ = ask(__("Patch $f will be sent twice, continue? [y]/n "), + default => "y", + valid_re => qr/^(?:yes|y|no|n)/i); + if (/^n/i) { + cleanup_compose_files(); + exit(0); + } +} + # Now that all the defaults are set, process the rest of the command line # arguments and collect up the files that need to be processed. my @rev_list_opts; @@ -669,10 +681,19 @@ sub is_format_patch_arg { opendir my $dh, $f or die sprintf(__("Failed to opendir %s: %s"), $f, $!); - push @files, grep { -f $_ } map { catfile($f, $_) } + my @new_files = grep { -f $_ } map { catfile($f, $_) } sort readdir $dh; + foreach my $nfile (@new_files) { + if ($nfile ~~ @files) { + send_file_twice($nfile); + } + } + push @files, @new_files; closedir $dh; } elsif ((-f $f or -p $f) and !is_format_patch_arg($f)) { + if ($f ~~ @files) { + send_file_twice($f); + } push @files, $f; } else { push @rev_list_opts, $f; -- 2.22.0