Avoid Gitaly RPC errors when fetching diff stats
This commit is contained in:
parent
0ff34e7729
commit
039df0267e
3 changed files with 28 additions and 1 deletions
5
changelogs/unreleased/osw-fallback-on-blank-refs.yml
Normal file
5
changelogs/unreleased/osw-fallback-on-blank-refs.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Avoid Gitaly RPC errors when fetching diff stats
|
||||
merge_request: 22995
|
||||
author:
|
||||
type: fixed
|
|
@ -419,13 +419,17 @@ module Gitlab
|
|||
end
|
||||
|
||||
def diff_stats(left_id, right_id)
|
||||
if [left_id, right_id].any? { |ref| ref.blank? || Gitlab::Git.blank_ref?(ref) }
|
||||
return empty_diff_stats
|
||||
end
|
||||
|
||||
stats = wrapped_gitaly_errors do
|
||||
gitaly_commit_client.diff_stats(left_id, right_id)
|
||||
end
|
||||
|
||||
Gitlab::Git::DiffStatsCollection.new(stats)
|
||||
rescue CommandError, TypeError
|
||||
Gitlab::Git::DiffStatsCollection.new([])
|
||||
empty_diff_stats
|
||||
end
|
||||
|
||||
# Returns a RefName for a given SHA
|
||||
|
@ -962,6 +966,10 @@ module Gitlab
|
|||
|
||||
private
|
||||
|
||||
def empty_diff_stats
|
||||
Gitlab::Git::DiffStatsCollection.new([])
|
||||
end
|
||||
|
||||
def uncached_has_local_branches?
|
||||
wrapped_gitaly_errors do
|
||||
gitaly_repository_client.has_local_branches?
|
||||
|
|
|
@ -1095,12 +1095,26 @@ describe Gitlab::Git::Repository, :seed_helper do
|
|||
end
|
||||
|
||||
it 'returns no Gitaly::DiffStats when there is a nil SHA' do
|
||||
expect_any_instance_of(Gitlab::GitalyClient::CommitService)
|
||||
.not_to receive(:diff_stats)
|
||||
|
||||
collection = repository.diff_stats(nil, 'master')
|
||||
|
||||
expect(collection).to be_a(Gitlab::Git::DiffStatsCollection)
|
||||
expect(collection).to be_a(Enumerable)
|
||||
expect(collection.to_a).to be_empty
|
||||
end
|
||||
|
||||
it 'returns no Gitaly::DiffStats when there is a BLANK_SHA' do
|
||||
expect_any_instance_of(Gitlab::GitalyClient::CommitService)
|
||||
.not_to receive(:diff_stats)
|
||||
|
||||
collection = repository.diff_stats(Gitlab::Git::BLANK_SHA, 'master')
|
||||
|
||||
expect(collection).to be_a(Gitlab::Git::DiffStatsCollection)
|
||||
expect(collection).to be_a(Enumerable)
|
||||
expect(collection.to_a).to be_empty
|
||||
end
|
||||
end
|
||||
|
||||
describe "#ls_files" do
|
||||
|
|
Loading…
Reference in a new issue