On Mon, Mar 15, 2021 at 02:14:55PM +0100, Patrick Steinhardt wrote: > The preceding commit has added a new object filter for git-rev-list(1) > which allows to filter objects by type. Implement the equivalent filter > for packfile bitmaps so that we can answer these queries fast. Makes sense. The implementation looks pretty sensible. One observation: > +static void filter_bitmap_object_type(struct bitmap_index *bitmap_git, > + struct object_list *tip_objects, > + struct bitmap *to_filter, > + enum object_type object_type) > +{ > + enum object_type t; > + > + if (object_type < OBJ_COMMIT || object_type > OBJ_TAG) > + BUG("filter_bitmap_object_type given invalid object"); > + > + for (t = OBJ_COMMIT; t <= OBJ_TAG; t++) { > + if (t == object_type) > + continue; > + filter_bitmap_exclude_type(bitmap_git, tip_objects, to_filter, t); > + } > +} The OBJ_* constants are a contiguous set between COMMIT and TAG, and it has to remain this way (because we use them to decipher the type fields in pack files). But I don't think we've generally baked that assumption into the code in this way. Writing it out long-hand would be something like: if (t != OBJ_COMMIT) filter_bitmap_exclude_type(bitmap_git, tip_objects, to_filter, OBJ_COMMIT); if (t != OBJ_TREE) filter_bitmap_exclude_type(bitmap_git, tip_objects, to_filter, OBJ_TREE); and so on, which isn't too bad. I dunno. That may be overly picky. -Peff