App-DualLivedDiff
view release on metacpan or search on metacpan
lib/App/DualLivedDiff.pm view on Meta::CPAN
my $absolute_blead_file = get_full_blead_path( $pathspec, $pathspec->{blead_file} );
#warn "Diffing '$absolute_source_file' to '$absolute_blead_file'";
my @cmd = ($diff_cmd, ($ignore_space ? ('-w') : ()), qw(-u -N));
if ($reverse) {
push @cmd, $absolute_blead_file, $absolute_source_file;
}
else {
push @cmd, $absolute_source_file, $absolute_blead_file;
}
my $result = `@cmd`;
my $blead_prefix = quotemeta($reverse ? '---' : '+++');
my $source_prefix = quotemeta($reverse ? '+++' : '---');
my $patched_filename;
my $bleadpath_patched_filename =
defined($pathspec->{blead_module_path})
? File::Spec->catfile( $pathspec->{blead_module_path}, $pathspec->{blead_file} )
: $pathspec->{blead_file};
if ($paths eq 'dual') {
$patched_filename = $pathspec->{source_file};
} elsif ($paths eq 'blead') {
$patched_filename = $bleadpath_patched_filename;
} else {
$patched_filename = $reverse ? $bleadpath_patched_filename : $pathspec->{source_file};
}
#my $patched_filename = $reverse ? $source_file : $blead_file;
#$result =~ s{^($blead_prefix\s*)(\S+)}{$1 . remove_path_prefix($2, $blead_base_dir)}gme;
#$result =~ s{^($source_prefix\s*)(\S+)}{$1 . remove_path_prefix($2, $source_base_dir)}gme;
$result =~ s{^($blead_prefix\s+)(\S+)}{$1 . $patched_filename}gme;
$result =~ s{^($source_prefix\s+)(\S+)}{$1 . $patched_filename}gme;
if (defined $output_file) {
print $output_file $result;
}
else {
print $result;
}
}
# remove a prefix from a path
sub remove_path_prefix {
my $path = shift;
my $prefix = shift;
$path =~ s/^\Q$prefix\E//;
$path =~ s/^[\/\\]+//;
return $path;
}
# turn something that may look like a module or
# distribution into an URL using CPAN
sub module_or_dist_to_url {
my $module_name = shift;
#my $use_dev_versions = shift;
my $distro;
if ($module_name =~ /[\/.]/) {
my $dist = CPAN::Shell->expandany($module_name);
if (not defined $dist) {
warn "Could not find distribution '$module_name' on CPAN\n";
return();
}
$dist = $dist->distribution() if ref($dist) eq 'CPAN::Module';
if (not ref($dist) eq 'CPAN::Distribution') {
warn "Could not find distribution '$module_name' on CPAN\n";
return();
}
$distro = $dist->pretty_id();
warn "Assuming you specified a distribution name. Found the '$distro' distribution on CPAN\n";
}
else {
my $module = CPAN::Shell->expand("Module", $module_name);
if (not defined $module) {
warn "Could not find module '$module_name' on CPAN\n";
return();
}
$distro = $module->distribution()->pretty_id();
warn "Assuming you specified a module name. Found the '$distro' distribution on CPAN\n";
}
$distro =~ /^([^\/]+)/ or die;
$distro = substr($1, 0, 1) . "/" . substr($1, 0, 2) . "/" . $distro;
my $mirrors = $CPAN::Config->{urllist};
if (not defined $mirrors or not ref($mirrors) eq 'ARRAY' or not @$mirrors) {
warn "Could not determine CPAN mirror";
return();
}
my $url = $mirrors->[0];
$url =~ s/\/+$//;
return $url . '/authors/id/' . $distro;
}
sub get_full_blead_path {
my $pathspec = shift;
my $path = shift;
if (defined $pathspec->{blead_module_path}) {
return File::Spec->catdir($pathspec->{blead_path}, $pathspec->{blead_module_path}, $path);
}
else {
return File::Spec->catdir($pathspec->{blead_path}, $path);
}
}
1;
__END__
=head1 NAME
App::DualLivedDiff - Diff between the perl core and dual-lived modules' CPAN distributions
=head1 SYNOPSIS
Example: Filter::Simple.
Given a simple YAML file F<.dualLivedDiffConfig> in the current working directory
or the Filter::Simple CPAN distribution:
---
exclude-regexes:
- ^(?:\./)?MANIFEST$
- ^(?:\./)?META.yml$
files:
lib/Filter/Simple.pm: lib/Filter/Simple.pm
Changes: lib/Filter/Simple/Changes
dirs-flat:
t/: lib/Filter/Simple/t/
dirs-recursive:
t/lib/Filter/Simple/: t/lib/Filter/Simple/
By running the following command, you can get the diff between your blead perl checkout and
( run in 1.155 second using v1.01-cache-2.11-cpan-5b529ec07f3 )