git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] send-email: Ask if a patch should be sent twice

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Jul 30, 2019, 11:54 UTC
Message-ID
<87r26768lc.fsf@evledraar.gmail.com>
In-Reply-To
<20190730001352.7477-1-dima@arista.com>
On Tue, Jul 30 2019, Dmitry Safonov wrote:
Show 16 quoted lines
> 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>
> Signed-off-by: Dmitry Safonov <dima@arista.com>
> ---
>  git-send-email.perl | 23 ++++++++++++++++++++++-
>  1 file changed, 22 insertions(+), 1 deletion(-)

There's tests for send-email in t/t9001-send-email.sh. See if what you're adding can have a test added, seems simple enough in this case.

Show 9 quoted lines
> 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';

We depend on Perl 5.8, this bumps the requirenment to 5.10. Aside from that ~~ is its own can of worms in Perl and is best avoided.

Show 9 quoted lines
>  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 "),

These cases with a default should have "Y/n", not "y/n". See other expamples in the file.

Show 5 quoted lines
> +		default => "y",
> +		valid_re => qr/^(?:yes|y|no|n)/i);
> +	if (/^n/i) {
> +		cleanup_compose_files();
> +		exit(0);
Exit if we have just one of these? More on that later...
Show 17 quoted lines
> +	}
> +}
> +
>  # 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);
> +			}
One non-smartmatch idiom for this is:
    my %seen;
    for my $file (@files) {
        if ($seen{$file}++) { ...}
    }
Or:
    my %seen;
    my @dupes = grep { $seen{$_}++ } @files;
Show 8 quoted lines
> +		}
> +		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;

...but picking up the comment above, I'd expect this to be in the "if ($validate)" block below or something similar, seems like this fits right in with --validate.

Then you can also ask "do you want to send this set of patches twice <full list>?".

Now the user is asked a file-at-a-time.
>  	} else {
>  		push @rev_list_opts, $f;
Previous: Dmitry SafonovNext: Dmitry Safonov
Message 2 of 3 in “send-email: Ask if a patch should be sent twice”
  1. send-email: Ask if a patch should be sent twiceDmitry Safonov, Jul 30, 2019
  2. Ævar Arnfjörð BjarmasonJul 30, 2019
  3. Dmitry SafonovJul 30, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.