Rename ext/Digest/SHA to ext/Digest-SHA
[p5sagit/p5-mst-13.2.git] / Porting / Maintainers.pm
index 4f7aa44..0b03e05 100644 (file)
@@ -14,11 +14,12 @@ 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;
@@ -70,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
@@ -78,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.
@@ -105,14 +106,15 @@ sub process_options {
                      );
 
     my @Files;
-   
+
     if ($Opened) {
-       @Files = `p4 opened`;
+       chomp (@Files = `git ls-files -m --full-name`);
        die if $?;
-       foreach (@Files) {
-           s!#.*!!s;
-           s!^//depot/(?:perl|.*?/perl)/!!;
-       }
+    } 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;
     }
@@ -165,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';
                }
            }
        }
@@ -243,12 +245,16 @@ 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();
     }