From: Dan Brook Date: Fri, 20 Nov 2009 16:21:38 +0000 (+0000) Subject: Fleshed out the /blame action a bit more. X-Git-Tag: 0.000000_01~11 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=6d4fe0d7708c05af287be3816f970ea444f4f685;p=catagits%2FGitalist.git Fleshed out the /blame action a bit more. --- diff --git a/lib/Gitalist/Controller/Root.pm b/lib/Gitalist/Controller/Root.pm index d1c8cf4..db32705 100644 --- a/lib/Gitalist/Controller/Root.pm +++ b/lib/Gitalist/Controller/Root.pm @@ -145,10 +145,8 @@ sub blame : Local { || die "Couldn't discern the corresponding head."; my $filename = $c->req->param('f') || ''; - my($metadata, $filedata) = $project->get_object($hb)->blame($filename); $c->stash( - metadata => $metadata, - filedata => $filedata, + blame => $project->get_object($hb)->blame($filename), head => $project->get_object($hb), filename => $filename, ); diff --git a/lib/Gitalist/Git/Object/Blob.pm b/lib/Gitalist/Git/Object/Blob.pm index 51be7e3..91e43fb 100644 --- a/lib/Gitalist/Git/Object/Blob.pm +++ b/lib/Gitalist/Git/Object/Blob.pm @@ -2,7 +2,5 @@ package Gitalist::Git::Object::Blob; use MooseX::Declare; class Gitalist::Git::Object::Blob extends Gitalist::Git::Object { - use MooseX::Types::Common::String qw/NonEmptySimpleStr/; - has '+type' => ( default => 'blob' ); } diff --git a/lib/Gitalist/Git/Object/Commit.pm b/lib/Gitalist/Git/Object/Commit.pm index 68b2469..59af17e 100644 --- a/lib/Gitalist/Git/Object/Commit.pm +++ b/lib/Gitalist/Git/Object/Commit.pm @@ -141,36 +141,46 @@ class Gitalist::Git::Object::Commit } + # XXX A prime candidate for caching. method blame ( NonEmptySimpleStr $filename ) { my @blameout = $self->_run_cmd_list( blame => '-p', $self->sha1, '--', $filename ); - my(%metadata, @filedata); + my(%commitdata, @filedata); while(defined(local $_ = shift @blameout)) { my ($sha1, $orig_lineno, $lineno, $group_size) = - /^([0-9a-f]{40}) (\d+) (\d+)(?: (\d+))?$/; + /^([0-9a-f]{40}) (\d+) (\d+)(?: (\d+))?$/; - my $meta = $metadata{$sha1} ||= { - orig_lineno => $orig_lineno, - lineno => $lineno, - group_size => $group_size, - }; + $commitdata{$sha1} = {} + unless exists $commitdata{$sha1}; + my $commit = $commitdata{$sha1}; my $line; - while(defined($line = shift @blameout)) { - last - if $line =~ s/^\t//; - $meta->{$1} = $2 - if $line =~ /^(\S+) (.*)/; + until(($line = shift @blameout) =~ s/^\t//) { + $commit->{$1} = $2 + if $line =~ /^(\S+) (.*)/; } - $meta->{parent} = $self->_run_cmd('rev-parse', "$sha1^") - unless exists $meta->{parent}; + unless(exists $commit->{author_dt}) { + for my $t (qw/author committer/) { + my $dt = DateTime->from_epoch(epoch => $commit->{"$t-time"}); + $dt->set_time_zone($commit->{"$t-tz"}); + $commit->{"$t\_dt"} = $dt; + } + } - push @filedata, { line => $line, sha1 => $sha1 }; + push @filedata, { + line => $line, + commit => { sha1 => $sha1, %$commit }, + meta => { + orig_lineno => $orig_lineno, + lineno => $lineno, + ( $group_size ? (group_size => $group_size) : () ), + }, + }; } - return \%metadata, \@filedata; + return \@filedata; } } diff --git a/root/blame.tt2 b/root/blame.tt2 index 9c3958f..1185953 100644 --- a/root/blame.tt2 +++ b/root/blame.tt2 @@ -9,8 +9,12 @@
-[% FOR info IN filedata %] - +[% FOR info IN blame %] + + + + + [% END %]
[% info.sha1 %]
[% info.line | html %]
[% info.commit.sha1.substr(0,6) %][% info.meta.lineno %]
[% info.line | html %]
diff --git a/root/static/css/site.css b/root/static/css/site.css index fbcb637..67c45fc 100644 --- a/root/static/css/site.css +++ b/root/static/css/site.css @@ -140,6 +140,11 @@ table.heads { width: 75%; } +/* /blame */ +pre.blame-line { + margin: 0; +} + /* /blob */ pre.blob { background-color: #333;