summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2018-07-20 13:49:30 +0000
committerSean McGivern <sean@mcgivern.me.uk>2018-07-20 13:49:30 +0000
commit4e1c35ed568f30d1e69388e4acba714e54d32685 (patch)
tree1828367d8853eb00831a013ccc2b5d79a014d157
parent1484ed412ec2b38098f437931b1062191e91f655 (diff)
parent6354d55470990f2eb65e8934be9072d0ff7c441a (diff)
downloadgitlab-ce-4e1c35ed568f30d1e69388e4acba714e54d32685.tar.gz
Merge branch 'fj-49014-wiki-search-error' into 'master'
Fixing bug with wiki ref in ProjectSearchResults Closes #49014 See merge request gitlab-org/gitlab-ce!20722
-rw-r--r--changelogs/unreleased/fj-49014-wiki-search-error.yml5
-rw-r--r--lib/gitlab/project_search_results.rb19
-rw-r--r--spec/lib/gitlab/project_search_results_spec.rb53
3 files changed, 70 insertions, 7 deletions
diff --git a/changelogs/unreleased/fj-49014-wiki-search-error.yml b/changelogs/unreleased/fj-49014-wiki-search-error.yml
new file mode 100644
index 00000000000..a76805cb7f9
--- /dev/null
+++ b/changelogs/unreleased/fj-49014-wiki-search-error.yml
@@ -0,0 +1,5 @@
+---
+title: Fixed bug with invalid repository reference using the wiki search
+merge_request: 20722
+author:
+type: fixed
diff --git a/lib/gitlab/project_search_results.rb b/lib/gitlab/project_search_results.rb
index 38bdc61d8ab..62f9e538c04 100644
--- a/lib/gitlab/project_search_results.rb
+++ b/lib/gitlab/project_search_results.rb
@@ -5,7 +5,7 @@ module Gitlab
def initialize(current_user, project, query, repository_ref = nil, per_page: 20)
@current_user = current_user
@project = project
- @repository_ref = repository_ref.presence || project.default_branch
+ @repository_ref = repository_ref.presence
@query = query
@per_page = per_page
end
@@ -95,7 +95,7 @@ module Gitlab
def blobs
return [] unless Ability.allowed?(@current_user, :download_code, @project)
- @blobs ||= Gitlab::FileFinder.new(project, repository_ref).find(query)
+ @blobs ||= Gitlab::FileFinder.new(project, repository_project_ref).find(query)
end
def wiki_blobs
@@ -103,11 +103,8 @@ module Gitlab
@wiki_blobs ||= begin
if project.wiki_enabled? && query.present?
- project_wiki = ProjectWiki.new(project)
-
- unless project_wiki.empty?
- ref = repository_ref || project.wiki.default_branch
- Gitlab::WikiFileFinder.new(project, ref).find(query)
+ unless project.wiki.empty?
+ Gitlab::WikiFileFinder.new(project, repository_wiki_ref).find(query)
else
[]
end
@@ -150,5 +147,13 @@ module Gitlab
def project_ids_relation
project
end
+
+ def repository_project_ref
+ @repository_project_ref ||= repository_ref || project.default_branch
+ end
+
+ def repository_wiki_ref
+ @repository_wiki_ref ||= repository_ref || project.wiki.default_branch
+ end
end
end
diff --git a/spec/lib/gitlab/project_search_results_spec.rb b/spec/lib/gitlab/project_search_results_spec.rb
index 767a3092c73..4a0dc3686ec 100644
--- a/spec/lib/gitlab/project_search_results_spec.rb
+++ b/spec/lib/gitlab/project_search_results_spec.rb
@@ -64,6 +64,49 @@ describe Gitlab::ProjectSearchResults do
end
end
+ shared_examples 'blob search repository ref' do |entity_type|
+ let(:query) { 'files' }
+ let(:file_finder) { double }
+ let(:project_branch) { 'project_branch' }
+
+ subject(:results) { described_class.new(user, project, query, repository_ref).objects(blob_type) }
+
+ before do
+ allow(entity).to receive(:default_branch).and_return(project_branch)
+ allow(file_finder).to receive(:find).and_return([])
+ end
+
+ context 'when repository_ref exists' do
+ let(:repository_ref) { 'ref_branch' }
+
+ it 'uses it' do
+ expect(Gitlab::FileFinder).to receive(:new).with(project, repository_ref).and_return(file_finder)
+
+ results
+ end
+ end
+
+ context 'when repository_ref is not present' do
+ let(:repository_ref) { nil }
+
+ it "uses #{entity_type} repository default reference" do
+ expect(Gitlab::FileFinder).to receive(:new).with(project, project_branch).and_return(file_finder)
+
+ results
+ end
+ end
+
+ context 'when repository_ref is blank' do
+ let(:repository_ref) { '' }
+
+ it "uses #{entity_type} repository default reference" do
+ expect(Gitlab::FileFinder).to receive(:new).with(project, project_branch).and_return(file_finder)
+
+ results
+ end
+ end
+ end
+
describe 'blob search' do
let(:project) { create(:project, :public, :repository) }
@@ -75,6 +118,11 @@ describe Gitlab::ProjectSearchResults do
let(:expected_file_by_content) { 'CHANGELOG' }
end
+ it_behaves_like 'blob search repository ref', 'project' do
+ let(:blob_type) { 'blobs' }
+ let(:entity) { project }
+ end
+
describe 'parsing results' do
let(:results) { project.repository.search_files_by_content('feature', 'master') }
let(:search_result) { results.first }
@@ -212,6 +260,11 @@ describe Gitlab::ProjectSearchResults do
let(:expected_file_by_name) { 'Files/Title.md' }
let(:expected_file_by_content) { 'CHANGELOG.md' }
end
+
+ it_behaves_like 'blob search repository ref', 'wiki' do
+ let(:blob_type) { 'wiki_blobs' }
+ let(:entity) { project.wiki }
+ end
end
it 'does not list issues on private projects' do