If one of the options --before, --min-age or --until is given, limit_list() filters out younger commits early on. Line-log needs all those commits to trace the movement of line ranges, though. Skip this optimization if both are used together. Reported-by: Мария Долгополова <dolgopolovamariia@xxxxxxxxx> Signed-off-by: René Scharfe <l.s.r@xxxxxx> --- Needs careful review -- I'm not familiar with that the line-log code and the revision traversal machinery is a bit scary. AFAIU the min_age check is done again in get_commit_action(), so this patch shouldn't cause underage commits to be shown, but I'm not sure. Test coverage for the three options is spotty. :-/ revision.c | 3 ++- t/t4211-line-log.sh | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/revision.c b/revision.c index ebb4d2a0f2..3bdc1bbf2a 100644 --- a/revision.c +++ b/revision.c @@ -1410,7 +1410,8 @@ static int limit_list(struct rev_info *revs) continue; break; } - if (revs->min_age != -1 && (commit->date > revs->min_age)) + if (revs->min_age != -1 && (commit->date > revs->min_age) && + !revs->line_level_traverse) continue; date = commit->date; p = &commit_list_insert(commit, p)->next; diff --git a/t/t4211-line-log.sh b/t/t4211-line-log.sh index 1428eae262..e186c83250 100755 --- a/t/t4211-line-log.sh +++ b/t/t4211-line-log.sh @@ -240,10 +240,12 @@ test_expect_success 'setup for checking line-log and parent oids' ' EOF git add file.c && test_tick && + first_tick=$test_tick && git commit -m "Add func1() and func2() in file.c" && echo 1 >other-file && git add other-file && + test_tick && git commit -m "Add other-file" && sed -e "s/F1/F1 + 1/" file.c >tmp && @@ -283,4 +285,10 @@ test_expect_success 'parent oids with parent rewriting' ' test_cmp expect actual ' +test_expect_success 'line-log with --before' ' + echo $root_oid >expect && + git log --format=%h --no-patch -L:func2:file.c --before=$first_tick >actual && + test_cmp expect actual +' + test_done -- 2.27.0