X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Porting%2FMaintainers.pm;h=0b03e0579e50801800be577b201cd0ee556ad8d1;hb=17c79f43379fc059c3c23c26a109c793268b3956;hp=ce773ea0f3deace216b88334acbab1a24e8ceba8;hpb=3428fdd57721820eccc1fa98f243a42d5960bb64;p=p5sagit%2Fp5-mst-13.2.git diff --git a/Porting/Maintainers.pm b/Porting/Maintainers.pm index ce773ea..0b03e05 100644 --- a/Porting/Maintainers.pm +++ b/Porting/Maintainers.pm @@ -7,15 +7,19 @@ package Maintainers; use strict; use lib "Porting"; +# Please don't use post 5.008 features as this module is used by +# Porting/makemeta, and that in turn has to be run by the perl just built. +use 5.008; require "Maintainers.pl"; use vars qw(%Modules %Maintainers); -use vars qw(@ISA @EXPORT_OK); +use vars qw(@ISA @EXPORT_OK $VERSION); @ISA = qw(Exporter); @EXPORT_OK = qw(%Modules %Maintainers get_module_files get_module_pat show_results process_options); +$VERSION = 0.02; require Exporter; use File::Find; @@ -67,7 +71,7 @@ sub get_maintainer_modules { sub usage { print <<__EOF__; -$0: Usage: $0 [[--maintainer M --module M --files]|[--check] file ...] +$0: Usage: $0 [[--maintainer M --module M --files]|[--check] [commit] | [file ...] --maintainer M list all maintainers matching M --module M list all modules matching M --files list all files @@ -75,7 +79,7 @@ $0: Usage: $0 [[--maintainer M --module M --files]|[--check] file ...] with a file checks if it has a maintainer with a dir checks all files have a maintainer otherwise checks for multiple maintainers ---opened list all modules of files opened by perforce +--opened list all modules of modified files Matching is case-ignoring regexp, author matching is both by the short id and by the full name and email. A "module" may not be just a module, it may be a file or files or a subdirectory. @@ -102,11 +106,15 @@ sub process_options { ); my @Files; - + if ($Opened) { - my @raw = `p4 opened`; + chomp (@Files = `git ls-files -m --full-name`); die if $?; - @Files = map {s!#.*!!s; s!^//depot/.*?/perl/!!; $_} @raw; + } elsif (@ARGV == 1 && + $ARGV[0] =~ /^(?:HEAD|[0-9a-f]{4,40})(?:~\d+)?\^*$/) { + my $command = "git diff --name-only $ARGV[0]^ $ARGV[0]"; + chomp (@Files = `$command`); + die "'$command' failed: $?" if $?; } else { @Files = @ARGV; } @@ -159,7 +167,7 @@ sub show_results { my @files = get_module_files($m); printf "%-15s @files\n", $m; } else { - printf "%-15s $Modules{$m}{MAINTAINER}\n", $m; + printf "%-15s %-12s %s\n", $m, $Modules{$m}{MAINTAINER}, $Modules{$m}{UPSTREAM}||'unknown'; } } } @@ -237,18 +245,21 @@ sub show_results { if (defined $ModuleByFile{$file}) { my $module = $ModuleByFile{$file}; my $maintainer = $Modules{$ModuleByFile{$file}}{MAINTAINER}; - printf "%-15s $module $maintainer $Maintainers{$maintainer}\n", $file; + my $upstream = $Modules{$module}{UPSTREAM}||'unknown'; + printf "%-15s [%-7s] $module $maintainer $Maintainers{$maintainer}\n", $file, $upstream; } else { printf "%-15s ?\n", $file; } } } + elsif ($Opened) { + print STDERR "(No files are modified)\n"; + } else { usage(); } } -sub warn_maintainer(_); my %files; sub maintainers_files { @@ -269,19 +280,21 @@ sub duplicated_maintainers { } } +sub warn_maintainer { + my $name = shift; + warn "File $name has no maintainer\n" if not $files{$name}; +} + sub missing_maintainers { my($check, @path) = @_; maintainers_files(); my @dir; - for (@path) { if( -d ) { push @dir, $_ } else { warn_maintainer() } } + for my $d (@path) { + if( -d $d ) { push @dir, $d } else { warn_maintainer($d) } + } find sub { warn_maintainer($File::Find::name) if /$check/; }, @dir if @dir; } -sub warn_maintainer(_) { - my $name = shift; - warn "File $name has no maintainer\n" if not $files{$name}; -} - 1;