From: Isabella Stephens <istephens@xxxxxxxxxxxxx> 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 complain that this is an empty range. Signed-off-by: Isabella Stephens <istephens@xxxxxxxxxxxxx> --- line-log.c | 10 +++++++--- t/t4211-line-log.sh | 11 ----------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/line-log.c b/line-log.c index cdc2257db..ad3987062 100644 --- a/line-log.c +++ b/line-log.c @@ -599,11 +599,15 @@ 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)) - die("file %s has only %lu lines", name_part, lines); + if (!begin && end < 0) + die("-L invalid empty range"); + if ((!lines && (begin || end)) || lines < begin) + die(Q_("file %s has only %lu line", + "file %s has only %lu lines", + 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); diff --git a/t/t4211-line-log.sh b/t/t4211-line-log.sh index d0377fae5..0b96496e3 100755 --- a/t/t4211-line-log.sh +++ b/t/t4211-line-log.sh @@ -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" @@ -84,16 +83,6 @@ test_expect_success '-L ,Y (Y == nlines)' ' git log -L ,$n:b.c ' -test_expect_success '-L ,Y (Y == nlines + 1)' ' - n=$(expr $(wc -l <b.c) + 1) && - test_must_fail 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 -' - test_expect_success '-L with --first-parent and a merge' ' git checkout parallel-change && git log --first-parent -L 1,1:b.c -- 2.14.3 (Apple Git-98)