Skip to content

Commit ba327e6

Browse files
smcgivernfatihacet
authored andcommitted
Move resolving code to ResolveService
1 parent ac9229a commit ba327e6

File tree

5 files changed

+40
-30
lines changed

5 files changed

+40
-30
lines changed

app/controllers/projects/merge_requests_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ def conflicts
150150

151151
def resolve_conflicts
152152
begin
153-
Gitlab::Conflict::FileCollection.new(@merge_request).resolve_conflicts!(params, user: current_user)
153+
MergeRequests::ResolveService.new(project, current_user, params).execute(@merge_request)
154154

155155
head :ok
156156
rescue Gitlab::Conflict::File::MissingResolution => e

app/models/repository.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -869,6 +869,14 @@ def cherry_pick(user, commit, base_branch, cherry_pick_tree_id = nil)
869869
end
870870
end
871871

872+
def resolve_conflicts(user, branch, params)
873+
commit_with_hooks(user, branch) do
874+
committer = user_to_committer(user)
875+
876+
Rugged::Commit.create(rugged, params.merge(author: committer, committer: committer))
877+
end
878+
end
879+
872880
def check_revert_content(commit, base_branch)
873881
source_sha = find_branch(base_branch).target.sha
874882
args = [commit.id, source_sha]
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
module MergeRequests
2+
class ResolveService < MergeRequests::BaseService
3+
attr_accessor :conflicts, :rugged, :merge_index
4+
5+
def execute(merge_request)
6+
@conflicts = merge_request.conflicts
7+
@rugged = project.repository.rugged
8+
@merge_index = conflicts.merge_index
9+
10+
conflicts.files.each do |file|
11+
write_resolved_file_to_index(file, params[:sections])
12+
end
13+
14+
commit_params = {
15+
message: params[:commit_message] || conflicts.default_commit_message,
16+
parents: [conflicts.our_commit, conflicts.their_commit].map(&:oid),
17+
tree: merge_index.write_tree(rugged)
18+
}
19+
20+
project.repository.resolve_conflicts(current_user, merge_request.source_branch, commit_params)
21+
end
22+
23+
def write_resolved_file_to_index(file, resolutions)
24+
new_file = file.resolve_lines(resolutions).map(&:text).join("\n")
25+
our_path = file.our_path
26+
27+
merge_index.add(path: our_path, oid: rugged.write(new_file, :blob), mode: file.our_mode)
28+
merge_index.conflict_remove(our_path)
29+
end
30+
end
31+
end

lib/gitlab/conflict/file.rb

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,6 @@ def lines
2828
parent_file: self)
2929
end
3030

31-
def resolve!(resolution, index:, rugged:)
32-
new_file = resolve_lines(resolution).map(&:text).join("\n")
33-
34-
oid = rugged.write(new_file, :blob)
35-
index.add(path: our_path, oid: oid, mode: our_mode)
36-
index.conflict_remove(our_path)
37-
end
38-
3931
def resolve_lines(resolution)
4032
section_id = nil
4133

lib/gitlab/conflict/file_collection.rb

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,6 @@ def merge_index
2020
@merge_index ||= repository.rugged.merge_commits(our_commit, their_commit)
2121
end
2222

23-
def resolve_conflicts!(params, user:)
24-
resolutions = params[:sections]
25-
commit_message = params[:commit_message] || default_commit_message
26-
rugged = repository.rugged
27-
committer = repository.user_to_committer(user)
28-
29-
files.each do |file|
30-
file.resolve!(resolutions, index: merge_index, rugged: rugged)
31-
end
32-
33-
new_tree = merge_index.write_tree(rugged)
34-
35-
Rugged::Commit.create(rugged,
36-
author: committer,
37-
committer: committer,
38-
tree: new_tree,
39-
message: commit_message,
40-
parents: [our_commit, their_commit].map(&:oid),
41-
update_ref: Gitlab::Git::BRANCH_REF_PREFIX + merge_request.source_branch)
42-
end
43-
4423
def files
4524
@files ||= merge_index.conflicts.map do |conflict|
4625
raise ConflictSideMissing unless conflict[:theirs] && conflict[:ours]

0 commit comments

Comments
 (0)