File Coverage

blib/lib/CPAN/Repo/Server.pm
Criterion Covered Total %
statement 6 7 85.7
branch n/a
condition n/a
subroutine 2 3 66.6
pod 0 1 0.0
total 8 11 72.7


line stmt bran cond sub pod time code
1             package CPAN::Repo::Server;
2 1     1   1683 use CPAN::Repo;
  1         2  
  1         27  
3 1     1   1106 use Dancer ':syntax';
  1         495209  
  1         6  
4             our $REPO_ROOT;
5              
6             get '/' => sub { # home page
7             set content_type => 'text/html';
8             my $ret = '

list of available repos

';
9             my @l;
10             for my $i (<$REPO_ROOT/*>){
11             next unless -d $i;
12             s/.*\/// for $i;
13             push @l, $i
14             }
15             $ret.='
    '.( join "\n", map {"
  • $_
  • "} @l ).'
'.signature();
16             return $ret;
17            
18             };
19              
20             get '/list/$' => sub { # list of repos (a-la rest api, called from in CPAN::Repo pluggins)
21             set content_type => 'text/plain';
22             # template 'index';
23             my @l;
24             for my $i (<$REPO_ROOT/*>){
25             next unless -d $i;
26             s/.*\/// for $i;
27             push @l, $i
28             }
29             return join "\n", @l;
30            
31             };
32              
33             get qr{/(\S+)/packages\.txt} => sub { # repo packages.txt
34             set content_type => 'text/plain';
35             my ($path) = splat;
36             my $ret;
37             for my $p (split /\//, $path ){
38             $ret.="# $p repository\n";
39             if(open F, "$REPO_ROOT/$p/packages.txt"){
40             while (my $l = ){
41             $ret.="~$p/$l";
42             }; close F;
43             }
44             $ret.="\n";
45             }
46             return $ret;
47             };
48              
49             get qr{^/repo/(\w+)/$} => sub { # repo index page
50             set content_type => 'text/html';
51             my ($cs_id) = splat;
52             my $ret = "

$cs_id

\n";
53             $ret.="packages.txt

\n";
54             for my $d (<$REPO_ROOT/$cs_id/*.gz>){
55             (my $l = $d)=~s/.*\/(.*)/$1/;
56             $ret.="$l
\n";
57             }
58             $ret.=signature();
59             return $ret;
60             };
61              
62             get qr{/.*/~(\w+)/(.*\.tar\.gz)} => sub { # distros
63              
64             my ($cs_id,$distro) = splat;
65             redirect "$cs_id/$distro"
66             };
67              
68             sub signature {
69 0     0 0   return "\n\n
cpan repo server version $CPAN::Repo::VERSION\n\n";
70             }
71              
72             1;
73