Also check blob path from source branch

Feedback:
https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/7237#note_19747244
This commit is contained in:
Lin Jen-Shin 2016-12-14 01:21:48 +08:00
parent e5acebd9b9
commit 26af4b5a61
1 changed files with 38 additions and 17 deletions

View File

@ -738,19 +738,11 @@ class Repository
message:, branch_name:,
author_email: nil, author_name: nil,
source_branch_name: nil, source_project: project)
if branch_exists?(branch_name)
# tree_entry is private
entry = raw_repository.send(:tree_entry, commit(branch_name), path)
check_tree_entry_for_dir(branch_name, path)
if entry
if entry[:type] == :blob
raise Gitlab::Git::Repository::InvalidBlobName.new(
"Directory already exists as a file")
else
raise Gitlab::Git::Repository::InvalidBlobName.new(
"Directory already exists")
end
end
if source_branch_name
source_project.repository.
check_tree_entry_for_dir(source_branch_name, path)
end
commit_file(
@ -773,11 +765,16 @@ class Repository
message:, branch_name:, update: true,
author_email: nil, author_name: nil,
source_branch_name: nil, source_project: project)
if branch_exists?(branch_name) && update == false
# tree_entry is private
if raw_repository.send(:tree_entry, commit(branch_name), path)
raise Gitlab::Git::Repository::InvalidBlobName.new(
"Filename already exists; update not allowed")
unless update
error_message = "Filename already exists; update not allowed"
if tree_entry_at(branch_name, path)
raise Gitlab::Git::Repository::InvalidBlobName.new(error_message)
end
if source_branch_name &&
source_project.repository.tree_entry_at(source_branch_name, path)
raise Gitlab::Git::Repository::InvalidBlobName.new(error_message)
end
end
@ -1140,6 +1137,30 @@ class Repository
end
end
protected
def tree_entry_at(branch_name, path)
branch_exists?(branch_name) &&
# tree_entry is private
raw_repository.send(:tree_entry, commit(branch_name), path)
end
def check_tree_entry_for_dir(branch_name, path)
return unless branch_exists?(branch_name)
entry = tree_entry_at(branch_name, path)
return unless entry
if entry[:type] == :blob
raise Gitlab::Git::Repository::InvalidBlobName.new(
"Directory already exists as a file")
else
raise Gitlab::Git::Repository::InvalidBlobName.new(
"Directory already exists")
end
end
private
def git_action(index, action)