about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/View.pm7
-rw-r--r--lib/PublicInbox/ViewDiff.pm4
2 files changed, 8 insertions, 3 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;
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) {