Merge branch 'gitaly-519-commit-stats' into 'master'

Migrate Git::CommitStats to Gitaly

Closes gitaly#519

See merge request !14077
This commit is contained in:
Robert Speicher 2017-09-12 16:48:30 +00:00
commit a1a2ce4af4
5 changed files with 61 additions and 3 deletions

View File

@ -352,7 +352,7 @@ module Gitlab
end
def stats
Gitlab::Git::CommitStats.new(self)
Gitlab::Git::CommitStats.new(@repository, self)
end
def to_patch(options = {})

View File

@ -10,12 +10,29 @@ module Gitlab
# Instantiate a CommitStats object
#
# Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/323
def initialize(commit)
def initialize(repo, commit)
@id = commit.id
@additions = 0
@deletions = 0
@total = 0
repo.gitaly_migrate(:commit_stats) do |is_enabled|
if is_enabled
gitaly_stats(repo, commit)
else
rugged_stats(commit)
end
end
end
def gitaly_stats(repo, commit)
stats = repo.gitaly_commit_client.commit_stats(@id)
@additions = stats.additions
@deletions = stats.deletions
@total = @additions + @deletions
end
def rugged_stats(commit)
diff = commit.rugged_diff_from_parent
diff.each_patch do |p|

View File

@ -204,6 +204,14 @@ module Gitlab
response.sum(&:data)
end
def commit_stats(revision)
request = Gitaly::CommitStatsRequest.new(
repository: @gitaly_repo,
revision: GitalyClient.encode(revision)
)
GitalyClient.call(@repository.storage, :commit_service, :commit_stats, request)
end
private
def commit_diff_request_params(commit, options = {})

View File

@ -401,7 +401,7 @@ describe Gitlab::Git::Commit, seed_helper: true do
end
end
describe '#stats' do
shared_examples '#stats' do
subject { commit.stats }
describe '#additions' do
@ -415,6 +415,14 @@ describe Gitlab::Git::Commit, seed_helper: true do
end
end
describe '#stats with gitaly on' do
it_should_behave_like '#stats'
end
describe '#stats with gitaly disabled', skip_gitaly_mock: true do
it_should_behave_like '#stats'
end
describe '#to_diff' do
subject { commit.to_diff }

View File

@ -165,4 +165,29 @@ describe Gitlab::GitalyClient::CommitService do
expect(subject).to eq("my diff")
end
end
describe '#commit_stats' do
let(:request) do
Gitaly::CommitStatsRequest.new(
repository: repository_message, revision: revision
)
end
let(:response) do
Gitaly::CommitStatsResponse.new(
oid: revision,
additions: 11,
deletions: 15
)
end
subject { described_class.new(repository).commit_stats(revision) }
it 'sends an RPC request' do
expect_any_instance_of(Gitaly::CommitService::Stub).to receive(:commit_stats)
.with(request, kind_of(Hash)).and_return(response)
expect(subject.additions).to eq(11)
expect(subject.deletions).to eq(15)
end
end
end