Evade some exceptions when using invalid references
This commit is contained in:
parent
c8e8a1bb77
commit
d76416f5e8
|
@ -84,15 +84,17 @@ class Repository
|
||||||
|
|
||||||
def commit(ref = 'HEAD')
|
def commit(ref = 'HEAD')
|
||||||
return nil unless exists?
|
return nil unless exists?
|
||||||
|
|
||||||
commit =
|
commit =
|
||||||
if ref.is_a?(Gitlab::Git::Commit)
|
if ref.is_a?(Gitlab::Git::Commit)
|
||||||
ref
|
ref
|
||||||
else
|
else
|
||||||
Gitlab::Git::Commit.find(raw_repository, ref)
|
Gitlab::Git::Commit.find(raw_repository, ref)
|
||||||
end
|
end
|
||||||
|
|
||||||
commit = ::Commit.new(commit, @project) if commit
|
commit = ::Commit.new(commit, @project) if commit
|
||||||
commit
|
commit
|
||||||
rescue Rugged::OdbError
|
rescue Rugged::OdbError, Rugged::TreeError
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -232,6 +234,8 @@ class Repository
|
||||||
|
|
||||||
def ref_exists?(ref)
|
def ref_exists?(ref)
|
||||||
rugged.references.exist?(ref)
|
rugged.references.exist?(ref)
|
||||||
|
rescue Rugged::ReferenceError
|
||||||
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_ref!(name, newrev, oldrev)
|
def update_ref!(name, newrev, oldrev)
|
||||||
|
|
|
@ -113,6 +113,26 @@ describe Repository, models: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#ref_exists?' do
|
||||||
|
context 'when ref exists' do
|
||||||
|
it 'returns true' do
|
||||||
|
expect(repository.ref_exists?('refs/heads/master')).to be true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when ref does not exist' do
|
||||||
|
it 'returns false' do
|
||||||
|
expect(repository.ref_exists?('refs/heads/non-existent')).to be false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when ref format is incorrect' do
|
||||||
|
it 'returns false' do
|
||||||
|
expect(repository.ref_exists?('refs/heads/invalid:master')).to be false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#last_commit_for_path' do
|
describe '#last_commit_for_path' do
|
||||||
subject { repository.last_commit_for_path(sample_commit.id, '.gitignore').id }
|
subject { repository.last_commit_for_path(sample_commit.id, '.gitignore').id }
|
||||||
|
|
||||||
|
@ -197,6 +217,35 @@ describe Repository, models: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#commit' do
|
||||||
|
context 'when ref exists' do
|
||||||
|
it 'returns commit object' do
|
||||||
|
expect(repository.commit('master'))
|
||||||
|
.to be_an_instance_of Commit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when ref does not exist' do
|
||||||
|
it 'returns nil' do
|
||||||
|
expect(repository.commit('non-existent-ref')).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when ref is not valid' do
|
||||||
|
context 'when preceding tree element exists' do
|
||||||
|
it 'returns nil' do
|
||||||
|
expect(repository.commit('master:ref')).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when preceding tree element does not exist' do
|
||||||
|
it 'returns nil' do
|
||||||
|
expect(repository.commit('non-existent:ref')).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "#commit_dir" do
|
describe "#commit_dir" do
|
||||||
it "commits a change that creates a new directory" do
|
it "commits a change that creates a new directory" do
|
||||||
expect do
|
expect do
|
||||||
|
|
Loading…
Reference in New Issue