From 2cf48cbfadb796ab92ffd89ce90a453b2c7d27d1 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 31 Dec 2015 03:15:26 +0000 Subject: [PATCH] repobrowse: git commit allows expanding combined diffs Being able to view a merge commit as -c (--combined) may be helpful; allow it as it's usually not too insane. --- lib/PublicInbox/RepoBrowseGitCommit.pm | 30 ++++++++++++++++++++------ lib/PublicInbox/RepoBrowseQuery.pm | 2 +- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/lib/PublicInbox/RepoBrowseGitCommit.pm b/lib/PublicInbox/RepoBrowseGitCommit.pm index 5064f5684..0b1d08bc0 100644 --- a/lib/PublicInbox/RepoBrowseGitCommit.pm +++ b/lib/PublicInbox/RepoBrowseGitCommit.pm @@ -59,9 +59,10 @@ sub git_commit_stream { $x .= git_parent_line(' parent', $p, $q, $git, $rel, $path); } elsif (scalar(@p) > 1) { my @common = ($q, $git, $rel, $path); - my $p = shift @p; + my @t = @p; + my $p = shift @t; $x .= git_parent_line(' parents', $p, @common); - foreach $p (@p) { + foreach $p (@t) { $x .= git_parent_line(' ', $p, @common); } } @@ -75,6 +76,20 @@ sub git_commit_stream { $fh->write($x."---\n"); git_show_diffstat($req, $h, $fh, $log); + if (scalar @p > 1) { + my $m = ' This is a merge, showing combined diff: '; + if ($q->{c}) { + my $qs = $q->qs(c => '', id => $h); + $m .= qq{[--cc (less)}; + $m .= q{|-c (more)]}; + } else { + $m .= q{[--cc (less)}; + my $qs = $q->qs(c => 1, id => $h); + $m .= qq{|-c (more)]}; + } + $fh->write($m .= "\n\n"); + } + # diff local $/ = "\n"; my $cmt = '[a-f0-9]+'; @@ -83,8 +98,8 @@ sub git_commit_stream { while (defined($l = <$log>)) { if ($l =~ m{^diff --git ("?a/.+) ("?b/.+)$}) { # regular $l = git_diff_ab_hdr($diff, $1, $2) . "\n"; - } elsif ($l =~ m{^diff --cc (.+)$}) { # --cc - $l = git_diff_cc_hdr($diff, $1) . "\n"; + } elsif ($l =~ m{^diff --(cc|combined) (.+)$}) { + $l = git_diff_cc_hdr($diff, $1, $2) . "\n"; } elsif ($l =~ /^index ($cmt)\.\.($cmt)(.*)$/o) { # regular $l = git_diff_ab_index($diff, $1, $2, $3) . "\n"; } elsif ($l =~ /^@@ (\S+) (\S+) @@(.*)$/) { # regular @@ -111,8 +126,9 @@ sub call_git_commit { my $id = $q->{id}; $id eq '' and $id = 'HEAD'; my $git = $req->{repo_info}->{git}; - my @cmd = qw(show -z --numstat -p --cc --encoding=UTF-8 + my @cmd = qw(show -z --numstat -p --encoding=UTF-8 --no-notes --no-color --abbrev=10); + push @cmd, ($q->{c} ? '-c' : '--cc'); my @path; # kill trailing slash @@ -254,11 +270,11 @@ sub git_diff_ab_hunk { } sub git_diff_cc_hdr { - my ($diff, $path) = @_; + my ($diff, $combined, $path) = @_; my $html_path = utf8_html($path); my $cc = $diff->{cc} = PublicInbox::Hval->utf8(git_unquote($path)); $diff->{path_cc} = $cc->as_path; - "diff --cc $html_path"; + "diff --$combined $html_path"; } # index abcdef09,01234567..76543210 diff --git a/lib/PublicInbox/RepoBrowseQuery.pm b/lib/PublicInbox/RepoBrowseQuery.pm index 861e587b6..5118f0b45 100644 --- a/lib/PublicInbox/RepoBrowseQuery.pm +++ b/lib/PublicInbox/RepoBrowseQuery.pm @@ -6,7 +6,7 @@ package PublicInbox::RepoBrowseQuery; use strict; use warnings; use PublicInbox::Hval; -my @KNOWN_PARAMS = qw(id id2 h showmsg ofs); +my @KNOWN_PARAMS = qw(id id2 h showmsg ofs c); sub new { my ($class, $cgi) = @_; -- 2.47.3