summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancisco Javier López <fjlopez@gitlab.com>2018-05-23 17:04:59 +0200
committerFrancisco Javier López <fjlopez@gitlab.com>2018-05-31 21:09:06 +0200
commitff280595e33f50714e27bbf76f688740a947eb88 (patch)
treef61099b687e9ac825f2d2738e9b4079dcc3ee36c
parente57ad62d488b15b9e65ea63f4ab78e51336318a5 (diff)
downloadgitlab-ce-ff280595e33f50714e27bbf76f688740a947eb88.tar.gz
First PoC
-rw-r--r--app/views/search/results/_wiki_blob.html.haml6
-rw-r--r--lib/gitlab/git/wiki.rb1
-rw-r--r--lib/gitlab/project_search_results.rb3
-rw-r--r--lib/gitlab/wiki_file_finder.rb36
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