summaryrefslogtreecommitdiff
path: root/app/services/merge_requests
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2016-08-29 12:43:09 +0100
committerSean McGivern <sean@gitlab.com>2016-08-30 11:56:11 +0100
commit1bda1e62def69bc0525a558f92acf182dc05fe8d (patch)
tree1ed1bd6c5330515146e81798be8ddaf047be5b06 /app/services/merge_requests
parent2db570e92cdff257fc45cfac7e453a4ddb1bfa81 (diff)
downloadgitlab-ce-1bda1e62def69bc0525a558f92acf182dc05fe8d.tar.gz
Forks may not be up-to-date with the target project, and so might not contain one of the parent refs in their repo. Fetch this if it isn't present.
Diffstat (limited to 'app/services/merge_requests')
-rw-r--r--app/services/merge_requests/resolve_service.rb16
1 files changed, 15 insertions, 1 deletions
diff --git a/app/services/merge_requests/resolve_service.rb b/app/services/merge_requests/resolve_service.rb
index adc71b0c2bc..bd8b9f8cfd4 100644
--- a/app/services/merge_requests/resolve_service.rb
+++ b/app/services/merge_requests/resolve_service.rb
@@ -1,11 +1,14 @@
module MergeRequests
class ResolveService < MergeRequests::BaseService
- attr_accessor :conflicts, :rugged, :merge_index
+ attr_accessor :conflicts, :rugged, :merge_index, :merge_request
def execute(merge_request)
@conflicts = merge_request.conflicts
@rugged = project.repository.rugged
@merge_index = conflicts.merge_index
+ @merge_request = merge_request
+
+ fetch_their_commit!
conflicts.files.each do |file|
write_resolved_file_to_index(file, params[:sections])
@@ -27,5 +30,16 @@ module MergeRequests
merge_index.add(path: our_path, oid: rugged.write(new_file, :blob), mode: file.our_mode)
merge_index.conflict_remove(our_path)
end
+
+ # If their commit (in the target project) doesn't exist in the source project, it
+ # can't be a parent for the merge commit we're about to create. If that's the case,
+ # fetch the target branch ref into the source project so the commit exists in both.
+ #
+ def fetch_their_commit!
+ return if rugged.include?(conflicts.their_commit.oid)
+
+ remote = rugged.remotes.create_anonymous(merge_request.target_project.repository.path_to_repo)
+ remote.fetch(merge_request.target_branch)
+ end
end
end