From: Tomas Doran Date: Sun, 24 Jan 2010 14:14:29 +0000 (+0000) Subject: Make // also work for //.. X-Git-Tag: 0.000006_01~1^2~26 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=dcb1b9274df97bb163f7c0fb3b9aa80c31255cae;hp=9c96c2353321cd52789e2df03501a890c48f1e7b;p=catagits%2FGitalist.git Make // also work for //.. Not quite what we want yet, but this is a good start.. --- diff --git a/Makefile.PL b/Makefile.PL index f8b5731..13b84df 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -69,6 +69,7 @@ requires 'Config::General'; requires 'Moose'; requires 'Moose::Autobox'; +requires 'MooseX::MultiMethods' => '0.10'; requires 'MooseX::Declare' => '0.32'; requires 'MooseX::Types::Common'; requires 'MooseX::Types::Path::Class'; diff --git a/lib/Gitalist/Git/Repository.pm b/lib/Gitalist/Git/Repository.pm index eaefb94..f65eb0b 100644 --- a/lib/Gitalist/Git/Repository.pm +++ b/lib/Gitalist/Git/Repository.pm @@ -6,6 +6,7 @@ class Gitalist::Git::Repository with Gitalist::Git::HasUtils { use MooseX::Types::Path::Class qw/Dir/; use MooseX::Types::Moose qw/Str Maybe Bool HashRef ArrayRef/; use Gitalist::Git::Types qw/SHA1/; + use MooseX::MultiMethods; use Moose::Autobox; use List::MoreUtils qw/any zip/; use DateTime; @@ -74,6 +75,15 @@ class Gitalist::Git::Repository with Gitalist::Git::HasUtils { } ## Public methods + + multi method get_object_or_head (SHA1 $sha1) { + $self->get_object($sha1); + } + multi method get_object_or_head (NonEmptySimpleStr $ref) { + my $sha1 = $self->head_hash($ref); + $self->get_object($sha1); + } + method head_hash (Str $head?) { my $output = $self->run_cmd(qw/rev-parse --verify/, $head || 'HEAD' ); confess("No such head: " . $head) unless defined $output; diff --git a/lib/Gitalist/URIStructure/Commit.pm b/lib/Gitalist/URIStructure/Commit.pm index 584b471..01bb761 100644 --- a/lib/Gitalist/URIStructure/Commit.pm +++ b/lib/Gitalist/URIStructure/Commit.pm @@ -14,7 +14,7 @@ after 'base' => sub { sub find : Chained('base') PathPart('') CaptureArgs(1) { my ($self, $c, $sha1part) = @_; # FIXME - Should not be here! - $c->stash->{Commit} = $c->stash->{Repository}->get_object($sha1part) + $c->stash->{Commit} = $c->stash->{Repository}->get_object_or_head($sha1part) or $c->detach('/error404', "Couldn't find a object for '$sha1part' in XXXX!"); }