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.='
|
||||||
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 |