Commit | Line | Data |
319537bf |
1 | package Gitalist::Controller::LegacyURI; |
2 | use Moose; |
9c515df2 |
3 | use Moose::Autobox; |
319537bf |
4 | use namespace::autoclean; |
5 | |
6 | BEGIN { extends 'Gitalist::Controller' } |
7 | |
592fa490 |
8 | my %LEGACY_DISPATCH = ( |
6806ac0d |
9 | opml => sub { '/opml/opml' }, |
10 | project_index => sub { '/legacyuri/project_index' }, |
592fa490 |
11 | '(?:summary|heads|tags)' => sub { |
6806ac0d |
12 | my($c, $action, $repos) = @_; |
13 | return "/repository/$action", [$repos]; |
592fa490 |
14 | }, |
15 | blob => sub { |
6806ac0d |
16 | my($c, $action, $repos) = @_; |
17 | my $ref = $c->req->param('hb') || $c->req->param('h'); |
18 | return '/ref/blob', [$repos, $ref], $c->req->param('f'); |
592fa490 |
19 | }, |
20 | ); |
21 | |
22 | sub _legacy_uri { |
23 | my($self, $c, $repos, $action) = @_; |
24 | |
25 | return |
6806ac0d |
26 | unless $action; |
592fa490 |
27 | |
28 | my @result = grep { $action =~ /^$_$/ } keys %LEGACY_DISPATCH; |
29 | die "Matched too many actions for '$a' - @result" |
6806ac0d |
30 | if @result > 1; |
592fa490 |
31 | |
32 | return $LEGACY_DISPATCH{$result[0]}->($c, $action, $repos) |
6806ac0d |
33 | if $result[0]; |
592fa490 |
34 | } |
35 | |
319537bf |
36 | sub handler : Chained('/base') PathPart('legacy') Args() { |
20503690 |
37 | my ( $self, $c, $repos ) = @_; |
592fa490 |
38 | |
39 | my ($action, $captures, @args) = $self->_legacy_uri($c, $repos, $c->req->param('a')); |
40 | |
41 | die("Not supported") |
6806ac0d |
42 | unless $action; |
592fa490 |
43 | |
44 | $c->res->redirect($c->uri_for_action($action, $captures || [], @args)); |
ad6d2173 |
45 | $c->res->status(301); |
319537bf |
46 | } |
47 | |
ad6d2173 |
48 | sub project_index : Chained('/base') Args(0) { |
9c515df2 |
49 | my ( $self, $c ) = @_; |
50 | |
51 | $c->response->content_type('text/plain'); |
52 | $c->response->body( |
53 | join "\n", map $_->name, $c->model()->repositories->flatten |
54 | ) or die 'No repositories found in '. $c->model->repo_dir; |
55 | } |
56 | |
319537bf |
57 | __PACKAGE__->meta->make_immutable; |