From: Luben Tuikov Date: Mon, 02 Oct 2006 19:29:30 GMT Subject: Re: [PATCH] gitweb: make leftmost column of blame less cluttered. Message-ID: <20061002192930.86293.qmail@web31803.mail.mud.yahoo.com> In-Reply-To: <7vwt7k4clr.fsf@assigned-by-dhcp.cox.net> --- Junio C Hamano wrote: > Instead of labelling each and every line with clickable commit > object name, this makes the blame output to show them only on > the first line of each group of lines from the same revision. > > Also it makes mouse-over to show the minimum authorship and > authordate information for extra cuteness ;-). > > Signed-off-by: Junio C Hamano > --- ACK. Please commit. Luben > > * I've been staying away from the party to paint the bikeshed, > but I had a bit of time to kill tonight. Let's see if people > might like this... > > gitweb/gitweb.perl | 67 +++++++++++++++++++++++++++++++++++++++++---------- > 1 files changed, 54 insertions(+), 13 deletions(-) > > diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl > index 44991b1..7e4ec8d 100755 > --- a/gitweb/gitweb.perl > +++ b/gitweb/gitweb.perl > @@ -2429,6 +2429,41 @@ sub git_tag { > git_footer_html(); > } > > +sub git_blame_flush_chunk { > + my ($name, $revdata, $color, $rev, @line) = @_; > + my $label = substr($rev, 0, 8); > + my $line = scalar(@line); > + my $cnt = 0; > + my $pop = ''; > + > + if ($revdata->{$rev} ne '') { > + $pop = ' title="' . esc_html($revdata->{$rev}) . '"'; > + } > + > + for (@line) { > + my ($lineno, $data) = @$_; > + $cnt++; > + print "\n"; > + if ($cnt == 1) { > + print " + if ($line > 1) { > + print " rowspan=\"$line\""; > + } > + print ">"; > + print $cgi->a({-href => href(action=>"commit", > + hash=>$rev, > + file_name=>$name)}, > + $label); > + print "\n"; > + } > + print "". > + "" . > + esc_html($lineno) . "\n"; > + print "" . esc_html($data) . "\n"; > + print "\n"; > + } > +} > + > sub git_blame2 { > my $fd; > my $ftype; > @@ -2474,27 +2509,33 @@ sub git_blame2 { > > > HTML > + my @chunk = (); > + my %revdata = (); > while (<$fd>) { > /^([0-9a-fA-F]{40}).*?(\d+)\)\s{1}(\s*.*)/; > - my $full_rev = $1; > - my $rev = substr($full_rev, 0, 8); > - my $lineno = $2; > - my $data = $3; > - > + my ($full_rev, $author, $date, $lineno, $data) = > + /^([0-9a-f]{40}).*?\s\((.*?)\s+([-\d]+ [:\d]+ [-+\d]+)\s+(\d+)\)\s(.*)/; > + if (!exists $revdata{$full_rev}) { > + $revdata{$full_rev} = "$author, $date"; > + } > if (!defined $last_rev) { > $last_rev = $full_rev; > } elsif ($last_rev ne $full_rev) { > + git_blame_flush_chunk($file_name, > + \%revdata, > + $rev_color[$current_color], > + $last_rev, @chunk); > + @chunk = (); > $last_rev = $full_rev; > $current_color = ++$current_color % $num_colors; > } > - print "\n"; > - print "\n"; > - print "\n"; > - print "\n"; > - print "\n"; > + push @chunk, [$lineno, $data]; > + } > + if (@chunk) { > + git_blame_flush_chunk($file_name, > + \%revdata, > + $rev_color[$current_color], > + $last_rev, @chunk); > } > print "
CommitLineData
" . > - $cgi->a({-href => href(action=>"commit", hash=>$full_rev, file_name=>$file_name)}, > - esc_html($rev)) . "" . > - esc_html($lineno) . "" . esc_html($data) . "
\n"; > print ""; > -- > 1.4.2.1.gc9fffe > > > - > To unsubscribe from this list: send the line "unsubscribe git" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >