Skip to content

Commit 8b8f399

Browse files
committed
get Menlo deps using 5.8 + carton
1 parent fe87bd7 commit 8b8f399

File tree

1 file changed

+88
-18
lines changed

1 file changed

+88
-18
lines changed

Diff for: maint/upgrade-fatlib.pl

+88-18
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
11
#!/usr/bin/env perl
22
use strict;
3+
use Capture::Tiny qw(capture_stdout);
4+
use Config;
5+
use Cwd;
6+
use CPAN::Meta;
37
use File::Path;
48
use File::Find;
59
use File::pushd;
10+
use Carton::Snapshot;
611
use Tie::File;
712

13+
sub run_command {
14+
local $ENV{PLENV_VERSION} = "5.8.9";
15+
system "plenv", "exec", @_;
16+
}
17+
818
sub rewrite_version_pm {
919
my $file = shift;
1020

@@ -19,38 +29,98 @@ sub rewrite_version_pm {
1929
}
2030
}
2131

22-
sub run {
23-
my($fresh) = @_;
24-
25-
my $dir = ".fatpack-build";
26-
mkpath $dir;
32+
sub build_snapshot {
33+
my $dir = shift;
2734

2835
{
29-
my $push = pushd $dir;
36+
my $pushd = pushd $dir;
3037

3138
open my $fh, ">cpanfile";
32-
print $fh <<EOF;
33-
requires "Menlo";
34-
EOF
39+
print $fh "requires 'Menlo', '$Menlo::VERSION';\n";
3540
close $fh;
41+
42+
run_command "carton", "install";
43+
}
44+
45+
my $snapshot = Carton::Snapshot->new(path => "$dir/cpanfile.snapshot");
46+
$snapshot->load;
3647

37-
$ENV{PLENV_VERSION} = "5.12.5";
48+
return $snapshot;
49+
}
3850

39-
if ($fresh) {
40-
system "plenv", "exec", "carmel", "update";
51+
sub required_modules {
52+
my($snapshot, $dir) = @_;
53+
54+
my $requires = CPAN::Meta::Requirements->new;
55+
$requires->add_minimum(Menlo => $Menlo::VERSION);
56+
57+
my $finder;
58+
$finder = sub {
59+
my $module = shift;
60+
61+
my $dist = $snapshot->find($module);
62+
if ($dist) {
63+
my $name = $dist->name;
64+
my $path = "$dir/local/lib/perl5/$Config{archname}/.meta/$name/MYMETA.json";
65+
my $meta = CPAN::Meta->load_file($path);
66+
67+
my $reqs = $meta->effective_prereqs->requirements_for('runtime' => 'requires');
68+
for my $module ( $reqs->required_modules ) {
69+
next if $module eq 'perl';
70+
71+
my $core = $Module::CoreList::version{"5.008009"}{$module};
72+
unless ($core && $reqs->accepts_module($module, $core)) {
73+
$requires->add_string_requirement( $module => $reqs->requirements_for_module($module) );
74+
$finder->($module);
75+
}
76+
}
4177
}
78+
};
79+
80+
$finder->("Menlo");
81+
$requires->clear_requirement($_) for qw( Module::CoreList );
82+
83+
return map { s!::!/!g; "$_.pm" } $requires->required_modules;
84+
}
85+
86+
sub pack_modules {
87+
my($dir, @modules) = @_;
4288

43-
system "plenv", "exec", "carmel", "install";
44-
system "plenv", "exec", "carmel", "rollout";
89+
my $stdout = capture_stdout {
90+
local $ENV{PERL5LIB} = cwd . "/$dir/local/lib/perl5";
91+
run_command "fatpack", "packlists-for", @modules;
92+
};
93+
94+
my @packlists = split /\n/, $stdout;
95+
for my $packlist (@packlists) {
96+
warn "Packing $packlist\n";
4597
}
4698

47-
rmtree "fatlib";
48-
system "rsync", "-auv", "--chmod=u+w", "$dir/local/lib/perl5/", "fatlib/";
99+
run_command "fatpack", "tree", @packlists;
100+
}
101+
102+
sub run {
103+
my($fresh) = @_;
104+
105+
my $dir = ".fatpack-build";
106+
mkdir $dir, 0777;
107+
108+
if ($fresh) {
109+
rmtree $dir;
110+
mkpath $dir;
111+
}
112+
113+
my $snapshot = build_snapshot($dir);
114+
my @modules = required_modules($snapshot, $dir);
115+
116+
pack_modules($dir, @modules);
49117

50-
use Config;
51118
mkpath "fatlib/version";
52119

53-
for my $file ("fatlib/$Config{archname}/version.pm", glob("fatlib/$Config{archname}/version/*.pm")) {
120+
for my $file (
121+
glob("fatlib/$Config{archname}/version.pm*"),
122+
glob("fatlib/$Config{archname}/version/*.pm"),
123+
) {
54124
next if $file =~ /\bvxs\.pm$/;
55125
(my $target = $file) =~ s!^fatlib/$Config{archname}/!fatlib/!;
56126
rename $file => $target or die "$file => $target: $!";

0 commit comments

Comments
 (0)