Commit a530e9da authored by Douwe Maan's avatar Douwe Maan

Address review

parent 9e39b317
......@@ -753,7 +753,7 @@ class Repository
author_email: nil, author_name: nil,
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[:type] == :blob
raise Gitlab::Git::Repository::InvalidBlobName.new(
......@@ -865,7 +865,7 @@ class Repository
end
actions.each do |options|
index.__send__(options.delete(:action), options)
index.public_send(options.delete(:action), options)
end
options = {
......
......@@ -22,6 +22,12 @@ module Files
def validate
super
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?
raise_error("You must specify a file_path.")
end
......@@ -32,12 +38,6 @@ module Files
regex_check(action[:file_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
raise_error("No files to #{action[:action]}.")
end
......
......@@ -10,20 +10,20 @@ module Gitlab
@raw_index = repository.rugged.index
end
delegate :read_tree, to: :raw_index
delegate :read_tree, :get, to: :raw_index
def write_tree
raw_index.write_tree(repository.rugged)
end
def get(*args)
raw_index.get(*args)
def dir_exists?(path)
raw_index.find { |entry| entry[:path].start_with?("#{path}/") }
end
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
raise Gitlab::Git::Repository::InvalidBlobName.new("Filename already exists")
end
......@@ -32,13 +32,17 @@ module Gitlab
end
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
raise Gitlab::Git::Repository::InvalidBlobName.new("Directory already exists as a file")
end
if dir_exists?(options[:file_path])
raise Gitlab::Git::Repository::InvalidBlobName.new("Directory already exists")
end
options = options.dup
options[:file_path] += '/.gitkeep'
options[:content] = ''
......@@ -47,9 +51,9 @@ module Gitlab
end
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
raise Gitlab::Git::Repository::InvalidBlobName.new("File doesn't exist")
end
......@@ -58,9 +62,9 @@ module Gitlab
end
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
raise Gitlab::Git::Repository::InvalidBlobName.new("File doesn't exist")
end
......@@ -71,9 +75,9 @@ module Gitlab
end
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
raise Gitlab::Git::Repository::InvalidBlobName.new("File doesn't exist")
end
......@@ -83,13 +87,15 @@ module Gitlab
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[:previous_path] = normalize_path(options[:previous_path]) if options[:previous_path]
options
end
def normalize_path(path)
pathname = Gitlab::Git::PathHelper.normalize_path(path)
pathname = Gitlab::Git::PathHelper.normalize_path(path.dup)
if pathname.each_filename.include?('..')
raise Gitlab::Git::Repository::InvalidBlobName.new('Invalid path')
......
......@@ -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')
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
describe '#update' do
......
......@@ -291,7 +291,7 @@ describe Repository, models: true do
end
end
describe "#commit_dir" do
describe "#create_dir" do
it "commits a change that creates a new directory" do
expect do
repository.create_dir(user, 'newdir',
......@@ -424,7 +424,7 @@ describe Repository, models: true do
end
end
describe "#remove_file" do
describe "#delete_file" do
it 'removes file successfully' do
expect do
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