about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-01-20 09:42:34 +0000
committerEric Wong <e@80x24.org>2019-01-20 09:42:34 +0000
commita01040ed2ec1e4575947e6d589499a4c7315d90e (patch)
treeeacf2ad2c84ab5e49f8a204b20dbf9d5b661313e /lib
parentc2d12f79e78eb4ea909cac6106880c0f41e8c5fd (diff)
downloadpublic-inbox-a01040ed2ec1e4575947e6d589499a4c7315d90e.tar.gz
Having diff highlighting alone is still useful, even
if blob-resolution/recreation is too expensive or
unfeasible.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/View.pm18
-rw-r--r--lib/PublicInbox/ViewDiff.pm13
2 files changed, 19 insertions, 12 deletions
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 0187ec33..41a45b0b 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -558,15 +558,17 @@ sub add_text_body {
         return attach_link($upfx, $ct, $p, $fn) unless defined $s;
 
         my ($diff, $spfx);
-        if ($ibx->{-repo_objs} && $s =~ /^(?:diff|---|\+{3}) /ms) {
+        if ($s =~ /^(?:diff|---|\+{3}) /ms) {
                 $diff = [];
-                my $n_slash = $upfx =~ tr!/!/!;
-                if ($n_slash == 0) {
-                        $spfx = '../';
-                } elsif ($n_slash == 1) {
-                        $spfx = '';
-                } else { # nslash == 2
-                        $spfx = '../../';
+                if ($ibx->{-repo_objs}) {
+                        my $n_slash = $upfx =~ tr!/!/!;
+                        if ($n_slash == 0) {
+                                $spfx = '../';
+                        } elsif ($n_slash == 1) {
+                                $spfx = '';
+                        } else { # nslash == 2
+                                $spfx = '../../';
+                        }
                 }
         };
 
diff --git a/lib/PublicInbox/ViewDiff.pm b/lib/PublicInbox/ViewDiff.pm
index 1aad2832..0d1aefb7 100644
--- a/lib/PublicInbox/ViewDiff.pm
+++ b/lib/PublicInbox/ViewDiff.pm
@@ -40,7 +40,8 @@ sub diff_hunk ($$$$) {
         my $oid_a = $dctx->{oid_a};
         my $oid_b = $dctx->{oid_b};
 
-        (defined($oid_a) && defined($oid_b)) or return "@@ $ca $cb @@";
+        (defined($spfx) && defined($oid_a) && defined($oid_b)) or
+                return "@@ $ca $cb @@";
 
         my ($n) = ($ca =~ /^-(\d+)/);
         $n = defined($n) ? do { ++$n; "#n$n" } : '';
@@ -53,6 +54,11 @@ sub diff_hunk ($$$$) {
         $rv .= qq( <a\nhref=$spfx$oid_b/s/$dctx->{Q}$n>$cb</a> @@);
 }
 
+sub oid ($$$) {
+        my ($dctx, $spfx, $oid) = @_;
+        defined($spfx) ? qq(<a\nhref=$spfx$oid/s/$dctx->{Q}>$oid</a>) : $oid;
+}
+
 sub flush_diff ($$$$) {
         my ($dst, $spfx, $linkify, $diff) = @_;
         my $state = DSTATE_INIT;
@@ -90,11 +96,10 @@ sub flush_diff ($$$$) {
                         }
                         $$dst .= to_html($linkify, $s);
                 } elsif ($s =~ s/^(index $OID_NULL\.\.)($OID_BLOB)\b//o) {
-                        $$dst .= qq($1<a\nhref=$spfx$2/s/$dctx->{Q}>$2</a>);
+                        $$dst .= $1 . oid($dctx, $spfx, $2);
                         $$dst .= to_html($linkify, $s) ;
                 } elsif ($s =~ s/^index ($OID_NULL)(\.\.$OID_BLOB)\b//o) {
-                        $$dst .= 'index ';
-                        $$dst .= qq(<a\nhref=$spfx$1/s/$dctx->{Q}>$1</a>$2);
+                        $$dst .= 'index ' . oid($dctx, $spfx, $1) . $2;
                         $$dst .= to_html($linkify, $s);
                 } elsif ($s =~ /^index ($OID_BLOB)\.\.($OID_BLOB)/o) {
                         $dctx->{oid_a} = $1;