add -x option to Porting/cmpVERSION.pl
David Mitchell [Fri, 3 Jul 2009 20:31:15 +0000 (21:31 +0100)]
which ignores dual-life modules

Porting/cmpVERSION.pl

index 0f808c8..9205e28 100644 (file)
@@ -4,7 +4,10 @@
 # cmpVERSION - compare two Perl source trees for modules
 # that have identical version numbers but different contents.
 #
-# withg -d option, output the diffs too
+# with -d option, output the diffs too
+# with -x option, exclude dual-life modules (after all, there are tools
+#                 like core-cpan-diff that can already deal with them)
+#                 With this option, one od the directories must be '.'.
 #
 # Original by slaven@rezic.de, modified by jhi.
 #
@@ -17,14 +20,17 @@ use File::Find;
 use File::Spec::Functions qw(rel2abs abs2rel catfile catdir curdir);
 use Getopt::Std;
 
+use lib 'Porting';
+use Maintainers;
+
 sub usage {
 die <<'EOF';
-usage: $0 [ -d ] source_dir1 source_dir2
+usage: $0 [ -d -x ] source_dir1 source_dir2
 EOF
 }
 
 my %opts;
-getopts('d', \%opts) or usage;
+getopts('dx', \%opts) or usage;
 @ARGV == 2 or usage;
 
 for (@ARGV[0, 1]) {
@@ -32,6 +38,18 @@ for (@ARGV[0, 1]) {
        unless -f catfile($_, "perl.h") && -d catdir($_, "Porting");
 }
 
+my %dual_files;
+if ($opts{x}) {
+    die "With -x, one of the directories must be '.'\n"
+       unless $ARGV[0] eq '.' or  $ARGV[1] eq '.';
+    for my $m (grep $Maintainers::Modules{$_}{CPAN},
+                               keys %Maintainers::Modules)
+    {
+
+       $dual_files{"./$_"} = 1 for Maintainers::get_module_files($m);
+    }
+}
+
 my $dir2 = rel2abs($ARGV[1]);
 chdir $ARGV[0] or die "$0: chdir '$ARGV[0]' failed: $!\n";
 
@@ -50,7 +68,8 @@ my @diffs;
 find(
      sub { /\.pm$/ &&
               $File::Find::dir !~ $skip_dirs &&
-              ! exists $skip{$File::Find::name}
+              ! exists $skip{$File::Find::name} &&
+              ! exists $dual_files{$File::Find::name}
               &&
               do { my $file2 =
                        catfile(catdir($dir2, $File::Find::dir), $_);