my($c, $action, $repos) = @_;
my $ref = $c->req->param('hb') || $c->req->param('h');
my $compare = $c->req->param('hbp') || $c->req->param('hp');
- return '/ref/diff', [$repos, $ref], $compare, $c->req->param('f');
+ return '/ref/diff_fancy', [$repos, $ref], $compare, $c->req->param('f');
},
blobdiff_plain => sub {
my($c, $action, $repos) = @_;
my $compare = $c->req->param('hbp') || $c->req->param('hp');
return '/ref/diff_plain', [$repos, $ref], $compare, $c->req->param('f');
},
+ commit => sub {
+ my($c, $action, $repos) = @_;
+ my $ref = $c->req->param('hb') || $c->req->param('h') || 'HEAD';
+ return '/ref/commit', [$repos, $ref];
+ },
+ # XXX These can be consolidated with the blob equivalents.
+ commitdiff => sub {
+ my($c, $action, $repos) = @_;
+ my $ref = $c->req->param('hb') || $c->req->param('h') || 'HEAD';
+ my $compare = $c->req->param('hbp') || $c->req->param('hp');
+ return '/ref/diff_fancy', [$repos, $ref], $compare, $c->req->param('f');
+ },
+ commitdiff_plain => sub {
+ my($c, $action, $repos) = @_;
+ my $ref = $c->req->param('hb') || $c->req->param('h');
+ my $compare = $c->req->param('hbp') || $c->req->param('hp');
+ return '/ref/diff_plain', [$repos, $ref || 'HEAD'], $compare, $c->req->param('f');
+ },
+ history => sub {
+ my($c, $action, $repos) = @_;
+ my $ref = $c->req->param('hb') || $c->req->param('h') || 'HEAD';
+ return '/ref/history', [$repos, $ref], $c->req->param('f');
+ },
+ log => sub {
+ my($c, $action, $repos) = @_;
+ my $ref = $c->req->param('hb') || $c->req->param('h') || 'HEAD';
+ return '/ref/longlog', [$repos, $ref];
+ },
+ patch => sub {
+ my($c, $action, $repos) = @_;
+ my $ref = $c->req->param('hb') || $c->req->param('h') || 'HEAD';
+ return '/ref/patch', [$repos, $ref];
+ },
+ patches => sub {
+ my($c, $action, $repos) = @_;
+ # XXX Is the arg there wrong? It's just copying G::C::R::patch.
+ return '/ref/patches', [$repos, $c->req->param('h') || 'HEAD'], 1;
+ },
+ search_help => sub {
+ return '/search_help';
+ },
+ shortlog => sub {
+ my($c, $action, $repos) = @_;
+ my $ref = $c->req->param('hb') || $c->req->param('h') || 'HEAD';
+ return '/ref/shortlog', [$repos, $ref];
+ },
+ snapshot => sub {
+ my($c, $action, $repos) = @_;
+ my $ref = $c->req->param('h') || 'HEAD';
+ return '/ref/snapshot', [$repos, $ref], $c->req->param('sf');
+ },
+ tree => sub {
+ my($c, $action, $repos) = @_;
+ my $ref = $c->req->param('hb') || $c->req->param('h') || 'HEAD';
+ return '/ref/tree', [$repos, $ref], $c->req->param('f');
+ },
+ '(?:atom|rss)' => sub {
+ my($c, $action, $repos) = @_;
+ # XXX No support for arbitrary branches or merges/nomerges option :(
+ return "/repository/$action", [$repos], $c->req->param('f');
+ },
+ blame => sub {
+ my($c, $action, $repos) = @_;
+ my $ref = $c->req->param('hb') || $c->req->param('h');
+ return '/ref/blame', [$repos, $ref], $c->req->param('f');
+ },
);
sub _legacy_uri {
die "Matched too many actions for '$a' - @result"
if @result > 1;
- return $LEGACY_DISPATCH{$result[0]}->($c, $action, $repos)
- if $result[0];
+ return
+ unless $result[0];
+
+ my($real_action, $captures, @args) = $LEGACY_DISPATCH{$result[0]}->($c, $action, $repos);
+
+ return $real_action, $captures || [], grep defined, @args;
}
sub handler : Chained('/base') PathPart('legacy') Args() {
die("Not supported")
unless $action;
- $c->res->redirect($c->uri_for_action($action, $captures || [], @args));
+ $c->res->redirect($c->uri_for_action($action, $captures, @args));
$c->res->status(301);
}
=cut
-sub atom : Chained('find') Args(0) {
+sub atom : Chained('find') Does('FilenameArgs') Args() {
my ($self, $c) = @_;
my $host = lc hostname();
my $repository = $c->stash->{Repository};
my %logargs = (
- sha1 => $repository->head_hash,
- count => Gitalist->config->{paging}{log} || 25,
+ sha1 => $repository->head_hash,
+ count => Gitalist->config->{paging}{log} || 25,
+ ($c->stash->{filename} ? (file => $c->stash->{filename}) : ()),
);
my @revs;
=cut
-sub rss : Chained('find') Args(0) {
+sub rss : Chained('find') Does('FilenameArgs') Args() {
my ($self, $c) = @_;
my $repository = $c->stash->{Repository};
my %logargs = (
sha1 => $repository->head_hash,
count => Gitalist->config->{paging}{log} || 25,
-# ($c->req->param('f') ? (file => $c->req->param('f')) : ())
+ ($c->stash->{filename} ? (file => $c->stash->{filename}) : ()),
);
my @revs;
my $mk_title = $c->stash->{short_cmt};
test('/', 'a=blobdiff_plain;f=file1;h=5716ca5987cbf97d6bb54920bea6adde242d87e6;hp=257cc5642cb1a054f08cc83f2d943e56fd3ebe99;hb=HEAD;hpb=3bc0634310b9c62222bb0e724c11ffdfb297b4ac');
test('/', 'a=blobdiff_plain;f=file1;h=5716ca5987cbf97d6bb54920bea6adde242d87e6;hp=257cc5642cb1a054f08cc83f2d943e56fd3ebe99;hb=master;hpb=3bc0634310b9c62222bb0e724c11ffdfb297b4ac');
-{
-
- local $TODO = 'FIXME';
-
test('/', 'a=commit');
test('/', 'a=commit;h=36c6c6708b8360d7023e8a1649c45bcf9b3bd818');
test('/', 'a=commit;h=3bc0634310b9c62222bb0e724c11ffdfb297b4ac');
test('/', 'a=commitdiff_plain;h=refs/heads/master');
test('/', 'a=commitdiff_plain;h=refs/heads/master;hp=3f7567c7bdf7e7ebf410926493b92d398333116e');
-
test('/', 'a=history;f=dir1/file2;h=257cc5642cb1a054f08cc83f2d943e56fd3ebe99;hb=36c6c6708b8360d7023e8a1649c45bcf9b3bd818');
test('/', 'a=history;f=dir1/file2;h=257cc5642cb1a054f08cc83f2d943e56fd3ebe99;hb=HEAD');
test('/', 'a=history;f=dir1/file2;h=257cc5642cb1a054f08cc83f2d943e56fd3ebe99;hb=master');
test('/', 'a=tree;hb=master');
test('/', 'a=tree;hb=refs/heads/master');
-
test('/', 'a=atom');
test('/', 'a=atom;f=dir1');
test('/', 'a=atom;f=dir1/file2');
test('/', 'a=blame;f=file1;hb=3bc0634310b9c62222bb0e724c11ffdfb297b4ac');
test('/', 'a=blame;f=file1;hb=3f7567c7bdf7e7ebf410926493b92d398333116e');
-}
-
done_testing;
-