# 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.
#
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]) {
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";
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), $_);