Diff links position the line one beyond what I expect. Here's a hunk at <https://public-inbox.org/meta/20200509082738.23602-2-e@yhbt.net/>: diff --git a/lib/PublicInbox/Eml.pm b/lib/PublicInbox/Eml.pm index 4508bd84..80e7c1af 100644 --- a/lib/PublicInbox/Eml.pm +++ b/lib/PublicInbox/Eml.pm @@ -71,11 +71,11 @@ sub re_memo ($) { # compatible with our uses of Email::MIME sub new { my $ref = ref($_[1]) ? $_[1] : \(my $cpy = $_[1]); - if ($$ref =~ /(?:\r?\n(\r?\n))/gs) { # likely + if ($$ref =~ /\r?\n(\r?\n)/s) { # likely # This can modify $$ref in-place and to avoid memcpy/memmove # on a potentially large $$ref. It does need to make a # copy for $hdr, though. Idea stolen from Email::Simple - my $hdr = substr($$ref, 0, pos($$ref), ''); # sv_chop on $$ref + my $hdr = substr($$ref, 0, $+[0], ''); # sv_chop on $$ref substr($hdr, -(length($1))) = ''; # lower SvCUR bless { hdr => \$hdr, crlf => $1, bdy => $ref }, __PACKAGE__; } elsif ($$ref =~ /^[a-z0-9-]+[ \t]*:/ims && $$ref =~ /(\r?\n)\z/s) { The link at "-71,11" is <https://public-inbox.org/meta/4508bd84/s/?b=lib/PublicInbox/Eml.pm#n72>. When I follow it, I'm taken to line 72, one line below the first context line above. I haven't been able to come up with a reason why +1 would be preferable here, and I didn't spot any explanation when looking around the code. It looks like it'd just be a matter of making the two-line change below, but perhaps that causes breakage that I didn't notice with my light testing. diff --git a/lib/PublicInbox/ViewDiff.pm b/lib/PublicInbox/ViewDiff.pm index 6fe9a0d7..536bb9e3 100644 --- a/lib/PublicInbox/ViewDiff.pm +++ b/lib/PublicInbox/ViewDiff.pm @@ -50,12 +50,12 @@ sub diff_hunk ($$$$) { if (defined($spfx) && defined($oid_a) && defined($oid_b)) { my ($n) = ($ca =~ /^-([0-9]+)/); - $n = defined($n) ? do { ++$n; "#n$n" } : ''; + $n = defined($n) ? "#n$n" : ''; $$dst .= qq(@@ <a\nhref="$spfx$oid_a/s/$dctx->{Q}$n">$ca</a>); ($n) = ($cb =~ /^\+([0-9]+)/); - $n = defined($n) ? do { ++$n; "#n$n" } : ''; + $n = defined($n) ? "#n$n" : ''; $$dst .= qq( <a\nhref="$spfx$oid_b/s/$dctx->{Q}$n">$cb</a> @@); } else { $$dst .= "@@ $ca $cb @@";
Kyle Meyer <kyle@kyleam.com> wrote: > Diff links position the line one beyond what I expect. Here's a hunk at > <https://public-inbox.org/meta/20200509082738.23602-2-e@yhbt.net/>: <snip> > The link at "-71,11" is > <https://public-inbox.org/meta/4508bd84/s/?b=lib/PublicInbox/Eml.pm#n72>. > When I follow it, I'm taken to line 72, one line below the first context > line above. I haven't been able to come up with a reason why +1 would > be preferable here, and I didn't spot any explanation when looking > around the code. It looks like it'd just be a matter of making the > two-line change below, but perhaps that causes breakage that I didn't > notice with my light testing. Good question, it's been that way since the beginning... It might have been due to the "0" for new files and line numbers counting starting at "1". But hunks aren't hyperlinks for new files, since the blob OID already is. > diff --git a/lib/PublicInbox/ViewDiff.pm b/lib/PublicInbox/ViewDiff.pm > index 6fe9a0d7..536bb9e3 100644 > --- a/lib/PublicInbox/ViewDiff.pm > +++ b/lib/PublicInbox/ViewDiff.pm > @@ -50,12 +50,12 @@ sub diff_hunk ($$$$) { > > if (defined($spfx) && defined($oid_a) && defined($oid_b)) { > my ($n) = ($ca =~ /^-([0-9]+)/); > - $n = defined($n) ? do { ++$n; "#n$n" } : ''; > + $n = defined($n) ? "#n$n" : ''; > > $$dst .= qq(@@ <a\nhref="$spfx$oid_a/s/$dctx->{Q}$n">$ca</a>); > > ($n) = ($cb =~ /^\+([0-9]+)/); > - $n = defined($n) ? do { ++$n; "#n$n" } : ''; > + $n = defined($n) ? "#n$n" : ''; > $$dst .= qq( <a\nhref="$spfx$oid_b/s/$dctx->{Q}$n">$cb</a> @@); > } else { > $$dst .= "@@ $ca $cb @@"; I'll probably take this patch, soon, got a commit message? Given the massive change Eml is, 1.5.0 will probably be released, soon.
Eric Wong writes: > I'll probably take this patch, soon, got a commit message? Sure. Thanks. -- >8 -- Subject: [PATCH] viewdiff: don't increment the reported hunk line number For a diff hunk starting at line N, diff_hunk() constructs the link with "#n(N + 1)". This sends the viewer one line below the first context line. Although this is minor and may not even be noticed, there's not an obvious reason to increment the line number, so switch to using the reported value as is. --- lib/PublicInbox/ViewDiff.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/PublicInbox/ViewDiff.pm b/lib/PublicInbox/ViewDiff.pm index 6fe9a0d7..536bb9e3 100644 --- a/lib/PublicInbox/ViewDiff.pm +++ b/lib/PublicInbox/ViewDiff.pm @@ -50,12 +50,12 @@ sub diff_hunk ($$$$) { if (defined($spfx) && defined($oid_a) && defined($oid_b)) { my ($n) = ($ca =~ /^-([0-9]+)/); - $n = defined($n) ? do { ++$n; "#n$n" } : ''; + $n = defined($n) ? "#n$n" : ''; $$dst .= qq(@@ <a\nhref="$spfx$oid_a/s/$dctx->{Q}$n">$ca</a>); ($n) = ($cb =~ /^\+([0-9]+)/); - $n = defined($n) ? do { ++$n; "#n$n" } : ''; + $n = defined($n) ? "#n$n" : ''; $$dst .= qq( <a\nhref="$spfx$oid_b/s/$dctx->{Q}$n">$cb</a> @@); } else { $$dst .= "@@ $ca $cb @@"; -- 2.26.1