sub reflog : Local {
my ( $self, $c ) = @_;
-
- my @log = $c->model()->reflog(
+ $c->stash(current_model => 'GitRepos');
+ my @log = $c->stash->{Project}->reflog(
'--since=yesterday'
);
sub search : Local {
my($self, $c) = @_;
-
+ $c->stash(current_action => 'GitRepos');
+ my $project = $c->stash->{Project};
my $commit = $self->_get_commit($c);
# Lifted from /shortlog.
my %logargs = (
$c->stash(
commit => $commit,
- results => [$c->model()->list_revs(%logargs)],
+ results => [$project->list_revs(%logargs)],
action => 'search',
# This could be added - page => $page,
);
return @ret;
}
+ method reflog (@logargs) {
+ my @entries
+ = $self->run_cmd(qw(log -g), @logargs)
+ =~ /(^commit.+?(?:(?=^commit)|(?=\z)))/msg;
+
+=pod
+ commit 02526fc15beddf2c64798a947fecdd8d11bf993d
+ Reflog: HEAD@{14} (The Git Server <git@git.dev.venda.com>)
+ Reflog message: push
+ Author: Foo Barsby <fbarsby@example.com>
+ Date: Thu Sep 17 12:26:05 2009 +0100
+
+ Merge branch 'abc123'
+
+=cut
+
+ return map {
+ # XXX Stuff like this makes me want to switch to Git::PurePerl
+ my($sha1, $type, $author, $date)
+ = m{
+ ^ commit \s+ ($SHA1RE)$
+ .*?
+ Reflog[ ]message: \s+ (.+?)$ \s+
+ Author: \s+ ([^<]+) <.*?$ \s+
+ Date: \s+ (.+?)$
+ }xms;
+
+ pos($_) = index($_, $date) + length $date;
+
+ # Yeah, I just did that.
+ my($msg) = /\G\s+(\S.*)/sg;
+ {
+ hash => $sha1,
+ type => $type,
+ author => $author,
+
+ # XXX Add DateTime goodness.
+ date => $date,
+ message => $msg,
+ }
+ ;
+ } @entries;
+ }
+
# Compatibility
=head2 info
test('/summary');
test('/shortlog');
test('/log');
+ test('/reflog');
test('/commit');
test('/commitdiff', 'h=36c6c6708b8360d7023e8a1649c45bcf9b3bd818');
test('/tree', 'h=145dc3ef5d307be84cb9b325d70bd08aeed0eceb;hb=36c6c6708b8360d7023e8a1649c45bcf9b3bd818');
+ test('/search', 'h=36c6c6708b8360d7023e8a1649c45bcf9b3bd818&f=&type=commit&text=added');
}
done_testing;