diff options
-rw-r--r-- | app/models/snippet.rb | 4 | ||||
-rw-r--r-- | changelogs/unreleased/23162-allow-creation-of-files-and-dirs-with-spaces-in-web-ui.yml | 4 | ||||
-rw-r--r-- | features/project/source/browse_files.feature | 10 | ||||
-rw-r--r-- | features/steps/project/source/browse_files.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/git/index.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/regex.rb | 8 | ||||
-rw-r--r-- | spec/features/projects/files/creating_a_file_spec.rb | 5 | ||||
-rw-r--r-- | spec/lib/gitlab/regex_spec.rb | 6 | ||||
-rw-r--r-- | spec/models/repository_spec.rb | 11 |
9 files changed, 16 insertions, 40 deletions
diff --git a/app/models/snippet.rb b/app/models/snippet.rb index 54014df43b0..b3aa7bb986e 100644 --- a/app/models/snippet.rb +++ b/app/models/snippet.rb @@ -37,9 +37,7 @@ class Snippet < ActiveRecord::Base validates :author, presence: true validates :title, presence: true, length: { maximum: 255 } validates :file_name, - length: { maximum: 255 }, - format: { with: Gitlab::Regex.file_name_regex, - message: Gitlab::Regex.file_name_regex_message } + length: { maximum: 255 } validates :content, presence: true validates :visibility_level, inclusion: { in: Gitlab::VisibilityLevel.values } diff --git a/changelogs/unreleased/23162-allow-creation-of-files-and-dirs-with-spaces-in-web-ui.yml b/changelogs/unreleased/23162-allow-creation-of-files-and-dirs-with-spaces-in-web-ui.yml new file mode 100644 index 00000000000..442406c3c04 --- /dev/null +++ b/changelogs/unreleased/23162-allow-creation-of-files-and-dirs-with-spaces-in-web-ui.yml @@ -0,0 +1,4 @@ +--- +title: Allow creation of files and directories with spaces through Web UI +merge_request: 12608 +author: diff --git a/features/project/source/browse_files.feature b/features/project/source/browse_files.feature index 472ec9544f3..59a625056d6 100644 --- a/features/project/source/browse_files.feature +++ b/features/project/source/browse_files.feature @@ -131,16 +131,6 @@ Feature: Project Source Browse Files Then I can see the new text file @javascript - Scenario: If I enter an illegal file name I see an error message - Given I click on "New file" link in repo - And I fill the new file name with an illegal name - And I edit code - And I fill the commit message - And I click on "Commit changes" - Then I am on the new file page - And I see "Path can contain only..." - - @javascript Scenario: I can create file with a directory name Given I click on "New file" link in repo And I fill the new file name with a new directory diff --git a/features/steps/project/source/browse_files.rb b/features/steps/project/source/browse_files.rb index 5475b32388c..621cae5d80d 100644 --- a/features/steps/project/source/browse_files.rb +++ b/features/steps/project/source/browse_files.rb @@ -92,10 +92,6 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps fill_in :branch_name, with: 'new_branch_name', visible: true end - step 'I fill the new file name with an illegal name' do - fill_in :file_name, with: 'Spaces Not Allowed' - end - step 'I fill the new file name with a new directory' do fill_in :file_name, with: new_file_name_with_directory end diff --git a/lib/gitlab/git/index.rb b/lib/gitlab/git/index.rb index 1add037fa5f..666743006e5 100644 --- a/lib/gitlab/git/index.rb +++ b/lib/gitlab/git/index.rb @@ -110,10 +110,6 @@ module Gitlab if segment == '..' raise IndexError, 'Path cannot include directory traversal' end - - unless segment =~ Gitlab::Regex.file_name_regex - raise IndexError, "Path #{Gitlab::Regex.file_name_regex_message}" - end end pathname.to_s diff --git a/lib/gitlab/regex.rb b/lib/gitlab/regex.rb index b706434217d..057f32eaef7 100644 --- a/lib/gitlab/regex.rb +++ b/lib/gitlab/regex.rb @@ -19,14 +19,6 @@ module Gitlab "It must start with letter, digit, emoji or '_'." end - def file_name_regex - @file_name_regex ||= /\A[[[:alnum:]]_\-\.\@\+]*\z/.freeze - end - - def file_name_regex_message - "can contain only letters, digits, '_', '-', '@', '+' and '.'." - end - def container_registry_reference_regex Gitlab::PathRegex.git_reference_regex end diff --git a/spec/features/projects/files/creating_a_file_spec.rb b/spec/features/projects/files/creating_a_file_spec.rb index c31056c3ff7..1196994ac3a 100644 --- a/spec/features/projects/files/creating_a_file_spec.rb +++ b/spec/features/projects/files/creating_a_file_spec.rb @@ -30,11 +30,6 @@ feature 'User wants to create a file', feature: true do expect(page).to have_content 'The file has been successfully created' end - scenario 'file name contains invalid characters' do - submit_new_file(file_name: '\\') - expect(page).to have_content 'Path can contain only' - end - scenario 'file name contains directory traversal' do submit_new_file(file_name: '../README.md') expect(page).to have_content 'Path cannot include directory traversal' diff --git a/spec/lib/gitlab/regex_spec.rb b/spec/lib/gitlab/regex_spec.rb index 979f4fefcb6..51e2c3c38c6 100644 --- a/spec/lib/gitlab/regex_spec.rb +++ b/spec/lib/gitlab/regex_spec.rb @@ -14,12 +14,6 @@ describe Gitlab::Regex, lib: true do it { is_expected.not_to match('?gitlab') } end - describe '.file_name_regex' do - subject { described_class.file_name_regex } - - it { is_expected.to match('foo@bar') } - end - describe '.environment_slug_regex' do subject { described_class.environment_name_regex } diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index c69f0a495db..af305e9b234 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -347,6 +347,17 @@ describe Repository, models: true do expect(blob.data).to eq('Changelog!') end + it 'creates new file and dir when file_path has a forward slash' do + expect do + repository.create_file(user, 'new_dir/new_file.txt', 'File!', + message: 'Create new_file with new_dir', + branch_name: 'master') + end.to change { repository.commits('master').count }.by(1) + + expect(repository.tree('master', 'new_dir').path).to eq('new_dir') + expect(repository.blob_at('master', 'new_dir/new_file.txt').data).to eq('File!') + end + it 'respects the autocrlf setting' do repository.create_file(user, 'hello.txt', "Hello,\r\nWorld", message: 'Add hello world', |