]> Sergey Matveev's repositories - public-inbox.git/commitdiff
viewdiff: support diff-highlighting w/o coderepo
authorEric Wong <e@80x24.org>
Sun, 20 Jan 2019 09:42:34 +0000 (09:42 +0000)
committerEric Wong <e@80x24.org>
Sun, 20 Jan 2019 09:42:34 +0000 (09:42 +0000)
Having diff highlighting alone is still useful, even
if blob-resolution/recreation is too expensive or
unfeasible.

lib/PublicInbox/View.pm
lib/PublicInbox/ViewDiff.pm

index 0187ec332a58faaa4c89b6bb349a5fbb07f9c5fa..41a45b0b6682a158a37c6323e492543a3d173793 100644 (file)
@@ -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 = '../../';
+                       }
                }
        };
 
index 1aad2832bb392dbb650f9d839bcde026bb3cf3a7..0d1aefb78bdea037425867bc9f3366a7ed7b1fc5 100644 (file)
@@ -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;