diff options
author | Eric Sunshine <sunshine@sunshineco.com> | 2013-07-21 06:52:39 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-07-21 15:13:16 -0700 |
commit | 8e7c4a82ec25ee92bcb81de8bb8c4a27876d6edc (patch) | |
tree | c48e9ff487d0d21cdf585036d068af6ac0fe7041 | |
parent | 4d06402b1b29259bd475e5473c4478f58e9376a1 (diff) | |
download | git-8e7c4a82ec25ee92bcb81de8bb8c4a27876d6edc.tar.gz git-8e7c4a82ec25ee92bcb81de8bb8c4a27876d6edc.tar.xz |
contrib: contacts: add ability to parse from committish
For example:
% git contacts R1..R2
Committishes and patch files can be mentioned in the same invocation:
% git contacts R1..R2 extra/*.patch
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-x | contrib/contacts/git-contacts | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/contrib/contacts/git-contacts b/contrib/contacts/git-contacts index 3e6cce810..1686ff340 100755 --- a/contrib/contacts/git-contacts +++ b/contrib/contacts/git-contacts @@ -3,7 +3,7 @@ # List people who might be interested in a patch. Useful as the argument to # git-send-email --cc-cmd option, and in other situations. # -# Usage: git contacts <file> ... +# Usage: git contacts <file | rev-list option> ... use strict; use warnings; @@ -77,8 +77,8 @@ sub get_blame { } sub scan_patches { - my ($commits, $f) = @_; - my ($id, $source); + my ($commits, $id, $f) = @_; + my $source; while (<$f>) { if (/^From ([0-9a-f]{40}) Mon Sep 17 00:00:00 2001$/) { $id = $1; @@ -98,18 +98,44 @@ sub scan_patches { sub scan_patch_file { my ($commits, $file) = @_; open my $f, '<', $file or die "read failure: $file: $!\n"; - scan_patches($commits, $f); + scan_patches($commits, undef, $f); + close $f; +} + +sub scan_rev_args { + my ($commits, $args) = @_; + open my $f, '-|', qw(git rev-list --reverse), @$args or die; + while (<$f>) { + chomp; + my $id = $_; + $seen{$id} = 1; + open my $g, '-|', qw(git show -C --oneline), $id or die; + scan_patches($commits, $id, $g); + close $g; + } close $f; } if (!@ARGV) { - die "No input patch files\n"; + die "No input revisions or patch files\n"; } -my %commits; +my (@files, @rev_args); for (@ARGV) { + if (-e) { + push @files, $_; + } else { + push @rev_args, $_; + } +} + +my %commits; +for (@files) { scan_patch_file(\%commits, $_); } +if (@rev_args) { + scan_rev_args(\%commits, \@rev_args) +} import_commits(\%commits); my $contacts = {}; |