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 /lib/PublicInbox/RepobrowseGitLog.pm | |
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.
Diffstat (limited to 'lib/PublicInbox/RepobrowseGitLog.pm')
-rw-r--r-- | lib/PublicInbox/RepobrowseGitLog.pm | 70 |
1 files changed, 27 insertions, 43 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) { |