nil-check Repository::is_ancestor?
This commit is contained in:
parent
27f68edd35
commit
7a07ecebaf
|
@ -946,6 +946,8 @@ class Repository
|
||||||
end
|
end
|
||||||
|
|
||||||
def is_ancestor?(ancestor_id, descendant_id)
|
def is_ancestor?(ancestor_id, descendant_id)
|
||||||
|
return false if ancestor_id.nil? || descendant_id.nil?
|
||||||
|
|
||||||
Gitlab::GitalyClient.migrate(:is_ancestor) do |is_enabled|
|
Gitlab::GitalyClient.migrate(:is_ancestor) do |is_enabled|
|
||||||
if is_enabled
|
if is_enabled
|
||||||
raw_repository.is_ancestor?(ancestor_id, descendant_id)
|
raw_repository.is_ancestor?(ancestor_id, descendant_id)
|
||||||
|
|
|
@ -1905,19 +1905,43 @@ describe Repository, models: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#is_ancestor?' do
|
describe '#is_ancestor?' do
|
||||||
context 'Gitaly is_ancestor feature enabled' do
|
let(:commit) { repository.commit }
|
||||||
let(:commit) { repository.commit }
|
let(:ancestor) { commit.parents.first }
|
||||||
let(:ancestor) { commit.parents.first }
|
|
||||||
|
|
||||||
before do
|
context 'with Gitaly enabled' do
|
||||||
allow(Gitlab::GitalyClient).to receive(:enabled?).and_return(true)
|
it 'it is an ancestor' do
|
||||||
allow(Gitlab::GitalyClient).to receive(:feature_enabled?).with(:is_ancestor).and_return(true)
|
expect(repository.is_ancestor?(ancestor.id, commit.id)).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "asks Gitaly server if it's an ancestor" do
|
it 'it is not an ancestor' do
|
||||||
expect_any_instance_of(Gitlab::GitalyClient::Commit).to receive(:is_ancestor).with(ancestor.id, commit.id)
|
expect(repository.is_ancestor?(commit.id, ancestor.id)).to eq(false)
|
||||||
|
end
|
||||||
|
|
||||||
repository.is_ancestor?(ancestor.id, commit.id)
|
it 'returns false on nil-values' do
|
||||||
|
expect(repository.is_ancestor?(nil, commit.id)).to eq(false)
|
||||||
|
expect(repository.is_ancestor?(ancestor.id, nil)).to eq(false)
|
||||||
|
expect(repository.is_ancestor?(nil, nil)).to eq(false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with Gitaly disabled' do
|
||||||
|
before do
|
||||||
|
allow(Gitlab::GitalyClient).to receive(:enabled?).and_return(false)
|
||||||
|
allow(Gitlab::GitalyClient).to receive(:feature_enabled?).with(:is_ancestor).and_return(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'it is an ancestor' do
|
||||||
|
expect(repository.is_ancestor?(ancestor.id, commit.id)).to eq(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'it is not an ancestor' do
|
||||||
|
expect(repository.is_ancestor?(commit.id, ancestor.id)).to eq(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns false on nil-values' do
|
||||||
|
expect(repository.is_ancestor?(nil, commit.id)).to eq(false)
|
||||||
|
expect(repository.is_ancestor?(ancestor.id, nil)).to eq(false)
|
||||||
|
expect(repository.is_ancestor?(nil, nil)).to eq(false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue