log: prevent error if line range ends past end of file
If the -L option is used to specify a line range in git log, and the end of the range is past the end of the file, git will fail with a fatal error. This commit prevents such behaviour - instead we perform the log for existing lines within the specified range. This commit also fixes a corner case where -L ,-n:file would be treated as a log over the whole file. Now we treat this as -L 1,-n:file and blame the first line of the file instead. Signed-off-by: Isabella Stephens <istephens@atlassian.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
96cfa94e68
commit
7f81c00f3b
@ -599,11 +599,11 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args)
|
||||
lines, anchor, &begin, &end,
|
||||
full_name))
|
||||
die("malformed -L argument '%s'", range_part);
|
||||
if (lines < end || ((lines || begin) && lines < begin))
|
||||
if ((!lines && (begin || end)) || lines < begin)
|
||||
die("file %s has only %lu lines", name_part, lines);
|
||||
if (begin < 1)
|
||||
begin = 1;
|
||||
if (end < 1)
|
||||
if (end < 1 || lines < end)
|
||||
end = lines;
|
||||
begin--;
|
||||
line_log_data_insert(&ranges, full_name, begin, end);
|
||||
|
@ -60,7 +60,6 @@ test_bad_opts "-L 1:nonexistent" "There is no path"
|
||||
test_bad_opts "-L 1:simple" "There is no path"
|
||||
test_bad_opts "-L '/foo:b.c'" "argument not .start,end:file"
|
||||
test_bad_opts "-L 1000:b.c" "has only.*lines"
|
||||
test_bad_opts "-L 1,1000:b.c" "has only.*lines"
|
||||
test_bad_opts "-L :b.c" "argument not .start,end:file"
|
||||
test_bad_opts "-L :foo:b.c" "no match"
|
||||
|
||||
@ -86,12 +85,12 @@ test_expect_success '-L ,Y (Y == nlines)' '
|
||||
|
||||
test_expect_success '-L ,Y (Y == nlines + 1)' '
|
||||
n=$(expr $(wc -l <b.c) + 1) &&
|
||||
test_must_fail git log -L ,$n:b.c
|
||||
git log -L ,$n:b.c
|
||||
'
|
||||
|
||||
test_expect_success '-L ,Y (Y == nlines + 2)' '
|
||||
n=$(expr $(wc -l <b.c) + 2) &&
|
||||
test_must_fail git log -L ,$n:b.c
|
||||
git log -L ,$n:b.c
|
||||
'
|
||||
|
||||
test_expect_success '-L with --first-parent and a merge' '
|
||||
|
Loading…
Reference in New Issue
Block a user