From e5afb44a9a1ef1f613f11e6bbb4134f30aaae655 Mon Sep 17 00:00:00 2001 From: Andrew McCallum Date: Mon, 15 Jan 2018 10:05:46 +0000 Subject: [PATCH 1/9] Strip off leading slashes when searching in context of repository. --- app/models/repository.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index 2ffd9558ebc..ab46872393b 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -940,7 +940,7 @@ class Repository def search_files_by_name(query, ref) return [] if empty? || query.blank? - args = %W(ls-tree --full-tree -r #{ref || root_ref} --name-status | #{Regexp.escape(query)}) + args = %W(ls-tree --full-tree -r #{ref || root_ref} --name-status | #{Regexp.escape(query.sub(/^\/*/,""))}) run_git(args).first.lines.map(&:strip) end From 328e1680a4f566a52b36f1197a954dc23ab9b30d Mon Sep 17 00:00:00 2001 From: Andrew McCallum Date: Mon, 15 Jan 2018 10:54:41 +0000 Subject: [PATCH 2/9] Add scenario of searching within context of repository with root slash to tests. --- spec/models/repository_spec.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index f3456e5b354..3d96f815c53 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -668,6 +668,11 @@ describe Repository do expect(results.first).to eq('files/html/500.html') end + it 'ignores root slash' do + result = repository.search_files_by_name('/files', 'master') + expect(results.first).to eq('files/html/500.html') + end + it 'properly handles when query is not present' do results = repository.search_files_by_name('', 'master') From 46f672bc2d02b00062945fda239e08916d12e4c5 Mon Sep 17 00:00:00 2001 From: Andrew McCallum Date: Mon, 15 Jan 2018 11:04:54 +0000 Subject: [PATCH 3/9] Add changelog --- changelogs/unreleased/36571-ignore-root-in-repo.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelogs/unreleased/36571-ignore-root-in-repo.yml diff --git a/changelogs/unreleased/36571-ignore-root-in-repo.yml b/changelogs/unreleased/36571-ignore-root-in-repo.yml new file mode 100644 index 00000000000..b0937ade7d6 --- /dev/null +++ b/changelogs/unreleased/36571-ignore-root-in-repo.yml @@ -0,0 +1,5 @@ +--- +title: Ignore root slash when searching for files within context of respository. +merge_request: +author: Andrew McCallum +type: fixed From 373a9b13e7d0b5ed7126aa1427a7a515b47bdff3 Mon Sep 17 00:00:00 2001 From: Andrew McCallum Date: Mon, 15 Jan 2018 11:06:16 +0000 Subject: [PATCH 4/9] Update 36571-ignore-root-in-repo.yml --- changelogs/unreleased/36571-ignore-root-in-repo.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelogs/unreleased/36571-ignore-root-in-repo.yml b/changelogs/unreleased/36571-ignore-root-in-repo.yml index b0937ade7d6..396e82be51b 100644 --- a/changelogs/unreleased/36571-ignore-root-in-repo.yml +++ b/changelogs/unreleased/36571-ignore-root-in-repo.yml @@ -1,5 +1,5 @@ --- -title: Ignore root slash when searching for files within context of respository. +title: Ignore leading slashes when searching for files within context of repository. merge_request: author: Andrew McCallum type: fixed From ae106913d03215dac1e73e4a5897e3cf7547ce84 Mon Sep 17 00:00:00 2001 From: Andrew McCallum Date: Mon, 15 Jan 2018 11:10:35 +0000 Subject: [PATCH 5/9] Add space after comma per layout guidelines. --- app/models/repository.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index ab46872393b..a65a2b8427d 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -940,7 +940,7 @@ class Repository def search_files_by_name(query, ref) return [] if empty? || query.blank? - args = %W(ls-tree --full-tree -r #{ref || root_ref} --name-status | #{Regexp.escape(query.sub(/^\/*/,""))}) + args = %W(ls-tree --full-tree -r #{ref || root_ref} --name-status | #{Regexp.escape(query.sub(/^\/*/, ""))}) run_git(args).first.lines.map(&:strip) end From bce6a89152bd6d45bce67d5ecf0250ab97a0a93a Mon Sep 17 00:00:00 2001 From: Andrew McCallum Date: Mon, 15 Jan 2018 12:04:27 +0000 Subject: [PATCH 6/9] Fix spelling mistake. --- spec/models/repository_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 3d96f815c53..5860a0bf698 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -668,8 +668,8 @@ describe Repository do expect(results.first).to eq('files/html/500.html') end - it 'ignores root slash' do - result = repository.search_files_by_name('/files', 'master') + it 'ignores leading slashes' do + results = repository.search_files_by_name('/files', 'master') expect(results.first).to eq('files/html/500.html') end From 7ce732fb3746df82790ea80a48560e62b486b225 Mon Sep 17 00:00:00 2001 From: Andrew McCallum Date: Mon, 15 Jan 2018 14:43:12 +0000 Subject: [PATCH 7/9] Create intermediary variable for query value with leading slashes removed. --- app/models/repository.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index a65a2b8427d..f3ec65a1885 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -940,7 +940,9 @@ class Repository def search_files_by_name(query, ref) return [] if empty? || query.blank? - args = %W(ls-tree --full-tree -r #{ref || root_ref} --name-status | #{Regexp.escape(query.sub(/^\/*/, ""))}) + safe_query = query.sub(/^\/*/, "") + + args = %W(ls-tree --full-tree -r #{ref || root_ref} --name-status | #{Regexp.escape(safe_query)}) run_git(args).first.lines.map(&:strip) end From a539e03d7e4f12cfaa3ae7998dd111f498f4c8dc Mon Sep 17 00:00:00 2001 From: Andrew McCallum Date: Mon, 15 Jan 2018 15:19:43 +0000 Subject: [PATCH 8/9] Account for query of only forward slash(es). --- app/models/repository.rb | 4 ++-- spec/models/repository_spec.rb | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index f3ec65a1885..c258cffb274 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -938,10 +938,10 @@ class Repository end def search_files_by_name(query, ref) - return [] if empty? || query.blank? - safe_query = query.sub(/^\/*/, "") + return [] if empty? || safe_query.blank? + args = %W(ls-tree --full-tree -r #{ref || root_ref} --name-status | #{Regexp.escape(safe_query)}) run_git(args).first.lines.map(&:strip) diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 5860a0bf698..6767d818009 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -670,9 +670,16 @@ describe Repository do it 'ignores leading slashes' do results = repository.search_files_by_name('/files', 'master') + expect(results.first).to eq('files/html/500.html') end + it 'properly handles when query is only slashes' do + results = repository.search_files_by_name('//', 'master') + + expect(results).to match_array([]) + end + it 'properly handles when query is not present' do results = repository.search_files_by_name('', 'master') From b1cf3225dbb6b897a8be405d599714b74cbfb547 Mon Sep 17 00:00:00 2001 From: Andrew McCallum Date: Tue, 16 Jan 2018 09:40:51 +0000 Subject: [PATCH 9/9] Move Regexp.escape(), fix formatting on tests. --- app/models/repository.rb | 4 ++-- spec/models/repository_spec.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index c258cffb274..a67bb7294e6 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -938,11 +938,11 @@ class Repository end def search_files_by_name(query, ref) - safe_query = query.sub(/^\/*/, "") + safe_query = Regexp.escape(query.sub(/^\/*/, "")) return [] if empty? || safe_query.blank? - args = %W(ls-tree --full-tree -r #{ref || root_ref} --name-status | #{Regexp.escape(safe_query)}) + args = %W(ls-tree --full-tree -r #{ref || root_ref} --name-status | #{safe_query}) run_git(args).first.lines.map(&:strip) end diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 6767d818009..d9395ca61d7 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -675,9 +675,9 @@ describe Repository do end it 'properly handles when query is only slashes' do - results = repository.search_files_by_name('//', 'master') + results = repository.search_files_by_name('//', 'master') - expect(results).to match_array([]) + expect(results).to match_array([]) end it 'properly handles when query is not present' do