about summary refs log tree commit homepage
path: root/lib/PublicInbox/ViewDiff.pm
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-05-06 10:40:54 +0000
committerEric Wong <e@yhbt.net>2020-05-07 19:09:43 +0000
commitc2bc9ebcb770a27823d8e989707f434826333b0e (patch)
tree4186ab7ca6cae110e1262acd95c8d7eeb9b287da /lib/PublicInbox/ViewDiff.pm
parent65b37aeb8392a62e9aa8ceac08227c77c6fa6b8b (diff)
downloadpublic-inbox-c2bc9ebcb770a27823d8e989707f434826333b0e.tar.gz
Sometimes senders draw ASCII tables and such which we
get fooled into attempting highlighting and diffstat
anchoring.

We now require 3 consecutive diff header lines:

	/^--- /, /^\Q+++\E /, and /^@@ /

to enable diff highlighting (whether generated with git or not).
The presence of a line matching /^diff / is not sufficient or
even useful to us for highlighting diffs, since that could just
be part of a line-wrapped sentence.

However, we'll now check for the presence of a line matching
/^diff --git / before enabling diffstat anchors.  Otherwise
cover letters for a patch series may fool us into creating
anchors for diffstats.
Diffstat (limited to 'lib/PublicInbox/ViewDiff.pm')
-rw-r--r--lib/PublicInbox/ViewDiff.pm4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/PublicInbox/ViewDiff.pm b/lib/PublicInbox/ViewDiff.pm
index 34df8ad4..6fe9a0d7 100644
--- a/lib/PublicInbox/ViewDiff.pm
+++ b/lib/PublicInbox/ViewDiff.pm
@@ -165,10 +165,12 @@ sub diff_before_or_after ($$) {
         my ($ctx, $x) = @_;
         my $linkify = $ctx->{-linkify};
         my $dst = $ctx->{obuf};
+        my $anchors = exists($ctx->{-anchors}) ? 1 : 0;
         for my $y (split(/(^---\n)/sm, $$x)) {
                 if ($y =~ /\A---\n\z/s) {
                         $$dst .= "---\n"; # all HTML is "\r\n" => "\n"
-                } elsif ($y =~ /^ [0-9]+ files? changed, /sm) {
+                        $anchors |= 2;
+                } elsif ($anchors == 3 && $y =~ /^ [0-9]+ files? changed, /sm) {
                         # ok, looks like a diffstat, go line-by-line:
                         for my $l (split(/^/m, $y)) {
                                 if ($l =~ /^ (.+)( +\| .*\z)/s) {