Commit a530e9da authored by Douwe Maan's avatar Douwe Maan

Address review

parent 9e39b317
...@@ -753,7 +753,7 @@ class Repository ...@@ -753,7 +753,7 @@ class Repository
author_email: nil, author_name: nil, author_email: nil, author_name: nil,
start_branch_name: nil, start_project: project) start_branch_name: nil, start_project: project)
entry = tree_entry_at(start_branch_name || branch_name, path) entry = start_project.repository.tree_entry_at(start_branch_name || branch_name, path)
if entry if entry
if entry[:type] == :blob if entry[:type] == :blob
raise Gitlab::Git::Repository::InvalidBlobName.new( raise Gitlab::Git::Repository::InvalidBlobName.new(
...@@ -865,7 +865,7 @@ class Repository ...@@ -865,7 +865,7 @@ class Repository
end end
actions.each do |options| actions.each do |options|
index.__send__(options.delete(:action), options) index.public_send(options.delete(:action), options)
end end
options = { options = {
......
...@@ -22,6 +22,12 @@ module Files ...@@ -22,6 +22,12 @@ module Files
def validate def validate
super super
params[:actions].each_with_index do |action, index| params[:actions].each_with_index do |action, index|
if ACTIONS.include?(action[:action].to_s)
action[:action] = action[:action].to_sym
else
raise_error("Unknown action type `#{action[:action]}`.")
end
unless action[:file_path].present? unless action[:file_path].present?
raise_error("You must specify a file_path.") raise_error("You must specify a file_path.")
end end
...@@ -32,12 +38,6 @@ module Files ...@@ -32,12 +38,6 @@ module Files
regex_check(action[:file_path]) regex_check(action[:file_path])
regex_check(action[:previous_path]) if action[:previous_path] regex_check(action[:previous_path]) if action[:previous_path]
if ACTIONS.include?(action[:action].to_s)
action[:action] = action[:action].to_sym
else
raise_error("Unknown action type `#{action[:action]}`.")
end
if project.empty_repo? && action[:action] != :create if project.empty_repo? && action[:action] != :create
raise_error("No files to #{action[:action]}.") raise_error("No files to #{action[:action]}.")
end end
......
...@@ -10,20 +10,20 @@ module Gitlab ...@@ -10,20 +10,20 @@ module Gitlab
@raw_index = repository.rugged.index @raw_index = repository.rugged.index
end end
delegate :read_tree, to: :raw_index delegate :read_tree, :get, to: :raw_index
def write_tree def write_tree
raw_index.write_tree(repository.rugged) raw_index.write_tree(repository.rugged)
end end
def get(*args) def dir_exists?(path)
raw_index.get(*args) raw_index.find { |entry| entry[:path].start_with?("#{path}/") }
end end
def create(options) def create(options)
normalize_options!(options) options = normalize_options(options)
file_entry = raw_index.get(options[:file_path]) file_entry = get(options[:file_path])
if file_entry if file_entry
raise Gitlab::Git::Repository::InvalidBlobName.new("Filename already exists") raise Gitlab::Git::Repository::InvalidBlobName.new("Filename already exists")
end end
...@@ -32,13 +32,17 @@ module Gitlab ...@@ -32,13 +32,17 @@ module Gitlab
end end
def create_dir(options) def create_dir(options)
normalize_options!(options) options = normalize_options(options)
file_entry = raw_index.get(options[:file_path]) file_entry = get(options[:file_path])
if file_entry if file_entry
raise Gitlab::Git::Repository::InvalidBlobName.new("Directory already exists as a file") raise Gitlab::Git::Repository::InvalidBlobName.new("Directory already exists as a file")
end end
if dir_exists?(options[:file_path])
raise Gitlab::Git::Repository::InvalidBlobName.new("Directory already exists")
end
options = options.dup options = options.dup
options[:file_path] += '/.gitkeep' options[:file_path] += '/.gitkeep'
options[:content] = '' options[:content] = ''
...@@ -47,9 +51,9 @@ module Gitlab ...@@ -47,9 +51,9 @@ module Gitlab
end end
def update(options) def update(options)
normalize_options!(options) options = normalize_options(options)
file_entry = raw_index.get(options[:file_path]) file_entry = get(options[:file_path])
unless file_entry unless file_entry
raise Gitlab::Git::Repository::InvalidBlobName.new("File doesn't exist") raise Gitlab::Git::Repository::InvalidBlobName.new("File doesn't exist")
end end
...@@ -58,9 +62,9 @@ module Gitlab ...@@ -58,9 +62,9 @@ module Gitlab
end end
def move(options) def move(options)
normalize_options!(options) options = normalize_options(options)
file_entry = raw_index.get(options[:previous_path]) file_entry = get(options[:previous_path])
unless file_entry unless file_entry
raise Gitlab::Git::Repository::InvalidBlobName.new("File doesn't exist") raise Gitlab::Git::Repository::InvalidBlobName.new("File doesn't exist")
end end
...@@ -71,9 +75,9 @@ module Gitlab ...@@ -71,9 +75,9 @@ module Gitlab
end end
def delete(options) def delete(options)
normalize_options!(options) options = normalize_options(options)
file_entry = raw_index.get(options[:file_path]) file_entry = get(options[:file_path])
unless file_entry unless file_entry
raise Gitlab::Git::Repository::InvalidBlobName.new("File doesn't exist") raise Gitlab::Git::Repository::InvalidBlobName.new("File doesn't exist")
end end
...@@ -83,13 +87,15 @@ module Gitlab ...@@ -83,13 +87,15 @@ module Gitlab
private private
def normalize_options!(options) def normalize_options(options)
options = options.dup
options[:file_path] = normalize_path(options[:file_path]) if options[:file_path] options[:file_path] = normalize_path(options[:file_path]) if options[:file_path]
options[:previous_path] = normalize_path(options[:previous_path]) if options[:previous_path] options[:previous_path] = normalize_path(options[:previous_path]) if options[:previous_path]
options
end end
def normalize_path(path) def normalize_path(path)
pathname = Gitlab::Git::PathHelper.normalize_path(path) pathname = Gitlab::Git::PathHelper.normalize_path(path.dup)
if pathname.each_filename.include?('..') if pathname.each_filename.include?('..')
raise Gitlab::Git::Repository::InvalidBlobName.new('Invalid path') raise Gitlab::Git::Repository::InvalidBlobName.new('Invalid path')
......
...@@ -92,6 +92,16 @@ describe Gitlab::Git::Index, seed_helper: true do ...@@ -92,6 +92,16 @@ describe Gitlab::Git::Index, seed_helper: true do
expect { index.create_dir(options) }.to raise_error('Directory already exists as a file') expect { index.create_dir(options) }.to raise_error('Directory already exists as a file')
end end
end end
context 'when a directory at that path exists' do
before do
options[:file_path] = 'files/executables'
end
it 'raises an error' do
expect { index.create_dir(options) }.to raise_error('Directory already exists')
end
end
end end
describe '#update' do describe '#update' do
......
...@@ -291,7 +291,7 @@ describe Repository, models: true do ...@@ -291,7 +291,7 @@ describe Repository, models: true do
end end
end end
describe "#commit_dir" do describe "#create_dir" do
it "commits a change that creates a new directory" do it "commits a change that creates a new directory" do
expect do expect do
repository.create_dir(user, 'newdir', repository.create_dir(user, 'newdir',
...@@ -424,7 +424,7 @@ describe Repository, models: true do ...@@ -424,7 +424,7 @@ describe Repository, models: true do
end end
end end
describe "#remove_file" do describe "#delete_file" do
it 'removes file successfully' do it 'removes file successfully' do
expect do expect do
repository.delete_file(user, 'README', repository.delete_file(user, 'README',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment