Skip to content

Commit 7f81c00

Browse files
istephensgitster
authored andcommitted
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>
1 parent 96cfa94 commit 7f81c00

File tree

2 files changed

+4
-5
lines changed

2 files changed

+4
-5
lines changed

line-log.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -599,11 +599,11 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args)
599599
lines, anchor, &begin, &end,
600600
full_name))
601601
die("malformed -L argument '%s'", range_part);
602-
if (lines < end || ((lines || begin) && lines < begin))
602+
if ((!lines && (begin || end)) || lines < begin)
603603
die("file %s has only %lu lines", name_part, lines);
604604
if (begin < 1)
605605
begin = 1;
606-
if (end < 1)
606+
if (end < 1 || lines < end)
607607
end = lines;
608608
begin--;
609609
line_log_data_insert(&ranges, full_name, begin, end);

t/t4211-line-log.sh

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ test_bad_opts "-L 1:nonexistent" "There is no path"
6060
test_bad_opts "-L 1:simple" "There is no path"
6161
test_bad_opts "-L '/foo:b.c'" "argument not .start,end:file"
6262
test_bad_opts "-L 1000:b.c" "has only.*lines"
63-
test_bad_opts "-L 1,1000:b.c" "has only.*lines"
6463
test_bad_opts "-L :b.c" "argument not .start,end:file"
6564
test_bad_opts "-L :foo:b.c" "no match"
6665

@@ -86,12 +85,12 @@ test_expect_success '-L ,Y (Y == nlines)' '
8685

8786
test_expect_success '-L ,Y (Y == nlines + 1)' '
8887
n=$(expr $(wc -l <b.c) + 1) &&
89-
test_must_fail git log -L ,$n:b.c
88+
git log -L ,$n:b.c
9089
'
9190

9291
test_expect_success '-L ,Y (Y == nlines + 2)' '
9392
n=$(expr $(wc -l <b.c) + 2) &&
94-
test_must_fail git log -L ,$n:b.c
93+
git log -L ,$n:b.c
9594
'
9695

9796
test_expect_success '-L with --first-parent and a merge' '

0 commit comments

Comments
 (0)