git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v4 1/2] blame: prevent error if range ends past end of file

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 27, 2018, 02:09 UTC
Message-ID
<xmqq36zh1jtj.fsf@gitster-ct.c.googlers.com>
In-Reply-To
<25cd86ff-a5c0-a968-62d2-4365e5e17a81@atlassian.com>
Isabella Stephens <istephens@atlassian.com> writes:
Show 26 quoted lines
> On 27/4/18 10:50 am, Junio C Hamano wrote:
>> istephens@atlassian.com writes:
>> 
>>> diff --git a/line-range.c b/line-range.c
>>> index 323399d16..023aee1f5 100644
>>> --- a/line-range.c
>>> +++ b/line-range.c
>>> @@ -47,7 +47,7 @@ static const char *parse_loc(const char *spec, nth_line_fn_t nth_line,
>>>  			else if (!num)
>>>  				*ret = begin;
>>>  			else
>>> -				*ret = begin + num;
>>> +				*ret = begin + num ? begin + num : -1;
>> 
>> When parsing "-L<something>,-20" to grab some lines before the line
>> specified by <something>, if that something happens to be line #20,
>> this gives -1 to *ret.  If it is line #19, *ret becomes -1, and if
>> it is line #18 or before, *ret becomes -2, -3, ...
>> 
>> Is that what we really want here?  It is disturbing that only line
>> #19 and #20 are treated identically in the above example.  If it
>> were "if going backwards by -num lines from begin goes beyond the
>> beginning of the file, clip it to the first line", I would
>> understand it, but as written, I am not sure what the code is trying
>> to do.
>> 

[administrivia] Do not top-post, but cull the context to leave enough to remind readers what the discussion was about.

> My intention was to modify existing behaviour as little as possible,
> but I agree clipping to the first line makes a lot more sense. That
> raises the question though, do we clip to 1 and treat -L,-n as a valid
> input, or clip to -1 so that this case be detected?

Maybe I misread the previous discussion and/or your cover letter, but I have been assuming that you are trying to avoid failing the command in a useless way (e.g. when the file has only ~800 lines but the user does not know exactly how many, instead of letting -L1,820 to fail with "the file only has 815 lines", pretend that the -L1,815 was given) and instead give a reasonable fall-back behaviour.

And to be consistent with that world view, I would have expected that the meaning of -L<something>,-20 to be updated from "fail if <something> is before line #20, or show 20 lines leading to <something>" to "show lines leading to <something>, up to 20 lines but it is OK if there aren't enough lines in the file to show that many".

So the answer to the question probably depends on what happens when "this case is detected" by returning -1 from here. Do we detect and fail? That would defeat the overall theme of these patches. Do we detct and warn but continue? That may be sensible in theory, but in practice, especially where this "the users may not know how many lines exactly the blob has, so do not force them to count" matters, "blame" and "log" would show a lot of output that is sent to the pager, so the warning message may not be shown in a noticeable way. Compared to that, "pretend as if the first line was specified and go on" looks like we have one fewer thing to worry about ;-)

Previous: Isabella StephensNext: Isabella Stephens
Message 17 of 27 in “blame: add --fuzzy-lines command line option”
  1. blame: add --fuzzy-lines command line optionIsabella Stephens, Oct 26, 2017
  2. Junio C HamanoOct 26, 2017
  3. blame: prevent error if range ends past end of fileIsabella Stephens, Oct 26, 2017
  4. Jacob KellerOct 26, 2017
  5. Isabella StephensOct 26, 2017
  6. SZEDER GáborOct 26, 2017
  7. Isabella StephensOct 26, 2017
  8. blame: prevent error if range ends past end of fileIsabella Stephens, Oct 27, 2017
  9. Junio C HamanoOct 27, 2017
  10. Junio C HamanoOct 27, 2017
  11. Isabella StephensOct 27, 2017
  12. Eric SunshineOct 27, 2017
  13. 0/2 blame and log: prevent error if range ends past end of fileistephens@atlassian.com, Apr 26, 2018
  14. 1/2 blame: prevent error if range ends past end of fileistephens@atlassian.com, Apr 26, 2018
  15. Junio C HamanoApr 27, 2018
  16. Isabella StephensApr 27, 2018
  17. Junio C HamanoApr 27, 2018
  18. Isabella StephensApr 27, 2018
  19. Junio C HamanoMay 2, 2018
  20. 0/2 blame and log: prevent error if range ends past end of fileistephens@atlassian.com, May 29, 2018
  21. blame: prevent error if range ends past end of fileistephens@atlassian.com, May 29, 2018
  22. Eric SunshineMay 30, 2018
  23. Isabella StephensMay 31, 2018
  24. log: prevent error if line range ends past end of fileistephens@atlassian.com, May 29, 2018
  25. Eric SunshineMay 30, 2018
  26. 2/2 log: prevent error if line range ends past end of fileistephens@atlassian.com, Apr 26, 2018
  27. Isabella StephensOct 26, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.