about summary refs log tree commit homepage
path: root/lib/PublicInbox/View.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/View.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/View.pm')
-rw-r--r--lib/PublicInbox/View.pm7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 5144a130..f7a8ae32 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -536,11 +536,14 @@ sub add_text_body { # callback for msg_iter
         # always support diff-highlighting, but we can't linkify hunk
         # headers for solver unless some coderepo are configured:
         my $diff;
-        if ($s =~ /^(?:diff|---|\+{3}) /ms) {
+        if ($s =~ /^--- [^\n]+\n\+{3} [^\n]+\n@@ /ms) {
                 # diffstat anchors do not link across attachments or messages:
                 $idx[0] = $upfx . $idx[0] if $upfx ne '';
                 $ctx->{-apfx} = join('/', @idx);
-                $ctx->{-anchors} = {}; # attr => filename
+
+                # do attr => filename mappings for diffstats in git diffs:
+                $ctx->{-anchors} = {} if $s =~ /^diff --git /sm;
+
                 $diff = 1;
                 delete $ctx->{-long_path};
                 my $spfx;