]> Sergey Matveev's repositories - public-inbox.git/commitdiff
viewdiff: add "b=" param when missing "diff --git" line
authorEric Wong <e@yhbt.net>
Sat, 25 Jan 2020 04:45:08 +0000 (04:45 +0000)
committerEric Wong <e@yhbt.net>
Mon, 27 Jan 2020 02:59:09 +0000 (02:59 +0000)
<2841d2de-32ad-eae8-6039-9251a40bb00e@tngtech.com> as posted to
git@vger contained an otherwise valid diff without a "diff
--git" line.  Generate a "b=" parameter in that case using the
"+++" line instead of the "diff --git" line.  SearchIdx.pm no
longer uses the "diff --git" line for filename information,
either.

lib/PublicInbox/ViewDiff.pm

index 6a60d0dca63450926f9a3c57bd0c1a9aa991509d..ff7d85f55649670e49649d84937ebb3e1a460dd5 100644 (file)
@@ -133,6 +133,17 @@ sub anchor1 ($$$$$) {
        undef
 }
 
+sub missing_diff_git_line ($$) {
+       my ($dctx, $pb) = @_;
+       # missing "diff --git ..."
+       $dctx->{path_b} = $pb;
+       $dctx->{Q} = '?b='.uri_escape_utf8($pb, UNSAFE);
+       my $pa = $dctx->{path_a};
+       if (defined($pa) && $pa ne $pb) {
+               $dctx->{Q} .= '&amp;a='. uri_escape_utf8($pa, UNSAFE);
+       }
+}
+
 sub flush_diff ($$$) {
        my ($dst, $ctx, $linkify) = @_;
        my $diff = $ctx->{-diff};
@@ -192,8 +203,24 @@ sub flush_diff ($$$) {
                        $$dst .= '</span>';
                        $state = DSTATE_CTX;
                        $$dst .= $linkify->to_html($s);
-               } elsif ($s =~ m!^--- (?:$PATH_X)!o ||
-                        $s =~ m!^\+{3} (?:$PATH_X)!o)  {
+               } elsif ($s =~ m!^--- ($PATH_X)!o) {
+                       my $pa = $1;
+                       $pa = (split('/', git_unquote($pa), 2))[1];
+                       if (($dctx->{path_a} // '') ne $pa) {
+                               # missing "diff --git ..." ?
+                               $dctx->{path_a} = $pa;
+                       }
+                       # color only (no oid link) if missing dctx->{oid_*}
+                       $state <= DSTATE_STAT and
+                               to_state($dst, $state, DSTATE_HEAD);
+                       $$dst .= $linkify->to_html($s);
+               } elsif ($s =~ m!^\+{3} ($PATH_X)!o) {
+                       my $pb = $1;
+                       $pb = (split('/', git_unquote($pb), 2))[1];
+                       if (($dctx->{path_b} // '') ne $pb) {
+                               missing_diff_git_line($dctx, $pb);
+                       }
+
                        # color only (no oid link) if missing dctx->{oid_*}
                        $state <= DSTATE_STAT and
                                to_state($dst, $state, DSTATE_HEAD);