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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html