| 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 |