repository: Implement `#new_blobs` via `#list_blobs`
In order to determine which blobs are new based on a given revision, we call Gitaly's `ListNewBlobs` RPC. This RPC is rather inflexible though: it only allows passing a single new revision. As a result, we cannot batch computation of new blobs across a set changes in our access checks. As a first step towards fixing this limitation, we now migrate `#new_blobs()` to use the `ListBlobs` RPC: this is a much more flexible variant of `ListNewBlobs`, and most importantly it allows us to pass a set of revisions. When the old implementation is removed, we can thus easily allow `#new_blobs()` to receive multiple revisions. Note that this changes the return type of `#new_blobs()`: instead of returning a set of `Gitaly::NewBlobObject` classes, we now return a set of `Gitlab::Git::Blobs`. While both share the same `size` and `path` attributes, the former tracks the blob ID via an `id` attribute while the latter uses an `oid` attribute. There is only a single callsite of `#new_blobs()` though, which is the FileSizeCheck push rule, and this callsite only uses the `size` and `path` attributes. So in the end, this change in behaviour is fine.
Showing
Please register or sign in to comment