git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH RFC] git-send-email --expand-aliases
@ 2009-11-23 22:16 Alex Chiang
  2009-11-24  0:42 ` Junio C Hamano
  0 siblings, 1 reply; 9+ messages in thread
From: Alex Chiang @ 2009-11-23 22:16 UTC (permalink / raw)
  To: gitster; +Cc: catalin.marinas, git

I'm an StGit user, and while StGit has its own 'stg mail'
feature, it doesn't know how to expand email aliases (yet).

Certainly, one way to solve that problem would be to hack stgit
so that it can parse alias files, but to me, that seems silly
when git-send-email can already do that.

This patch teaches git-send-email to only expand email addresses
so that other git porcelains don't have to roll their own mail
alias parsers.

I imagine the internal implementation of stg mail to work
something like:

	call git-send-email --expand-aliases repeatedly, once for
	all the combined --to= args, then for all the combined --cc= args,
	and finally for all the combined --bcc= args (all passed
	to stg mail), read from stdout until EOF

That API is a little ugly, requiring 3 calls to git-send-email
for each class of recipient (to, cc, bcc).

The other interface that I thought of would be to have
git-send-email print a heading like:

	TO
	<expanded alias 1>
	<expanded alias 2>
	CC
	<expanded alias 3>
	BCC
	<expanded alias 4>

But, that requires more parsing in the porcelain. Requiring a
call to git-send-email for each class of recipient seems like a
reasonable interface for what will presumably be an API only used
in an automated manner by a porcelain like stg (and possibly
guilt?).

I haven't patched stg yet, wanted to see what the feedback on
this RFC patch was first. If folks are receptive, I can send a
fuller patch with expanded help text, etc.

Thanks,
/ac

---
diff --git a/git-send-email.perl b/git-send-email.perl
index a0279de..ac34bec 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -79,6 +79,7 @@ git send-email [options] <file | directory | rev-list options >
                                      auto, cc, compose, always, or never.
     --quiet                        * Output one line of info per email.
     --dry-run                      * Don't actually send the emails.
+    --expand-aliases               * Expands email aliases only and exits
     --[no-]validate                * Perform patch sanity checks. Default on.
     --[no-]format-patch            * understand any non optional arguments as
                                      `git format-patch` ones.
@@ -156,7 +157,7 @@ if ($@) {
 }
 
 # Behavior modification variables
-my ($quiet, $dry_run) = (0, 0);
+my ($quiet, $dry_run, $expand_aliases_only) = (0, 0, 0);
 my $format_patch;
 my $compose_filename;
 
@@ -263,6 +264,7 @@ my $rc = GetOptions("sender|from=s" => \$sender,
 		    "suppress-cc=s" => \@suppress_cc,
 		    "signed-off-cc|signed-off-by-cc!" => \$signed_off_by_cc,
 		    "confirm=s" => \$confirm,
+		    "expand-aliases" => \$expand_aliases_only,
 		    "dry-run" => \$dry_run,
 		    "envelope-sender=s" => \$envelope_sender,
 		    "thread!" => \$thread,
@@ -441,6 +443,22 @@ if (@alias_files and $aliasfiletype and defined $parse_alias{$aliasfiletype}) {
 	}
 }
 
+if ($expand_aliases_only) {
+	my @expand_to = expand_aliases(@to);
+	my @expand_cc = expand_aliases(@initial_cc);
+	my @expand_bcc = expand_aliases(@bcclist);
+
+	@expand_to = (map { sanitize_address($_) } @expand_to);
+	@expand_cc = (map { sanitize_address($_) } @expand_cc);
+	@expand_bcc = (map { sanitize_address($_) } @expand_bcc);
+
+	for my $a (@expand_to, @expand_cc, @expand_bcc) {
+		print $a . "\n";
+	}
+
+	exit(1);
+}
+
 ($sender) = expand_aliases($sender) if defined $sender;
 
 # returns 1 if the conflict must be solved using it as a format-patch argument

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-11-24 19:08 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-23 22:16 [PATCH RFC] git-send-email --expand-aliases Alex Chiang
2009-11-24  0:42 ` Junio C Hamano
2009-11-24  0:45   ` Alex Chiang
2009-11-24  7:12     ` Karl Wiberg
2009-11-24  7:25       ` Junio C Hamano
2009-11-24  7:52         ` Karl Wiberg
2009-11-24 10:43       ` Catalin Marinas
2009-11-24 18:46         ` Alex Chiang
2009-11-24 19:08           ` Karl Wiberg

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 NNTP newsgroup(s).