CPAN-Tarball-Patch
view release on metacpan or search on metacpan
{
"abstract" : "Patch a CPAN tarball, via CPAN::Distroprefs mechanism",
"author" : [
"Thibault Duponchelle <thibault.duponchelle@gmail.com>"
],
"dynamic_config" : 1,
"generated_by" : "ExtUtils::MakeMaker version 7.70, CPAN::Meta::Converter version 2.150010",
"license" : [
"artistic_2"
],
"meta-spec" : {
"url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
---
abstract: 'Patch a CPAN tarball, via CPAN::Distroprefs mechanism'
author:
- 'Thibault Duponchelle <thibault.duponchelle@gmail.com>'
build_requires:
ExtUtils::MakeMaker: '0'
Test::More: '0'
configure_requires:
ExtUtils::MakeMaker: '0'
dynamic_config: 1
generated_by: 'ExtUtils::MakeMaker version 7.70, CPAN::Meta::Converter version 2.150010'
license: artistic_2
lib/CPAN/Tarball/Patch.pm view on Meta::CPAN
use strict;
use warnings;
use Archive::Tar;
use File::Basename;
use Cwd;
use File::Find;
=head1 NAME
CPAN::Tarball::Patch - Patch a CPAN tarball, via CPAN::Distroprefs mechanism
=head1 VERSION
Version 0.020000
=cut
our $VERSION = '0.020000';
=head1 SYNOPSIS
Patching a tarball using C<CPAN::Distroprefs>
use CPAN::Tarball::Patch;
my $patcher = CPAN::Tarball::Patch->new("$ENV{"HOME"}/.local/share/.cpan/prefs/", "$ENV{"HOME"}/.local/share/.cpan/patches/");
$patcher->patch("CONTRA/Acme-LSD-0.04.tar.gz");
# The argument format is NOT flexible since it would be used for matching by CPAN::Distroprefs
# In other words, it should be: AUTHOR/tarball.tar.gz
As of today, this module internal functioning and API is not fixed, do not use it yet (or at your risks).
=cut
sub new {
my $class = shift;
my $prefs_dir = shift;
my $patches_dir = shift;
defined $prefs_dir or die "Need to pass prefs_dir parameter";
defined $patches_dir or die "Need to pass patches_dir parameter";
my $self = bless {}, $class;
$self->{prefs_dir} = $prefs_dir;
$self->{patches_dir} = $patches_dir;
$self->{start_dir} = getcwd;
return $self;
}
sub patches {
my $self = shift;
my $distribution = shift;
defined $distribution or die "Need to pass distribution parameter";
my $prefs_folder = $self->{prefs_dir};
my $patches_folder = $self->{patches_dir};
use CPAN::Distroprefs;
use YAML;
my %arg = (
distribution => $distribution,
);
my %ext = ( yml => 'YAML' );
my $finder = CPAN::Distroprefs->find($prefs_folder, \%ext);
my @patches = ();
while (my $result = $finder->next) {
die $result->as_string if $result->is_fatal;
warn($result->as_string), next if $result->is_warning;
for my $pref (@{ $result->prefs }) {
if ($pref->matches(\%arg)) {
foreach my $patch ($pref->data->{patches}->@*) {
push @patches, $patch;
}
}
}
}
return map { File::Spec->catfile($self->{patches_dir}, $_) } @patches;
}
( run in 1.476 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )