[carton] 405/472: Load extra modules for fatpack, detected from Carton's MYMETA files
Lucas Kanashiro
kanashiro-guest at moszumanska.debian.org
Fri Jul 24 00:39:29 UTC 2015
This is an automated email from the git hooks/post-receive script.
kanashiro-guest pushed a commit to branch master
in repository carton.
commit 520305ad21e6a48753a9748a594296136ce7a99f
Author: Tatsuhiko Miyagawa <miyagawa at bulknews.net>
Date: Sat Aug 10 21:15:11 2013 -0700
Load extra modules for fatpack, detected from Carton's MYMETA files
---
lib/Carton/Packer.pm | 59 +++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 52 insertions(+), 7 deletions(-)
diff --git a/lib/Carton/Packer.pm b/lib/Carton/Packer.pm
index 9d604b6..e261be2 100644
--- a/lib/Carton/Packer.pm
+++ b/lib/Carton/Packer.pm
@@ -3,6 +3,8 @@ use strict;
use App::FatPacker;
use File::pushd ();
use Path::Tiny ();
+use CPAN::Meta ();
+use File::Find ();
use Moo;
@@ -23,10 +25,22 @@ $Carton::Fatpacked = 1;
exit Carton::CLI->new->run(@ARGV);
EOF
- my $packer = App::FatPacker->new;
+ my $fatpacked = $self->do_fatpack($file);
+
+ my $executable = $dir->child('carton');
+ warn "Bundling $executable\n";
+
+ $dir->mkpath;
+ $executable->spew($fatpacked);
+ chmod 0755, $executable;
+}
- my @modules = split /\r?\n/, $packer->trace(args => [$file], use => ['App::cpanminus']);
+sub do_fatpack {
+ my($self, $file) = @_;
+
+ my $packer = App::FatPacker->new;
+ my @modules = split /\r?\n/, $packer->trace(args => [$file], use => $self->required_modules);
my @packlists = $packer->packlists_containing(\@modules);
$packer->packlists_to_tree(Path::Tiny->new('fatlib')->absolute, \@packlists);
@@ -39,12 +53,43 @@ EOF
use Config;
$fatpacked =~ s/\$fatpacked{"$Config{archname}\/(Cwd|File)/\$fatpacked{"$1/g;
- my $executable = $dir->child('carton');
- warn "Bundling $executable\n";
+ $fatpacked;
+}
- $dir->mkpath;
- $executable->spew($fatpacked);
- chmod 0755, $executable;
+sub required_modules {
+ my($self, $packer) = @_;
+
+ my $meta = $self->installed_meta('Carton')
+ or die "Couldn't find install metadata for Carton";
+
+ my %excludes = (
+ perl => 1,
+ 'ExtUtils::MakeMaker' => 1,
+ 'Module::Build' => 1,
+ );
+
+ my @requirements = grep !$excludes{$_},
+ $meta->effective_prereqs->requirements_for('runtime', 'requires')->required_modules;
+
+ return \@requirements;
+}
+
+sub installed_meta {
+ my($self, $dist) = @_;
+
+ my @meta;
+ my $finder = sub {
+ if (m!\b$dist-.*[\\/]MYMETA.json!) {
+ push @meta, CPAN::Meta->load_file($_);
+ }
+ };
+
+ File::Find::find({ wanted => $finder, no_chdir => 1 }, grep -d, map "$_/.meta", @INC);
+
+ # return the latest version
+ @meta = sort { version->new($b->version) cmp version->new($a->version) } @meta;
+
+ return $meta[0];
}
1;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/carton.git
More information about the Pkg-perl-cvs-commits
mailing list