diff --git a/app/models/repository.rb b/app/models/repository.rb index ceed9929d264d06a4d54893f813d1c87f75ac341..32e26474db6b8d434c8bb270fb5e1f32520d3fcc 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -170,11 +170,6 @@ def commits(ref = nil, opts = {}) commits = Commit.decorate(commits, container) if commits.present? CommitCollection.new(container, commits, ref) - rescue Gitlab::Git::CommandError => e - # Temporary fix to address a new Gitaly internal error: https://gitlab.com/gitlab-org/gitlab/-/issues/452488 - return CommitCollection.new(container, [], ref) if e.message.include?('listing commits failed') - - raise end def commits_between(from, to, limit: nil) diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index dd9ecdf993c80eadcada8978b20eeeb86f2e812c..485e400eb26f1b34bc6198cbd4bd60234596dd14 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -386,26 +386,6 @@ def expect_to_raise_storage_error end end - context 'when Gitaly raises a CommandError error' do - let(:error_message) { 'Boom' } - - before do - expect(Gitlab::Git::Commit).to receive(:where).and_raise(Gitlab::Git::CommandError, error_message) - end - - it 're-raises an error' do - expect { repository.commits('master', limit: 60) }.to raise_error(Gitlab::Git::CommandError, error_message) - end - - context 'when error contains "listing commits failed" message' do - let(:error_message) { 'listing commits failed' } - - it 'returns an empty collection' do - expect(repository.commits('master', limit: 60).to_a).to eq([]) - end - end - end - context 'when ref is passed' do it 'returns every commit from the specified ref' do expect(repository.commits('master', limit: 60).size).to eq(37) diff --git a/spec/requests/api/commits_spec.rb b/spec/requests/api/commits_spec.rb index 85a07d85174f6a2813bf0e085f5ca6928f576cc3..db76b03090ab441d1b26b5a270c7625a136ab3b8 100644 --- a/spec/requests/api/commits_spec.rb +++ b/spec/requests/api/commits_spec.rb @@ -277,6 +277,29 @@ end end + context 'with ref_name + path params' do + let(:params) { { ref_name: ref_name, path: 'files/ruby/popen.rb' } } + let(:ref_name) { 'master' } + + it 'returns project commits matching provided path parameter' do + get api("/projects/#{project_id}/repository/commits", user), params: params + + expect(json_response.size).to eq(3) + expect(json_response.first["id"]).to eq("570e7b2abdd848b95f2f578043fc23bd6f6fd24d") + expect(response).to include_limited_pagination_headers + end + + context 'when ref_name does not exist' do + let(:ref_name) { 'does-not-exist' } + + it 'returns an empty response' do + get api("/projects/#{project_id}/repository/commits", user), params: params + + expect(json_response).to eq([]) + end + end + end + context 'with pagination params' do let(:page) { 1 } let(:per_page) { 5 }