summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2016-08-04 14:20:04 +0100
committerFatih Acet <acetfatih@gmail.com>2016-08-12 23:24:48 +0300
commitba327e69ec4b2214f12f577cd86a37c65ea2f3e9 (patch)
tree8b869b02caae808510156aa4936dfe1123b61db9
parentac9229a31be8e672efdcc63b702a2039ae66ad46 (diff)
downloadgitlab-ce-ba327e69ec4b2214f12f577cd86a37c65ea2f3e9.tar.gz
Move resolving code to ResolveService
-rw-r--r--app/controllers/projects/merge_requests_controller.rb2
-rw-r--r--app/models/repository.rb8
-rw-r--r--app/services/merge_requests/resolve_service.rb31
-rw-r--r--lib/gitlab/conflict/file.rb8
-rw-r--r--lib/gitlab/conflict/file_collection.rb21
5 files changed, 40 insertions, 30 deletions
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 040dceff142..27d54f6b46f 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -150,7 +150,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
def resolve_conflicts
begin
- Gitlab::Conflict::FileCollection.new(@merge_request).resolve_conflicts!(params, user: current_user)
+ MergeRequests::ResolveService.new(project, current_user, params).execute(@merge_request)
head :ok
rescue Gitlab::Conflict::File::MissingResolution => e
diff --git a/app/models/repository.rb b/app/models/repository.rb
index e56bac509a4..01b02ccc0dc 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -869,6 +869,14 @@ class Repository
end
end
+ def resolve_conflicts(user, branch, params)
+ commit_with_hooks(user, branch) do
+ committer = user_to_committer(user)
+
+ Rugged::Commit.create(rugged, params.merge(author: committer, committer: committer))
+ end
+ end
+
def check_revert_content(commit, base_branch)
source_sha = find_branch(base_branch).target.sha
args = [commit.id, source_sha]
diff --git a/app/services/merge_requests/resolve_service.rb b/app/services/merge_requests/resolve_service.rb
new file mode 100644
index 00000000000..adc71b0c2bc
--- /dev/null
+++ b/app/services/merge_requests/resolve_service.rb
@@ -0,0 +1,31 @@
+module MergeRequests
+ class ResolveService < MergeRequests::BaseService
+ attr_accessor :conflicts, :rugged, :merge_index
+
+ def execute(merge_request)
+ @conflicts = merge_request.conflicts
+ @rugged = project.repository.rugged
+ @merge_index = conflicts.merge_index
+
+ conflicts.files.each do |file|
+ write_resolved_file_to_index(file, params[:sections])
+ end
+
+ commit_params = {
+ message: params[:commit_message] || conflicts.default_commit_message,
+ parents: [conflicts.our_commit, conflicts.their_commit].map(&:oid),
+ tree: merge_index.write_tree(rugged)
+ }
+
+ project.repository.resolve_conflicts(current_user, merge_request.source_branch, commit_params)
+ end
+
+ def write_resolved_file_to_index(file, resolutions)
+ new_file = file.resolve_lines(resolutions).map(&:text).join("\n")
+ our_path = file.our_path
+
+ merge_index.add(path: our_path, oid: rugged.write(new_file, :blob), mode: file.our_mode)
+ merge_index.conflict_remove(our_path)
+ end
+ end
+end
diff --git a/lib/gitlab/conflict/file.rb b/lib/gitlab/conflict/file.rb
index 6284b0dd377..3560fae5b09 100644
--- a/lib/gitlab/conflict/file.rb
+++ b/lib/gitlab/conflict/file.rb
@@ -28,14 +28,6 @@ module Gitlab
parent_file: self)
end
- def resolve!(resolution, index:, rugged:)
- new_file = resolve_lines(resolution).map(&:text).join("\n")
-
- oid = rugged.write(new_file, :blob)
- index.add(path: our_path, oid: oid, mode: our_mode)
- index.conflict_remove(our_path)
- end
-
def resolve_lines(resolution)
section_id = nil
diff --git a/lib/gitlab/conflict/file_collection.rb b/lib/gitlab/conflict/file_collection.rb
index 04a75f9edc3..e8157fb9e91 100644
--- a/lib/gitlab/conflict/file_collection.rb
+++ b/lib/gitlab/conflict/file_collection.rb
@@ -20,27 +20,6 @@ module Gitlab
@merge_index ||= repository.rugged.merge_commits(our_commit, their_commit)
end
- def resolve_conflicts!(params, user:)
- resolutions = params[:sections]
- commit_message = params[:commit_message] || default_commit_message
- rugged = repository.rugged
- committer = repository.user_to_committer(user)
-
- files.each do |file|
- file.resolve!(resolutions, index: merge_index, rugged: rugged)
- end
-
- new_tree = merge_index.write_tree(rugged)
-
- Rugged::Commit.create(rugged,
- author: committer,
- committer: committer,
- tree: new_tree,
- message: commit_message,
- parents: [our_commit, their_commit].map(&:oid),
- update_ref: Gitlab::Git::BRANCH_REF_PREFIX + merge_request.source_branch)
- end
-
def files
@files ||= merge_index.conflicts.map do |conflict|
raise ConflictSideMissing unless conflict[:theirs] && conflict[:ours]