Skip to content

Commit ee59fdf

Browse files
author
Robert Speicher
committed
Merge branch 'gitaly-1182-search-by-content-name' into 'master'
Migrate Repo#search_by_{content,name} to Gitaly See merge request gitlab-org/gitlab-ce!18750
2 parents fa04ec1 + 61a5994 commit ee59fdf

File tree

4 files changed

+44
-8
lines changed

4 files changed

+44
-8
lines changed

GITALY_SERVER_VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.100.0
1+
0.102.0

lib/gitlab/git/repository.rb

+21-5
Original file line numberDiff line numberDiff line change
@@ -1473,10 +1473,19 @@ def tag_names_contains_sha(sha)
14731473
def search_files_by_content(query, ref)
14741474
return [] if empty? || query.blank?
14751475

1476-
offset = 2
1477-
args = %W(grep -i -I -n -z --before-context #{offset} --after-context #{offset} -E -e #{Regexp.escape(query)} #{ref || root_ref})
1476+
safe_query = Regexp.escape(query)
1477+
ref ||= root_ref
1478+
1479+
gitaly_migrate(:search_files_by_content) do |is_enabled|
1480+
if is_enabled
1481+
gitaly_repository_client.search_files_by_content(ref, safe_query)
1482+
else
1483+
offset = 2
1484+
args = %W(grep -i -I -n -z --before-context #{offset} --after-context #{offset} -E -e #{safe_query} #{ref})
14781485

1479-
run_git(args).first.scrub.split(/^--\n/)
1486+
run_git(args).first.scrub.split(/^--\n/)
1487+
end
1488+
end
14801489
end
14811490

14821491
def can_be_merged?(source_sha, target_branch)
@@ -1491,12 +1500,19 @@ def can_be_merged?(source_sha, target_branch)
14911500

14921501
def search_files_by_name(query, ref)
14931502
safe_query = Regexp.escape(query.sub(%r{^/*}, ""))
1503+
ref ||= root_ref
14941504

14951505
return [] if empty? || safe_query.blank?
14961506

1497-
args = %W(ls-tree -r --name-status --full-tree #{ref || root_ref} -- #{safe_query})
1507+
gitaly_migrate(:search_files_by_name) do |is_enabled|
1508+
if is_enabled
1509+
gitaly_repository_client.search_files_by_name(ref, safe_query)
1510+
else
1511+
args = %W(ls-tree -r --name-status --full-tree #{ref} -- #{safe_query})
14981512

1499-
run_git(args).first.lines.map(&:strip)
1513+
run_git(args).first.lines.map(&:strip)
1514+
end
1515+
end
15001516
end
15011517

15021518
def find_commits_by_message(query, ref, path, limit, offset)

lib/gitlab/gitaly_client/repository_service.rb

+10
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,16 @@ def raw_changes_between(from, to)
301301

302302
GitalyClient.call(@storage, :repository_service, :get_raw_changes, request)
303303
end
304+
305+
def search_files_by_name(ref, query)
306+
request = Gitaly::SearchFilesByNameRequest.new(repository: @gitaly_repo, ref: ref, query: query)
307+
GitalyClient.call(@storage, :repository_service, :search_files_by_name, request).flat_map(&:files)
308+
end
309+
310+
def search_files_by_content(ref, query)
311+
request = Gitaly::SearchFilesByContentRequest.new(repository: @gitaly_repo, ref: ref, query: query)
312+
GitalyClient.call(@storage, :repository_service, :search_files_by_content, request).flat_map(&:matches)
313+
end
304314
end
305315
end
306316
end

spec/models/repository_spec.rb

+12-2
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ def expect_to_raise_storage_error
671671
end
672672
end
673673

674-
describe "search_files_by_content" do
674+
shared_examples "search_files_by_content" do
675675
let(:results) { repository.search_files_by_content('feature', 'master') }
676676
subject { results }
677677

@@ -718,7 +718,7 @@ def expect_to_raise_storage_error
718718
end
719719
end
720720

721-
describe "search_files_by_name" do
721+
shared_examples "search_files_by_name" do
722722
let(:results) { repository.search_files_by_name('files', 'master') }
723723

724724
it 'returns result' do
@@ -758,6 +758,16 @@ def expect_to_raise_storage_error
758758
end
759759
end
760760

761+
describe 'with gitaly enabled' do
762+
it_behaves_like 'search_files_by_content'
763+
it_behaves_like 'search_files_by_name'
764+
end
765+
766+
describe 'with gitaly disabled', :disable_gitaly do
767+
it_behaves_like 'search_files_by_content'
768+
it_behaves_like 'search_files_by_name'
769+
end
770+
761771
describe '#async_remove_remote' do
762772
before do
763773
masterrev = repository.find_branch('master').dereferenced_target

0 commit comments

Comments
 (0)