diff options
author | Eric Wong <e@80x24.org> | 2016-01-16 02:29:23 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-04-05 18:58:27 +0000 |
commit | ff5d4363edb4fd30830826742acfc3f1c9fa5864 (patch) | |
tree | b47b0ca27c3e99c7ade510344d0b8339da349080 | |
parent | be3e0f48796ddb342d4eeb4838c5eedb9aaf79b9 (diff) | |
download | public-inbox-ff5d4363edb4fd30830826742acfc3f1c9fa5864.tar.gz |
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.
-rw-r--r-- | lib/PublicInbox/RepobrowseGitLog.pm | 70 | ||||
-rw-r--r-- | 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 <meta@public-inbox.org> # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> +# 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{[<a\nhref="$qs">oneline</a>|<b>expand</b>]}; - } else { - my $qs = $q->qs(showmsg => 1); - $x .= qq{[<b>oneline</b>|<a\nhref="$qs">expand</a>]}; - } my $rel = $req->{relcmd}; - $fh->write('<html><head>' . PublicInbox::Hval::STYLE . - "<title>$desc</title></head><body><pre><b>$desc</b>\n\n". - qq!commit\t\t$x\n!); - $fh->write($showmsg ? '</pre>' : "\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 <a\nhref="#p$p[0]">$p[0]</a>); + } elsif (@p > 0) { # merge commit + $plinks = ' / parents ' . join(' ', map { + qq(<a\nhref="#p$_">$_</a>); + } @p); + } else { + $plinks = ''; # root commit + } $s = utf8_html($s); - $s = qq(<a\nhref="${rel}commit?id=$id">$s</a>); + $s = qq(<a\nid=p$id\nhref="${rel}commit?id=$id"><b>$s</b></a>); 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 = "<table><tr><td\nvalign=top><pre>$id"; - my $nl = $b eq '' ? '' : "\n"; # empty bodies :< - $b = $x . ' </pre></td><td><pre>' . - "<b>$s</b>\n- $ah @ $ai\n$nl" . - utf8_html($b) . '</pre></td></tr></table>'; - } 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<a\nhref="?h=$p$showmsg">$p</a>\t); + $m .= qq(\n<a\nid=p$p\nhref="?h=$p">$p</a>\t); $s = defined($s) ? utf8_html($s) : ''; $m .= qq(<a\nhref="${rel}commit?id=$p">$s</a>); } - my $foot = $showmsg ? "<pre>\t\t$x\n\n" : "\n\t\t$x\n\n"; + my $foot = "</pre><hr /><pre>"; 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) = @_; |