From 8e7c4a82ec25ee92bcb81de8bb8c4a27876d6edc Mon Sep 17 00:00:00 2001 From: Eric Sunshine Date: Sun, 21 Jul 2013 06:52:39 -0400 Subject: 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 Signed-off-by: Junio C Hamano diff --git a/contrib/contacts/git-contacts b/contrib/contacts/git-contacts index 3e6cce8..1686ff3 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 ... +# Usage: git contacts ... 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 = {}; -- cgit v0.10.2-6-g49f6