• Patrick Steinhardt's avatar
    repository: Implement `#new_blobs` via `#list_blobs` · 0d5df6f0
    Patrick Steinhardt authored
    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.
    0d5df6f0
repository.rb 34.5 KB