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:
commit
a1a2ce4af4
|
@ -352,7 +352,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def stats
|
def stats
|
||||||
Gitlab::Git::CommitStats.new(self)
|
Gitlab::Git::CommitStats.new(@repository, self)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_patch(options = {})
|
def to_patch(options = {})
|
||||||
|
|
|
@ -10,12 +10,29 @@ module Gitlab
|
||||||
# Instantiate a CommitStats object
|
# Instantiate a CommitStats object
|
||||||
#
|
#
|
||||||
# Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/323
|
# Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/323
|
||||||
def initialize(commit)
|
def initialize(repo, commit)
|
||||||
@id = commit.id
|
@id = commit.id
|
||||||
@additions = 0
|
@additions = 0
|
||||||
@deletions = 0
|
@deletions = 0
|
||||||
@total = 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 = commit.rugged_diff_from_parent
|
||||||
|
|
||||||
diff.each_patch do |p|
|
diff.each_patch do |p|
|
||||||
|
|
|
@ -204,6 +204,14 @@ module Gitlab
|
||||||
response.sum(&:data)
|
response.sum(&:data)
|
||||||
end
|
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
|
private
|
||||||
|
|
||||||
def commit_diff_request_params(commit, options = {})
|
def commit_diff_request_params(commit, options = {})
|
||||||
|
|
|
@ -401,7 +401,7 @@ describe Gitlab::Git::Commit, seed_helper: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#stats' do
|
shared_examples '#stats' do
|
||||||
subject { commit.stats }
|
subject { commit.stats }
|
||||||
|
|
||||||
describe '#additions' do
|
describe '#additions' do
|
||||||
|
@ -415,6 +415,14 @@ describe Gitlab::Git::Commit, seed_helper: true do
|
||||||
end
|
end
|
||||||
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
|
describe '#to_diff' do
|
||||||
subject { commit.to_diff }
|
subject { commit.to_diff }
|
||||||
|
|
||||||
|
|
|
@ -165,4 +165,29 @@ describe Gitlab::GitalyClient::CommitService do
|
||||||
expect(subject).to eq("my diff")
|
expect(subject).to eq("my diff")
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
Loading…
Reference in New Issue