Merge branch 'search-blob-basenames' into 'master'
Build correct basenames for title search results See merge request gitlab-org/gitlab-ce!29898
This commit is contained in:
commit
0e6e924b8b
5 changed files with 47 additions and 14 deletions
|
@ -1,5 +1,5 @@
|
|||
- project = find_project_for_result_blob(projects, wiki_blob)
|
||||
- wiki_blob = parse_search_result(wiki_blob)
|
||||
- wiki_blob_link = project_wiki_path(project, Pathname.new(wiki_blob.filename).sub_ext(''))
|
||||
- wiki_blob_link = project_wiki_path(project, wiki_blob.basename)
|
||||
|
||||
= render partial: 'search/results/blob_data', locals: { blob: wiki_blob, project: project, file_name: wiki_blob.filename, blob_link: wiki_blob_link }
|
||||
|
|
5
changelogs/unreleased/search-blob-basenames.yml
Normal file
5
changelogs/unreleased/search-blob-basenames.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Build correct basenames for title search results
|
||||
merge_request: 29898
|
||||
author:
|
||||
type: fixed
|
|
@ -93,7 +93,7 @@ module Gitlab
|
|||
data = {
|
||||
id: blob.id,
|
||||
binary_filename: blob.path,
|
||||
binary_basename: File.basename(blob.path, File.extname(blob.path)),
|
||||
binary_basename: path_without_extension(blob.path),
|
||||
ref: ref,
|
||||
startline: 1,
|
||||
binary_data: blob.data,
|
||||
|
@ -111,6 +111,10 @@ module Gitlab
|
|||
content_match.match(FILENAME_REGEXP) { |matches| matches[:filename] }
|
||||
end
|
||||
|
||||
def path_without_extension(path)
|
||||
Pathname.new(path).sub_ext('').to_s
|
||||
end
|
||||
|
||||
def parsed_content
|
||||
strong_memoize(:parsed_content) do
|
||||
if content_match
|
||||
|
@ -137,8 +141,7 @@ module Gitlab
|
|||
filename = matches[:filename]
|
||||
startline = matches[:startline]
|
||||
startline = startline.to_i - index
|
||||
extname = Regexp.escape(File.extname(filename))
|
||||
basename = filename.sub(/#{extname}$/, '')
|
||||
basename = path_without_extension(filename)
|
||||
end
|
||||
|
||||
data << line.sub(prefix.to_s, '')
|
||||
|
|
|
@ -3,7 +3,7 @@ require 'spec_helper'
|
|||
describe 'User searches for wiki pages', :js do
|
||||
let(:user) { create(:user) }
|
||||
let(:project) { create(:project, :repository, :wiki_repo, namespace: user.namespace) }
|
||||
let!(:wiki_page) { create(:wiki_page, wiki: project.wiki, attrs: { title: 'test_wiki', content: 'Some Wiki content' }) }
|
||||
let!(:wiki_page) { create(:wiki_page, wiki: project.wiki, attrs: { title: 'directory/title', content: 'Some Wiki content' }) }
|
||||
|
||||
before do
|
||||
project.add_maintainer(user)
|
||||
|
@ -22,7 +22,7 @@ describe 'User searches for wiki pages', :js do
|
|||
click_link(project.full_name)
|
||||
end
|
||||
|
||||
fill_in('dashboard_search', with: 'content')
|
||||
fill_in('dashboard_search', with: search_term)
|
||||
find('.btn-search').click
|
||||
|
||||
page.within('.search-filter') do
|
||||
|
@ -43,7 +43,7 @@ describe 'User searches for wiki pages', :js do
|
|||
|
||||
context 'when searching by title' do
|
||||
it_behaves_like 'search wiki blobs' do
|
||||
let(:search_term) { 'test_wiki' }
|
||||
let(:search_term) { 'title' }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,14 +3,15 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Gitlab::Search::FoundBlob do
|
||||
describe 'parsing results' do
|
||||
let(:project) { create(:project, :public, :repository) }
|
||||
let(:project) { create(:project, :public, :repository) }
|
||||
|
||||
describe 'parsing content results' do
|
||||
let(:results) { project.repository.search_files_by_content('feature', 'master') }
|
||||
let(:search_result) { results.first }
|
||||
|
||||
subject { described_class.new(content_match: search_result, project: project) }
|
||||
|
||||
it "returns a valid FoundBlob" do
|
||||
it 'returns a valid FoundBlob' do
|
||||
is_expected.to be_an described_class
|
||||
expect(subject.id).to be_nil
|
||||
expect(subject.path).to eq('CHANGELOG')
|
||||
|
@ -21,13 +22,13 @@ describe Gitlab::Search::FoundBlob do
|
|||
expect(subject.data.lines[2]).to eq(" - Feature: Replace teams with group membership\n")
|
||||
end
|
||||
|
||||
it "doesn't parses content if not needed" do
|
||||
it 'does not parse content if not needed' do
|
||||
expect(subject).not_to receive(:parse_search_result)
|
||||
expect(subject.project_id).to eq(project.id)
|
||||
expect(subject.binary_filename).to eq('CHANGELOG')
|
||||
end
|
||||
|
||||
it "parses content only once when needed" do
|
||||
it 'parses content only once when needed' do
|
||||
expect(subject).to receive(:parse_search_result).once.and_call_original
|
||||
expect(subject.filename).to eq('CHANGELOG')
|
||||
expect(subject.startline).to eq(188)
|
||||
|
@ -119,7 +120,7 @@ describe Gitlab::Search::FoundBlob do
|
|||
end
|
||||
end
|
||||
|
||||
context "when filename has extension" do
|
||||
context 'when filename has extension' do
|
||||
let(:search_result) { "master:CONTRIBUTE.md\x005\x00- [Contribute to GitLab](#contribute-to-gitlab)\n" }
|
||||
|
||||
it { expect(subject.path).to eq('CONTRIBUTE.md') }
|
||||
|
@ -127,7 +128,7 @@ describe Gitlab::Search::FoundBlob do
|
|||
it { expect(subject.basename).to eq('CONTRIBUTE') }
|
||||
end
|
||||
|
||||
context "when file under directory" do
|
||||
context 'when file is under directory' do
|
||||
let(:search_result) { "master:a/b/c.md\x005\x00a b c\n" }
|
||||
|
||||
it { expect(subject.path).to eq('a/b/c.md') }
|
||||
|
@ -135,4 +136,28 @@ describe Gitlab::Search::FoundBlob do
|
|||
it { expect(subject.basename).to eq('a/b/c') }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'parsing title results' do
|
||||
context 'when file is under directory' do
|
||||
let(:path) { 'a/b/c.md' }
|
||||
|
||||
subject { described_class.new(blob_filename: path, project: project, ref: 'master') }
|
||||
|
||||
before do
|
||||
allow(Gitlab::Git::Blob).to receive(:batch).and_return([
|
||||
Gitlab::Git::Blob.new(path: path)
|
||||
])
|
||||
end
|
||||
|
||||
it { expect(subject.path).to eq('a/b/c.md') }
|
||||
it { expect(subject.filename).to eq('a/b/c.md') }
|
||||
it { expect(subject.basename).to eq('a/b/c') }
|
||||
|
||||
context 'when filename has multiple extensions' do
|
||||
let(:path) { 'a/b/c.whatever.md' }
|
||||
|
||||
it { expect(subject.basename).to eq('a/b/c.whatever') }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue