Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
0ea38dc5
Commit
0ea38dc5
authored
Oct 29, 2015
by
Douwe Maan
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'binford2k/gitlab-ce-feature/create_new_directories'
parents
f24324ad
6d0337a9
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
66 additions
and
5 deletions
+66
-5
CHANGELOG
CHANGELOG
+3
-0
app/assets/stylesheets/pages/editor.scss
app/assets/stylesheets/pages/editor.scss
+1
-1
app/controllers/projects/blob_controller.rb
app/controllers/projects/blob_controller.rb
+1
-1
app/services/files/create_dir_service.rb
app/services/files/create_dir_service.rb
+11
-0
app/services/files/create_service.rb
app/services/files/create_service.rb
+8
-3
features/project/source/browse_files.feature
features/project/source/browse_files.feature
+10
-0
features/steps/project/source/browse_files.rb
features/steps/project/source/browse_files.rb
+15
-0
lib/gitlab/regex.rb
lib/gitlab/regex.rb
+17
-0
No files found.
CHANGELOG
View file @
0ea38dc5
...
@@ -30,6 +30,9 @@ v 8.1.0
...
@@ -30,6 +30,9 @@ v 8.1.0
- Ensure MySQL CI limits DB migrations occur after the fields have been created (Stan Hu)
- Ensure MySQL CI limits DB migrations occur after the fields have been created (Stan Hu)
- Fix duplicate repositories in GitHub import page (Stan Hu)
- Fix duplicate repositories in GitHub import page (Stan Hu)
- Redirect to a default path if HTTP_REFERER is not set (Stan Hu)
- Redirect to a default path if HTTP_REFERER is not set (Stan Hu)
- Adds ability to create directories using the web editor (Ben Ford)
v 8.1.0 (unreleased)
- Send an email to admin email when a user is reported for spam (Jonathan Rochkind)
- Send an email to admin email when a user is reported for spam (Jonathan Rochkind)
- Show notifications button when user is member of group rather than project (Grzegorz Bizon)
- Show notifications button when user is member of group rather than project (Grzegorz Bizon)
- Fix bug preventing mentioned issued from being closed when MR is merged using fast-forward merge.
- Fix bug preventing mentioned issued from being closed when MR is merged using fast-forward merge.
...
...
app/assets/stylesheets/pages/editor.scss
View file @
0ea38dc5
...
@@ -50,7 +50,7 @@
...
@@ -50,7 +50,7 @@
.editor-file-name
{
.editor-file-name
{
.new-file-name
{
.new-file-name
{
display
:
inline-block
;
display
:
inline-block
;
width
:
20
0px
;
width
:
45
0px
;
}
}
.form-control
{
.form-control
{
...
...
app/controllers/projects/blob_controller.rb
View file @
0ea38dc5
...
@@ -161,7 +161,7 @@ class Projects::BlobController < Projects::ApplicationController
...
@@ -161,7 +161,7 @@ class Projects::BlobController < Projects::ApplicationController
if
params
[
:file
].
present?
if
params
[
:file
].
present?
params
[
:file_name
]
=
params
[
:file
].
original_filename
params
[
:file_name
]
=
params
[
:file
].
original_filename
end
end
File
.
join
(
@path
,
File
.
basename
(
params
[
:file_name
])
)
File
.
join
(
@path
,
params
[
:file_name
]
)
else
else
@path
@path
end
end
...
...
app/services/files/create_dir_service.rb
View file @
0ea38dc5
...
@@ -5,5 +5,16 @@ module Files
...
@@ -5,5 +5,16 @@ module Files
def
commit
def
commit
repository
.
commit_dir
(
current_user
,
@file_path
,
@commit_message
,
@target_branch
)
repository
.
commit_dir
(
current_user
,
@file_path
,
@commit_message
,
@target_branch
)
end
end
def
validate
super
unless
@file_path
=~
Gitlab
::
Regex
.
file_path_regex
raise_error
(
'Your changes could not be committed, because the file path '
+
Gitlab
::
Regex
.
file_path_regex_message
)
end
end
end
end
end
end
app/services/files/create_service.rb
View file @
0ea38dc5
...
@@ -9,12 +9,17 @@ module Files
...
@@ -9,12 +9,17 @@ module Files
def
validate
def
validate
super
super
file_name
=
File
.
basename
(
@file_path
)
if
@file_path
=~
Gitlab
::
Regex
.
directory_traversal_regex
raise_error
(
'Your changes could not be committed, because the file name '
+
Gitlab
::
Regex
.
directory_traversal_regex_message
)
end
unless
file_name
=~
Gitlab
::
Regex
.
file_name
_regex
unless
@file_path
=~
Gitlab
::
Regex
.
file_path
_regex
raise_error
(
raise_error
(
'Your changes could not be committed, because the file name '
+
'Your changes could not be committed, because the file name '
+
Gitlab
::
Regex
.
file_
name
_regex_message
Gitlab
::
Regex
.
file_
path
_regex_message
)
)
end
end
...
...
features/project/source/browse_files.feature
View file @
0ea38dc5
...
@@ -90,6 +90,16 @@ Feature: Project Source Browse Files
...
@@ -90,6 +90,16 @@ Feature: Project Source Browse Files
Then
I am on the new file page
Then
I am on the new file page
And
I see a commit error message
And
I see a commit error message
@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
And
I edit code
And
I fill the commit message
And
I click on
"Commit changes"
Then
I am redirected to the new file with directory
And
I should see its new content
@javascript
@javascript
Scenario
:
I
can edit file
Scenario
:
I
can edit file
Given
I click on
".gitignore"
file in repo
Given
I click on
".gitignore"
file in repo
...
...
features/steps/project/source/browse_files.rb
View file @
0ea38dc5
...
@@ -78,6 +78,10 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
...
@@ -78,6 +78,10 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
fill_in
:file_name
,
with:
'Spaces Not Allowed'
fill_in
:file_name
,
with:
'Spaces Not Allowed'
end
end
step
'I fill the new file name with a new directory'
do
fill_in
:file_name
,
with:
new_file_name_with_directory
end
step
'I fill the commit message'
do
step
'I fill the commit message'
do
fill_in
:commit_message
,
with:
'Not yet a commit message.'
,
visible:
true
fill_in
:commit_message
,
with:
'Not yet a commit message.'
,
visible:
true
end
end
...
@@ -238,6 +242,11 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
...
@@ -238,6 +242,11 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
@project
.
namespace
,
@project
,
'master/'
+
new_file_name
))
@project
.
namespace
,
@project
,
'master/'
+
new_file_name
))
end
end
step
'I am redirected to the new file with directory'
do
expect
(
current_path
).
to
eq
(
namespace_project_blob_path
(
@project
.
namespace
,
@project
,
'master/'
+
new_file_name_with_directory
))
end
step
'I am redirected to the new file on new branch'
do
step
'I am redirected to the new file on new branch'
do
expect
(
current_path
).
to
eq
(
namespace_project_blob_path
(
expect
(
current_path
).
to
eq
(
namespace_project_blob_path
(
@project
.
namespace
,
@project
,
'new_branch_name/'
+
new_file_name
))
@project
.
namespace
,
@project
,
'new_branch_name/'
+
new_file_name
))
...
@@ -335,6 +344,12 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
...
@@ -335,6 +344,12 @@ class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps
'not_a_file.md'
'not_a_file.md'
end
end
# Constant value that is a valid filename with directory and
# not a filename present at root of the seed repository.
def
new_file_name_with_directory
'foo/bar/baz.txt'
end
# Constant value that is a valid directory and
# Constant value that is a valid directory and
# not a directory present at root of the seed repository.
# not a directory present at root of the seed repository.
def
new_dir_name
def
new_dir_name
...
...
lib/gitlab/regex.rb
View file @
0ea38dc5
...
@@ -51,6 +51,23 @@ module Gitlab
...
@@ -51,6 +51,23 @@ module Gitlab
"can contain only letters, digits, '_', '-' and '.'. "
"can contain only letters, digits, '_', '-' and '.'. "
end
end
def
file_path_regex
@file_path_regex
||=
/\A[a-zA-Z0-9_\-\.\/]*\z/
.
freeze
end
def
file_path_regex_message
"can contain only letters, digits, '_', '-' and '.'. Separate directories with a '/'. "
end
def
directory_traversal_regex
@directory_traversal_regex
||=
/\.{2}/
.
freeze
end
def
directory_traversal_regex_message
"cannot include directory traversal. "
end
def
archive_formats_regex
def
archive_formats_regex
# |zip|tar| tar.gz | tar.bz2 |
# |zip|tar| tar.gz | tar.bz2 |
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment