FindAllCommits mandatory
Closes https://gitlab.com/gitlab-org/gitaly/issues/326
This commit is contained in:
parent
eaa9d4fd75
commit
ec78d29a6e
2 changed files with 39 additions and 116 deletions
|
@ -149,57 +149,10 @@ module Gitlab
|
|||
#
|
||||
# Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/326
|
||||
def find_all(repo, options = {})
|
||||
Gitlab::GitalyClient.migrate(:find_all_commits) do |is_enabled|
|
||||
if is_enabled
|
||||
find_all_by_gitaly(repo, options)
|
||||
else
|
||||
find_all_by_rugged(repo, options)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def find_all_by_rugged(repo, options = {})
|
||||
actual_options = options.dup
|
||||
|
||||
allowed_options = [:ref, :max_count, :skip, :order]
|
||||
|
||||
actual_options.keep_if do |key|
|
||||
allowed_options.include?(key)
|
||||
end
|
||||
|
||||
default_options = { skip: 0 }
|
||||
actual_options = default_options.merge(actual_options)
|
||||
|
||||
rugged = repo.rugged
|
||||
walker = Rugged::Walker.new(rugged)
|
||||
|
||||
if actual_options[:ref]
|
||||
walker.push(rugged.rev_parse_oid(actual_options[:ref]))
|
||||
else
|
||||
rugged.references.each("refs/heads/*") do |ref|
|
||||
walker.push(ref.target_id)
|
||||
end
|
||||
end
|
||||
|
||||
walker.sorting(rugged_sort_type(actual_options[:order]))
|
||||
|
||||
commits = []
|
||||
offset = actual_options[:skip]
|
||||
limit = actual_options[:max_count]
|
||||
walker.each(offset: offset, limit: limit) do |commit|
|
||||
commits.push(decorate(repo, commit))
|
||||
end
|
||||
|
||||
walker.reset
|
||||
|
||||
commits
|
||||
rescue Rugged::OdbError
|
||||
[]
|
||||
end
|
||||
|
||||
def find_all_by_gitaly(repo, options = {})
|
||||
repo.wrapped_gitaly_errors do
|
||||
Gitlab::GitalyClient::CommitService.new(repo).find_all_commits(options)
|
||||
end
|
||||
end
|
||||
|
||||
def decorate(repository, commit, ref = nil)
|
||||
Gitlab::Git::Commit.new(repository, commit, ref)
|
||||
|
|
|
@ -331,7 +331,6 @@ describe Gitlab::Git::Commit, seed_helper: true do
|
|||
end
|
||||
|
||||
describe '.find_all' do
|
||||
shared_examples 'finding all commits' do
|
||||
it 'should return a return a collection of commits' do
|
||||
commits = described_class.find_all(repository)
|
||||
|
||||
|
@ -384,35 +383,6 @@ describe Gitlab::Git::Commit, seed_helper: true do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when Gitaly find_all_commits feature is enabled' do
|
||||
it_behaves_like 'finding all commits'
|
||||
end
|
||||
|
||||
context 'when Gitaly find_all_commits feature is disabled', :skip_gitaly_mock do
|
||||
it_behaves_like 'finding all commits'
|
||||
|
||||
context 'while applying a sort order based on the `order` option' do
|
||||
it "allows ordering topologically (no parents shown before their children)" do
|
||||
expect_any_instance_of(Rugged::Walker).to receive(:sorting).with(Rugged::SORT_TOPO)
|
||||
|
||||
described_class.find_all(repository, order: :topo)
|
||||
end
|
||||
|
||||
it "allows ordering by date" do
|
||||
expect_any_instance_of(Rugged::Walker).to receive(:sorting).with(Rugged::SORT_DATE | Rugged::SORT_TOPO)
|
||||
|
||||
described_class.find_all(repository, order: :date)
|
||||
end
|
||||
|
||||
it "applies no sorting by default" do
|
||||
expect_any_instance_of(Rugged::Walker).to receive(:sorting).with(Rugged::SORT_NONE)
|
||||
|
||||
described_class.find_all(repository)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#batch_by_oid' do
|
||||
context 'when oids is empty' do
|
||||
it 'makes no Gitaly request' do
|
||||
|
|
Loading…
Reference in a new issue