Add get_archive to Gitaly repository client
Add `Gitlab::GitalyClient::RepositoryService#get_archive` (and maybe `Gitlab::Git::Repository#get_archive`): ```ruby def get_archive(commit, prefix: nil, format: Gitaly::GetArchiveRequest::Format::ZIP, path: nil, exclude: nil, elide_path: false, include_lfs_blobs: false) request = Gitaly::GetArchiveRequest.new( repository: @gitaly_repo, commit_id: commit, prefix: prefix, format: format, path: path, exclude: exclude, elide_path: elide_path, include_lfs_blobs: include_lfs_blobs, ) response = GitalyClient.call(@storage, :repository_service, :get_archive, request, timeout: GitalyClient.long_timeout) response.each { |message| yield(message.data) } end ``` With this feature, `Packages::Go::ModuleVersion#archive` could be implemented as a Gitaly call, instead of the current implementation, which queries Gitaly for blobs and constructs the archive in Ruby. Given the number of MRs I have open, I will not be creating an MR for this at the moment.
issue