Skip to content

Commit fb85db8

Browse files
peffgitster
authored andcommitted
rev-list: disable bitmaps when "-n" is used with listing objects
You can ask rev-list to use bitmaps to speed up an --objects traversal, which should generally give you your answers much faster. Likewise, you can ask rev-list to limit such a traversal with `-n`, in which case we'll show only a limited set of commits (and only the tree and commit objects directly reachable from those commits). But if you do both together, the results are nonsensical. We end up limiting any fallback traversal we do to _find_ the bitmaps, but the actual set of objects we output will be picked arbitrarily from the union of any bitmaps we do find, and will involve the objects of many more commits. It's possible that somebody might want this as a "show me what you can, but limit the amount of work you do" flag. But as with the prior commit clamping "--count", the results are basically non-deterministic; you'll get the values from some commits between `n` and the total number, and you can't tell which. And unlike the `--count` case, we can't easily generate the "real" value from the bitmap values (you can't just walk back `-n` commits and subtract out the reachable objects from the boundary commits; the bitmaps for `X` record its total reachability, so you don't know which objects are directly from `X` itself, which from `X^`, and so on). So let's just fallback to the non-bitmap code path in this case, so we always give a sane answer. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 5c9f9bf commit fb85db8

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

builtin/rev-list.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,8 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
363363
printf("%d\n", commit_count);
364364
return 0;
365365
}
366-
} else if (revs.tag_objects && revs.tree_objects && revs.blob_objects) {
366+
} else if (revs.max_count < 0 &&
367+
revs.tag_objects && revs.tree_objects && revs.blob_objects) {
367368
if (!prepare_bitmap_walk(&revs)) {
368369
traverse_bitmap_commit_list(&show_object_fast);
369370
return 0;

0 commit comments

Comments
 (0)