]> git.ipfire.org Git - thirdparty/public-inbox.git/commitdiff
repobrowse: git commit allows expanding combined diffs
authorEric Wong <e@80x24.org>
Thu, 31 Dec 2015 03:15:26 +0000 (03:15 +0000)
committerEric Wong <e@80x24.org>
Tue, 5 Apr 2016 18:58:27 +0000 (18:58 +0000)
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
lib/PublicInbox/RepoBrowseQuery.pm

index 5064f568488b012b6abcc422dfa6e8afe344947d..0b1d08bc08577ba31c6ef818e243bff4e524bb03 100644 (file)
@@ -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{[<a\nhref="$qs">--cc (less)</a>};
+                       $m .= q{|<b>-c (more)</b>]};
+               } else {
+                       $m .= q{[<b>--cc (less)</b>};
+                       my $qs = $q->qs(c => 1, id => $h);
+                       $m .= qq{|<a\nhref="$qs">-c (more)</a>]};
+               }
+               $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 <b>$html_path</b>";
+       "diff --$combined <b>$html_path</b>";
 }
 
 # index abcdef09,01234567..76543210
index 861e587b636d6e22e8570acd3f6068fd8e51a40a..5118f0b45774f6becdd0a3e1b5c327b88bffb312 100644 (file)
@@ -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) = @_;