Skip to content

housekeeping: Skip repacking empty repositories

When a repository does not have any bitmaps or in case it is missing bloom filters in the commit graph we always try to do a full repack in order to generate these data structures. This logic is required because:

- Bitmaps are only generated by git-repack(1) for full repacks. This
  limitation exists because there can only be one bitmap per
  repository.

- In case commit-graphs exist but missing bloom filters we need to
  completely rewrite them in order to enable this extension.

While the logic makes sense, it also causes us to repack repositories which are empty: they don't contain either of these data structures, and consequentially we think we need a full repack. While this is not a huge problem because git-repack(1) would finish fast anyway in case the repo doesn't contain any objects, we still needlessly spawn a process. Also, our metrics report that we're doing a lot of full repacks, which can be confusing.

Improve our heuristics by taking into account whether the repository has objects at all. If there aren't any, we can avoid all this busywork and just skip repacking altogether.

Changelog: changed

Merge request reports