Split repository search result on \n instead of $ to prevent the items of the array to start with a newline. Remove the strip from parsing the search result to keep result endlines.
This commit is contained in:
parent
332a9bc85a
commit
d17d3ec7f7
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix search results stripping last endline when parsing the results
|
||||
merge_request: 17777
|
||||
author: Jasper Maes
|
||||
type: fixed
|
|
@ -1389,7 +1389,7 @@ module Gitlab
|
|||
offset = 2
|
||||
args = %W(grep -i -I -n -z --before-context #{offset} --after-context #{offset} -E -e #{Regexp.escape(query)} #{ref || root_ref})
|
||||
|
||||
run_git(args).first.scrub.split(/^--$/)
|
||||
run_git(args).first.scrub.split(/^--\n/)
|
||||
end
|
||||
|
||||
def can_be_merged?(source_sha, target_branch)
|
||||
|
|
|
@ -58,7 +58,7 @@ module Gitlab
|
|||
data = ""
|
||||
startline = 0
|
||||
|
||||
result.strip.each_line.each_with_index do |line, index|
|
||||
result.each_line.each_with_index do |line, index|
|
||||
prefix ||= line.match(/^(?<ref>[^:]*):(?<filename>.*)\x00(?<startline>\d+)\x00/)&.tap do |matches|
|
||||
ref = matches[:ref]
|
||||
filename = matches[:filename]
|
||||
|
|
|
@ -83,19 +83,19 @@ describe Gitlab::ProjectSearchResults do
|
|||
end
|
||||
|
||||
context 'when the matching filename contains a colon' do
|
||||
let(:search_result) { "\nmaster:testdata/project::function1.yaml\x001\x00---\n" }
|
||||
let(:search_result) { "master:testdata/project::function1.yaml\x001\x00---\n" }
|
||||
|
||||
it 'returns a valid FoundBlob' do
|
||||
expect(subject.filename).to eq('testdata/project::function1.yaml')
|
||||
expect(subject.basename).to eq('testdata/project::function1')
|
||||
expect(subject.ref).to eq('master')
|
||||
expect(subject.startline).to eq(1)
|
||||
expect(subject.data).to eq('---')
|
||||
expect(subject.data).to eq("---\n")
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the matching content contains a number surrounded by colons' do
|
||||
let(:search_result) { "\nmaster:testdata/foo.txt\x001\x00blah:9:blah" }
|
||||
let(:search_result) { "master:testdata/foo.txt\x001\x00blah:9:blah" }
|
||||
|
||||
it 'returns a valid FoundBlob' do
|
||||
expect(subject.filename).to eq('testdata/foo.txt')
|
||||
|
@ -106,6 +106,18 @@ describe Gitlab::ProjectSearchResults do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when the search result ends with an empty line' do
|
||||
let(:results) { project.repository.search_files_by_content('Role models', 'master') }
|
||||
|
||||
it 'returns a valid FoundBlob that ends with an empty line' do
|
||||
expect(subject.filename).to eq('files/markdown/ruby-style-guide.md')
|
||||
expect(subject.basename).to eq('files/markdown/ruby-style-guide')
|
||||
expect(subject.ref).to eq('master')
|
||||
expect(subject.startline).to eq(1)
|
||||
expect(subject.data).to eq("# Prelude\n\n> Role models are important. <br/>\n> -- Officer Alex J. Murphy / RoboCop\n\n")
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the search returns non-ASCII data' do
|
||||
context 'with UTF-8' do
|
||||
let(:results) { project.repository.search_files_by_content('файл', 'master') }
|
||||
|
@ -115,7 +127,7 @@ describe Gitlab::ProjectSearchResults do
|
|||
expect(subject.basename).to eq('encoding/russian')
|
||||
expect(subject.ref).to eq('master')
|
||||
expect(subject.startline).to eq(1)
|
||||
expect(subject.data).to eq('Хороший файл')
|
||||
expect(subject.data).to eq("Хороший файл\n")
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -139,7 +151,7 @@ describe Gitlab::ProjectSearchResults do
|
|||
expect(subject.basename).to eq('encoding/iso8859')
|
||||
expect(subject.ref).to eq('master')
|
||||
expect(subject.startline).to eq(1)
|
||||
expect(subject.data).to eq("Äü\n\nfoo")
|
||||
expect(subject.data).to eq("Äü\n\nfoo\n")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue