From eddee5fe8770d79c80fdb0d91731f866c14c9b8d Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin <godfat@godfat.org> Date: Tue, 15 Nov 2016 06:01:54 +0800 Subject: [PATCH] Make sure we create target branch for cherry/revert --- app/models/repository.rb | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index 5e7bb309967..0f3e98db420 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -988,7 +988,8 @@ class Repository end def revert(user, commit, base_branch, revert_tree_id = nil) - source_sha = find_branch(base_branch).dereferenced_target.sha + source_sha = raw_ensure_branch(base_branch, source_commit: commit). + first.dereferenced_target.sha revert_tree_id ||= check_revert_content(commit, base_branch) return false unless revert_tree_id @@ -1008,7 +1009,8 @@ class Repository end def cherry_pick(user, commit, base_branch, cherry_pick_tree_id = nil) - source_sha = find_branch(base_branch).dereferenced_target.sha + source_sha = raw_ensure_branch(base_branch, source_commit: commit). + first.dereferenced_target.sha cherry_pick_tree_id ||= check_cherry_pick_content(commit, base_branch) return false unless cherry_pick_tree_id @@ -1118,7 +1120,8 @@ class Repository update_autocrlf_option ref = Gitlab::Git::BRANCH_REF_PREFIX + branch - target_branch, new_branch_added = raw_ensure_branch(branch, source_branch) + target_branch, new_branch_added = + raw_ensure_branch(branch, source_branch: source_branch) was_empty = empty? # Make commit @@ -1200,19 +1203,19 @@ class Repository Gitlab::Metrics.add_event(event, { path: path_with_namespace }.merge(tags)) end - def raw_ensure_branch(branch_name, source_branch) + def raw_ensure_branch(branch_name, source_commit: nil, source_branch: nil) old_branch = find_branch(branch_name) if old_branch [old_branch, false] - elsif source_branch + elsif source_commit || source_branch oldrev = Gitlab::Git::BLANK_SHA ref = Gitlab::Git::BRANCH_REF_PREFIX + branch_name - target = commit(source_branch).try(:id) + target = (source_commit || commit(source_branch)).try(:sha) unless target raise CommitError.new( - "Cannot find branch #{branch_name} nor #{source_branch}") + "Cannot find branch #{branch_name} nor #{source_commit.try(:sha) ||source_branch}") end update_ref!(ref, target, oldrev) -- GitLab