diff options
-rw-r--r-- | app/views/search/results/_wiki_blob.html.haml | 6 | ||||
-rw-r--r-- | lib/gitlab/git/wiki.rb | 1 | ||||
-rw-r--r-- | lib/gitlab/project_search_results.rb | 3 | ||||
-rw-r--r-- | lib/gitlab/wiki_file_finder.rb | 36 |
4 files changed, 42 insertions, 4 deletions
diff --git a/app/views/search/results/_wiki_blob.html.haml b/app/views/search/results/_wiki_blob.html.haml index 16a0e432d62..e1935e9833a 100644 --- a/app/views/search/results/_wiki_blob.html.haml +++ b/app/views/search/results/_wiki_blob.html.haml @@ -1,10 +1,10 @@ -- wiki_blob = parse_search_result(wiki_blob) +- file_name, wiki_blob = wiki_blob .blob-result .file-holder .js-file-title.file-title - = link_to project_wiki_path(@project, wiki_blob.basename) do + = link_to project_wiki_path(@project, Pathname.new(file_name).sub_ext('')) do %i.fa.fa-file %strong - = wiki_blob.basename + = file_name .file-content.code.term = render 'shared/file_highlight', blob: wiki_blob, first_line_number: wiki_blob.startline diff --git a/lib/gitlab/git/wiki.rb b/lib/gitlab/git/wiki.rb index 1ab8c4e0229..a86fcab0b8b 100644 --- a/lib/gitlab/git/wiki.rb +++ b/lib/gitlab/git/wiki.rb @@ -200,6 +200,7 @@ module Gitlab end def gollum_write_page(name, format, content, commit_details) + binding.pry assert_type!(format, Symbol) assert_type!(commit_details, CommitDetails) diff --git a/lib/gitlab/project_search_results.rb b/lib/gitlab/project_search_results.rb index 2e9b6e302f5..d4851c85ae8 100644 --- a/lib/gitlab/project_search_results.rb +++ b/lib/gitlab/project_search_results.rb @@ -106,7 +106,8 @@ module Gitlab project_wiki = ProjectWiki.new(project) unless project_wiki.empty? - project_wiki.search_files(query) + Gitlab::WikiFileFinder.new(project, repository_ref).find(query) + # project_wiki.search_files(query) else [] end diff --git a/lib/gitlab/wiki_file_finder.rb b/lib/gitlab/wiki_file_finder.rb new file mode 100644 index 00000000000..12febf6613f --- /dev/null +++ b/lib/gitlab/wiki_file_finder.rb @@ -0,0 +1,36 @@ +module Gitlab + class WikiFileFinder < FileFinder + BATCH_SIZE = 100 + + attr_reader :project, :ref, :repository + + def initialize(project, ref) + @project = project + @ref = ref + @repository = project.wiki.repository + end + + private + + def find_by_filename(query, except: []) + safe_query = Regexp.escape(query.downcase.tr(' ', '-')) + filenames = repository.ls_files(ref).first(BATCH_SIZE) + filenames.delete_if { |filename| except.include?(filename) } unless except.empty? + + blob_refs = filenames.select { |f| f.match(safe_query) }.map { |filename| [ref, filename] } + blobs = Gitlab::Git::Blob.batch(repository, blob_refs, blob_size_limit: 1024) + + blobs.map do |blob| + Gitlab::SearchResults::FoundBlob.new( + id: blob.id, + filename: blob.path, + basename: File.basename(blob.path), + ref: ref, + startline: 1, + data: blob.data, + project: project + ) + end + end + end +end |