blob: a4ace7ebc2856eba15f78f6ba56ecaff64b2dd9f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#!/usr/bin/env perl
use warnings 'FATAL' => 'all';
use strict;
use File::Fetch;
use IO::Handle; # for autoflush
my $PROG = 'perl-cpan';
sub err
{
print STDERR @_;
exit 2;
}
sub distsearch
{
my ($dist) = @_;
# Refresh our local list of distributions if needed.
my $var = $ENV{'PKGVAR'}
or die "$PROG: PKGVAR env variable is unset\n";
if (! -f "$var/cpan" || -M "$var/cpan" > 1) {
print STDERR "Refreshing local CPAN distribution list...";
system qq{cpandists >'$var/cpan' 2>/dev/null};
err("FAILED\n") unless $? == 0;
print STDERR "OK\n";
}
open DISTS, '<', "$var/cpan" or err("$PROG: open: $!");
while (<DISTS>) {
my @f = split;
next unless lc $f[0] eq lc $dist;
close DISTS;
return ($f[0], $f[2]);
}
close DISTS;
return ();
}
sub fetchdist
{
my ($cpath) = @_;
my $file = $cpath; $file =~ s{^.*/}{};
my $mirror = $ENV{'CPANMIRROR'} || 'ftp://cpan.pair.com';
my $url = "${mirror}/authors/id/${cpath}";
print STDERR "Downloading $file... ";
my $ff = File::Fetch->new('uri' => $url);
err("FAILED\n") unless $ff->fetch();
print STDERR "OK\n";
}
sub main
{
my $pkg = shift or die "Usage: $PROG [package name]\n";
my $dist = $pkg;
return 1 unless $dist =~ s/^perl-// > 0;
STDERR->autoflush(1);
my ($realname, $cpath) = distsearch($dist);
die "$PROG: failed to find perl dist similar to $dist\n"
unless $realname;
fetchdist($cpath);
my $srch = 'http://search.cpan.org';
print <<"END_META";
url
$srch/dist/$realname
source
$srch/CPAN/authors/id/$cpath
END_META
my $file = $cpath; $file =~ s{^.*/}{};
system 'perl-dist', $file;
return $?;
}
exit main(@ARGV);
|