Provided support for remaining legacy URIs.
[catagits/Gitalist.git] / lib / Gitalist / Controller / LegacyURI.pm
index a902a83..dd0472b 100644 (file)
@@ -26,7 +26,7 @@ my %LEGACY_DISPATCH = (
         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) =  @_;
@@ -34,6 +34,72 @@ my %LEGACY_DISPATCH = (
         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 {
@@ -46,8 +112,12 @@ 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() {
@@ -58,7 +128,7 @@ 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);
 }