Kacper Kornet <draenog@xxxxxxxxxxxxx> writes: > Logic in still_interesting function allows to stop the commits > traversing if the oldest processed commit is not older then the > youngest commit on the list to process and the list contains only > commits marked as not interesting ones. It can be premature when dealing > with a set of coequal commits. For example git rev-list A^! --not B > provides wrong answer if all commits in the range A..B had the same > commit time and there are more then 7 of them. > > To fix this problem the relevant part of the logic in still_interesting > is changed to: the walk can be stopped if the oldest processed commit is > younger then the youngest commit on the list to processed. Is the made-up test case to freeze the clock even interesting? The slop logic is merely a heuristic to compensate for effects caused by skewed or non-monototic clocks, so in a different repository you may even need to fuzz the timestamp comparison further if (date - 10 < src->item->date) or something silly like that. > Signed-off-by: Kacper Kornet <draenog@xxxxxxxxxxxxx> > --- > > I don't know whether the first version was overlooked or deemed as not > worthy. So just in case I resend it. Changes since the first version: > > 1. The test has been added > 2. The commit log has been rewritten > > > revision.c | 2 +- > t/t6009-rev-list-parent.sh | 13 +++++++++++++ > 2 files changed, 14 insertions(+), 1 deletion(-) > > diff --git a/revision.c b/revision.c > index ef60205..cf620c6 100644 > --- a/revision.c > +++ b/revision.c > @@ -709,7 +709,7 @@ static int still_interesting(struct commit_list *src, unsigned long date, int sl > * Does the destination list contain entries with a date > * before the source list? Definitely _not_ done. > */ > - if (date < src->item->date) > + if (date <= src->item->date) > return SLOP; > > /* > diff --git a/t/t6009-rev-list-parent.sh b/t/t6009-rev-list-parent.sh > index 3050740..66cda17 100755 > --- a/t/t6009-rev-list-parent.sh > +++ b/t/t6009-rev-list-parent.sh > @@ -133,4 +133,17 @@ test_expect_success 'dodecapus' ' > check_revlist "--min-parents=13" && > check_revlist "--min-parents=4 --max-parents=11" tetrapus > ' > + > +test_expect_success 'ancestors with the same commit time' ' > + > + test_tick_keep=$test_tick && > + for i in 1 2 3 4 5 6 7 8; do > + test_tick=$test_tick_keep > + test_commit t$i > + done && > + git rev-list t1^! --not t$i >result && > + >expect && > + test_cmp expect result > +' > + > test_done > -- > 1.8.2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html