diff options
author | Douwe Maan <douwe@gitlab.com> | 2018-07-09 17:46:17 +0300 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2018-07-09 17:46:17 +0300 |
commit | 9a9b4444ac176dbfda8ed38653550931fe7671f3 (patch) | |
tree | 3cd76162beb032069e72cb8b5bc2e81537acc16b | |
parent | e45dcbdca2276cc8e9d3dfb247380c6691c71be4 (diff) | |
parent | 31f2608161945d3c1189509955d68209934e2988 (diff) |
Merge branch 'sh-fix-issue-47797-ce' into 'master'
Fix handling of annotated tags when Gitaly is not in use
Closes #47797
See merge request gitlab-org/gitlab-ce!20497
-rw-r--r-- | changelogs/unreleased/sh-fix-issue-47797-ce.yml | 5 | ||||
-rw-r--r-- | lib/extracts_path.rb | 5 | ||||
-rw-r--r-- | spec/lib/extracts_path_spec.rb | 26 |
3 files changed, 36 insertions, 0 deletions
diff --git a/changelogs/unreleased/sh-fix-issue-47797-ce.yml b/changelogs/unreleased/sh-fix-issue-47797-ce.yml new file mode 100644 index 00000000000..456d96acacb --- /dev/null +++ b/changelogs/unreleased/sh-fix-issue-47797-ce.yml @@ -0,0 +1,5 @@ +--- +title: Fix handling of annotated tags when Gitaly is not in use +merge_request: +author: +type: fixed diff --git a/lib/extracts_path.rb b/lib/extracts_path.rb index a9b04c183ad..e8dbde176ef 100644 --- a/lib/extracts_path.rb +++ b/lib/extracts_path.rb @@ -139,6 +139,11 @@ module ExtractsPath def lfs_blob_ids blob_ids = tree.blobs.map(&:id) + + # When current endpoint is a Blob then `tree.blobs` will be empty, it means we need to analyze + # the current Blob in order to determine if it's a LFS object + blob_ids = Array.wrap(@repo.blob_at(@commit.id, @path)&.id) if blob_ids.empty? # rubocop:disable Gitlab/ModuleWithInstanceVariables + @lfs_blob_ids = Gitlab::Git::Blob.batch_lfs_pointers(@project.repository, blob_ids).map(&:id) # rubocop:disable Gitlab/ModuleWithInstanceVariables end diff --git a/spec/lib/extracts_path_spec.rb b/spec/lib/extracts_path_spec.rb index e13406d1972..8947e2ac4fb 100644 --- a/spec/lib/extracts_path_spec.rb +++ b/spec/lib/extracts_path_spec.rb @@ -203,4 +203,30 @@ describe ExtractsPath do expect(extract_ref_without_atom('foo.atom')).to eq(nil) end end + + describe '#lfs_blob_ids' do + shared_examples '#lfs_blob_ids' do + let(:tag) { @project.repository.add_tag(@project.owner, 'my-annotated-tag', 'master', 'test tag') } + let(:ref) { tag.target } + let(:params) { { ref: ref, path: 'README.md' } } + + before do + @project = create(:project, :repository) + end + + it 'handles annotated tags' do + assign_ref_vars + + expect(lfs_blob_ids).to eq([]) + end + end + + context 'when gitaly is enabled' do + it_behaves_like '#lfs_blob_ids' + end + + context 'when gitaly is disabled', :skip_gitaly_mock do + it_behaves_like '#lfs_blob_ids' + end + end end |