From ff5d4363edb4fd30830826742acfc3f1c9fa5864 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 16 Jan 2016 02:29:23 +0000 Subject: repobrowse: eliminate oneline log view The oneline view lacks sufficient information at times. Reduce the number of options presented and always show the full log message to avoid making the user follow more links. --- lib/PublicInbox/RepobrowseGitLog.pm | 70 ++++++++++++++--------------------- lib/PublicInbox/RepobrowseGitQuery.pm | 2 +- 2 files changed, 28 insertions(+), 44 deletions(-) diff --git a/lib/PublicInbox/RepobrowseGitLog.pm b/lib/PublicInbox/RepobrowseGitLog.pm index 4c169707..36664171 100644 --- a/lib/PublicInbox/RepobrowseGitLog.pm +++ b/lib/PublicInbox/RepobrowseGitLog.pm @@ -1,6 +1,7 @@ # Copyright (C) 2015 all contributors # License: AGPL-3.0+ +# show the log view package PublicInbox::RepobrowseGitLog; use strict; use warnings; @@ -9,8 +10,7 @@ use base qw(PublicInbox::RepobrowseBase); use PublicInbox::RepobrowseGit qw(git_dec_links git_commit_title); # cannot rely on --date=format-local:... yet, it is too new (September 2015) my $LOG_FMT = '--pretty=tformat:'. - join('%x00', qw(%h %p %s D%D)); -my $MSG_FMT = join('%x00', '', qw(%ai a%an b%b)); + join('%x00', qw(%h %p %s D%D %ai a%an b%b), '', ''); sub call_git_log { my ($self, $req) = @_; @@ -23,17 +23,14 @@ sub call_git_log { my $h = $q->{h}; $h eq '' and $h = 'HEAD'; - my $fmt = $LOG_FMT; - $fmt .= $MSG_FMT if $q->{showmsg}; - $fmt .= '%x00%x00'; - my $git = $repo_info->{git}; - my $log = $git->popen(qw(log --no-notes --no-color - --abbrev-commit --abbrev=12), - $fmt, "-$max", $h); + my $log = $git->popen(qw(log --no-notes --no-color --abbrev-commit), + $LOG_FMT, "-$max", $h, '--'); sub { my ($res) = @_; # Plack callback my $fh = $res->([200, ['Content-Type'=>'text/html']]); + my $title = utf8_html("log: $repo_info->{path_info} ($h)"); + $fh->write($self->html_start($req, $title)); git_log_stream($req, $q, $log, $fh, $git); $fh->close; } @@ -41,25 +38,8 @@ sub call_git_log { sub git_log_stream { my ($req, $q, $log, $fh, $git) = @_; - my $desc = $req->{repo_info}->{desc_html}; - my $showmsg = $q->{showmsg}; - - my $x = 'commit log '; - if ($showmsg) { - $showmsg = "&showmsg=1"; - my $qs = $q->qs(showmsg => ''); - $qs = $req->{cgi}->path_info if ($qs eq ''); - $x .= qq{[oneline|expand]}; - } else { - my $qs = $q->qs(showmsg => 1); - $x .= qq{[oneline|expand]}; - } my $rel = $req->{relcmd}; - $fh->write('' . PublicInbox::Hval::STYLE . - "$desc
$desc\n\n".
-		qq!commit\t\t$x\n!);
-	$fh->write($showmsg ? '
' : "\n"); my %acache; local $/ = "\0\0\n"; my $nr = 0; @@ -69,28 +49,32 @@ sub git_log_stream { $seen{$id} = 1; my @p = split(' ', $p); push @parents, @p; + my $plinks; + if (@p == 1) { # typical, single-parent commit + $plinks = qq( / parent $p[0]); + } elsif (@p > 0) { # merge commit + $plinks = ' / parents ' . join(' ', map { + qq($_); + } @p); + } else { + $plinks = ''; # root commit + } $s = utf8_html($s); - $s = qq($s); + $s = qq($s); if ($D =~ /\AD(.+)/) { $s .= ' ('. join(', ', git_dec_links($rel, $1)) . ')'; } - if (defined $b) { - $an =~ s/\Aa//; - $b =~ s/\Ab//; - $b =~ s/\s*\z//s; + $an =~ s/\Aa//; + $b =~ s/\Ab//; + $b =~ s/\s*\z//s; - my $ah = $acache{$an} ||= utf8_html($an); - my $x = "
$id";
-			my $nl = $b eq '' ? '' : "\n"; # empty bodies :<
-			$b = $x . '  
' .
-				"$s\n- $ah @ $ai\n$nl" .
-				utf8_html($b) . '
'; - } else { - $b = qq($id\t$s\n); - } - $fh->write($b); + my $ah = $acache{$an} ||= utf8_html($an); + my $nl = $b eq '' ? '' : "\n"; # empty bodies :< + $b = "$s\n- $ah @ $ai\n commit $id$plinks\n$nl" . + utf8_html($b); + $fh->write("\n\n" .$b); ++$nr; } @@ -100,11 +84,11 @@ sub git_log_stream { next if $seen{$p}; $seen{$p} = ++$np; my $s = git_commit_title($git, $p); - $m .= qq(\n$p\t); + $m .= qq(\n$p\t); $s = defined($s) ? utf8_html($s) : ''; $m .= qq($s); } - my $foot = $showmsg ? "
\t\t$x\n\n" : "\n\t\t$x\n\n";
+	my $foot = "

";
 	if ($np == 0) {
 		$foot .= "No commits follow";
 	} elsif ($np > 1) {
diff --git a/lib/PublicInbox/RepobrowseGitQuery.pm b/lib/PublicInbox/RepobrowseGitQuery.pm
index 018b20c9..0ee9df04 100644
--- a/lib/PublicInbox/RepobrowseGitQuery.pm
+++ b/lib/PublicInbox/RepobrowseGitQuery.pm
@@ -6,7 +6,7 @@ package PublicInbox::RepobrowseGitQuery;
 use strict;
 use warnings;
 use PublicInbox::Hval;
-my @KNOWN_PARAMS = qw(id id2 h showmsg ofs);
+my @KNOWN_PARAMS = qw(id id2 h ofs);
 
 sub new {
 	my ($class, $cgi) = @_;
-- 
cgit v1.2.3-24-ge0c7