summaryrefslogtreecommitdiffstats
path: root/lib/App/ArchLinux/PackagerTools/CPAN/PackagesDetailsFetcher.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/App/ArchLinux/PackagerTools/CPAN/PackagesDetailsFetcher.pm')
-rw-r--r--lib/App/ArchLinux/PackagerTools/CPAN/PackagesDetailsFetcher.pm24
1 files changed, 10 insertions, 14 deletions
diff --git a/lib/App/ArchLinux/PackagerTools/CPAN/PackagesDetailsFetcher.pm b/lib/App/ArchLinux/PackagerTools/CPAN/PackagesDetailsFetcher.pm
index 88122da..79b149e 100644
--- a/lib/App/ArchLinux/PackagerTools/CPAN/PackagesDetailsFetcher.pm
+++ b/lib/App/ArchLinux/PackagerTools/CPAN/PackagesDetailsFetcher.pm
@@ -31,6 +31,7 @@ Returns a new instance.
=cut
method new($class: $context, $deps = {}) {
+ $deps->{config} //= App::ArchLinux::PackagerTools::Config->new($context);
$deps->{cache} //= App::ArchLinux::PackagerTools::Cache->new($context);
return $class->new_no_defaults($context, $deps);
}
@@ -54,20 +55,15 @@ Return the uncompressed data of the 02packages.details.txt.gz file.
=cut
method get_packages_data() {
- my $data;
- my $use_cpanplus_index = 1;
- if ($use_cpanplus_index) {
- # This is mostly for development so we don't go over the network on each run.
- my $packages_file = "$ENV{HOME}/.cpanplus/02packages.details.txt.gz";
- run ['zcat', $packages_file], \undef, \$data or die $log->error("Failed to fetch and uncompress CPAN module index: $?")."\n";
- } else {
- # TODO cache the details file locally
- # TODO when we have a cache of this, remove the $use_cpanplus_index part since that is worse than having our own cache
- # TODO make the cpan mirror configurable
- run [qw(curl -s ), "https://cpan.metacpan.org/modules/02packages.details.txt.gz"], '|', ['zcat'], \$data or die $log->error("Failed to fetch and uncompress CPAN module index: $?")."\n";
- }
-
- return $data;
+ my $conf = $self->{deps}->{config}->get_config();
+ my $cache_timeout = $conf->{cpan}->{cache_timeout};
+ my $mirror_url = $conf->{cpan}->{mirror_url};
+ return $self->{deps}->{cache}->compute('02packages', $cache_timeout, sub {
+ my $data;
+ $log->debugf("Fetching 02packages file from mirror: %s", $mirror_url);
+ run [qw(curl -s ), "$mirror_url/modules/02packages.details.txt.gz"], '|', ['zcat'], \$data or die $log->error("Failed to fetch and uncompress CPAN module index: $?")."\n";
+ return $data;
+ });
}
1;