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

Re: [PATCH v5 0/3] send-email: shell completion improvements

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Sep 24, 2021, 20:02 UTC
Message-ID
<87bl4h3fgv.fsf@evledraar.gmail.com>
In-Reply-To
<20210924024606.20542-1-tbperrotta@gmail.com>
On Thu, Sep 23 2021, Thiago Perrotta wrote:
Show 18 quoted lines
> Thanks for the heads up, I am slowly getting used to this email
> workflow, this is my first contribution. Hopefully I got it right this
> time.
>
>> Isn't this just:
>
>> my @params = <getopts list>;
>> GetOptions(@params);
>
> Let me know if the regex approach I went with is OK. You seem to have
> suggested me to do something with the `GetOptions` module, but I'm
> afraid I only know the basics of Perl.
>
> I tried to do something like `GetOptions($USAGE)` but it didn't quite
> work (clearly I have no idea how to do that :P). If you have something
> specific in mind, I'd appreciate if you could send a small patch back
> that I can incorporate. Otherwise, either way, the current regex
> approach isn't too horrible and seems to be reasonably reliable.

I meant something like the below patch, feel free to incorporate it if you'd like with my signed-off-by, i.e. there's no reason to parse the usage message, or hardcode another set of options, we've got it right there as structured program data being fed to the GetOptions() function.

All we need to do is to assign that to a hash, and use it both for emitting the help and to call GetOptions().

What I have doesn't *quite* work, i.e. the --git-completion-helper expects "--foo=" I think for things that are "foo=s" in perl, so the regex needs adjusting, but that should be an easy addition on top.

-- >8 --
diff --git a/git-send-email.perl b/git-send-email.perl
index 5262d88ee32..221115fbbdd 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -114,8 +114,18 @@ sub usage {
 }
 
 sub completion_helper {
-    print Git::command('format-patch', '--git-completion-helper');
-    exit(0);
+	my ($options) = @_;
+
+	my @gse_options = sort map {
+		"--$_"
+	} map {
+		s/(?:[:=][si]|!)$//;
+		split /\|/, $_;
+	} keys %$options;
+	my @fpa_options = Git::command('format-patch', '--git-completion-helper');
+	my @options = sort @gse_options, @fpa_options;
+	print "@options\n";
+	exit(0);
 }
 
 # most mail servers generate the Date: header, but not all...
@@ -449,7 +459,7 @@ sub config_regexp {
 usage() unless $rc;
 die __("--dump-aliases incompatible with other options\n")
     if !$help and $dump_aliases and @ARGV;
-$rc = GetOptions(
+my %options = (
 		    "sender|from=s" => \$sender,
                     "in-reply-to=s" => \$initial_in_reply_to,
 		    "reply-to=s" => \$reply_to,
@@ -508,7 +518,8 @@ sub config_regexp {
 		    "batch-size=i" => \$batch_size,
 		    "relogin-delay=i" => \$relogin_delay,
 		    "git-completion-helper" => \$git_completion_helper,
-	 );
+);
+$rc = GetOptions(%options);
 
 # Munge any "either config or getopt, not both" variables
 my @initial_to = @getopt_to ? @getopt_to : ($no_to ? () : @config_to);
@@ -516,7 +527,7 @@ sub config_regexp {
 my @initial_bcc = @getopt_bcc ? @getopt_bcc : ($no_bcc ? () : @config_bcc);
 
 usage() if $help;
-completion_helper() if $git_completion_helper;
+completion_helper(\%options) if $git_completion_helper;
 unless ($rc) {
     usage();
 }
Previous: Thiago PerrottaNext: Thiago Perrotta
Message 16 of 58 in “send-email: shell completion improvements”
  1. 0/3 send-email: shell completion improvementsThiago Perrotta, Aug 20, 2021
  2. 1/3 send-email: print newline for --git-completion-helperThiago Perrotta, Aug 20, 2021
  3. Junio C HamanoAug 20, 2021
  4. 0/3 send-email: shell completion improvementsThiago Perrotta, Aug 28, 2021
  5. 1/3 send-email: terminate --git-completion-helper with LFThiago Perrotta, Aug 28, 2021
  6. 2/3 send-email: move bash completions to core scriptThiago Perrotta, Aug 28, 2021
  7. Carlo ArenasAug 28, 2021
  8. send-email: move bash completions to core scriptThiago Perrotta, Sep 7, 2021
  9. Carlo ArenasSep 7, 2021
  10. 0/3 send-email: shell completion improvementsThiago Perrotta, Sep 21, 2021
  11. 1/3 send-email: terminate --git-completion-helper with LFThiago Perrotta, Sep 21, 2021
  12. 2/3 send-email: move bash completions to core scriptThiago Perrotta, Sep 21, 2021
  13. 3/3 send-email docs: add format-patch optionsThiago Perrotta, Sep 21, 2021
  14. Ævar Arnfjörð BjarmasonSep 23, 2021
  15. 0/3 send-email: shell completion improvementsThiago Perrotta, Sep 24, 2021
  16. Ævar Arnfjörð BjarmasonSep 24, 2021
  17. Thiago PerrottaSep 30, 2021
  18. 1/3 send-email: terminate --git-completion-helper with LFThiago Perrotta, Oct 7, 2021
  19. 0/3 send-email: shell completion improvementsThiago Perrotta, Oct 7, 2021
  20. 3/3 send-email docs: add format-patch optionsThiago Perrotta, Oct 7, 2021
  21. Documentation: better document format-patch options in send-emailCarlo Marcelo Arenas Belón, Oct 9, 2021
  22. Bagas SanjayaOct 9, 2021
  23. Carlo ArenasOct 9, 2021
  24. Bagas SanjayaOct 9, 2021
  25. Junio C HamanoOct 10, 2021
  26. 2/3 send-email: programmatically generate bash completionsThiago Perrotta, Oct 7, 2021
  27. Carlo Marcelo Arenas BelónOct 9, 2021
  28. 0/3 send-email: shell completion improvementsThiago Perrotta, Oct 11, 2021
  29. Ævar Arnfjörð BjarmasonOct 11, 2021
  30. send-email: programmatically generate bash completionsThiago Perrotta, Oct 11, 2021
  31. 0/2 send-email: shell completion improvementsThiago Perrotta, Oct 25, 2021
  32. Ævar Arnfjörð BjarmasonOct 25, 2021
  33. Ævar Arnfjörð BjarmasonOct 26, 2021
  34. Junio C HamanoOct 28, 2021
  35. 1/2 send-email: programmatically generate bash completionsThiago Perrotta, Oct 25, 2021
  36. 2/2 send-email docs: add format-patch optionsThiago Perrotta, Oct 25, 2021
  37. 1/3 send-email: terminate --git-completion-helper with LFThiago Perrotta, Oct 11, 2021
  38. 2/3 send-email: programmatically generate bash completionsThiago Perrotta, Oct 11, 2021
  39. 3/3 send-email docs: add format-patch optionsThiago Perrotta, Oct 11, 2021
  40. 1/3 send-email: terminate --git-completion-helper with LFThiago Perrotta, Sep 24, 2021
  41. 2/3 send-email: programmatically generate bash completionsThiago Perrotta, Sep 24, 2021
  42. 3/3 send-email docs: add format-patch optionsThiago Perrotta, Sep 24, 2021
  43. Bagas SanjayaSep 24, 2021
  44. Carlo ArenasSep 24, 2021
  45. Bagas SanjayaSep 24, 2021
  46. Carlo ArenasSep 24, 2021
  47. Junio C HamanoSep 24, 2021
  48. Carlo ArenasSep 24, 2021
  49. Junio C HamanoSep 24, 2021
  50. Bagas SanjayaSep 25, 2021
  51. Junio C HamanoSep 25, 2021
  52. Carlo Marcelo Arenas BelónSep 25, 2021
  53. Junio C HamanoSep 29, 2021
  54. 3/3 send-email docs: add format-patch optionsThiago Perrotta, Aug 28, 2021
  55. Bagas SanjayaAug 28, 2021
  56. 2/3 send-email: move bash completions to the perl scriptThiago Perrotta, Aug 20, 2021
  57. 3/3 send-email docs: mention format-patch optionsThiago Perrotta, Aug 20, 2021
  58. Junio C HamanoAug 20, 2021

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.