Skip to content
Snippets Groups Projects
Commit a530e9da authored by Douwe Maan's avatar Douwe Maan
Browse files

Address review

parent 9e39b317
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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(
Loading
Loading
@@ -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 = {
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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] = ''
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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')
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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',
Loading
Loading
@@ -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',
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment