Refactor compare and fetch logic
This commit is contained in:
parent
cb6f34e367
commit
26f5d6047d
|
@ -13,13 +13,8 @@ class Projects::CompareController < Projects::ApplicationController
|
||||||
base_ref = Addressable::URI.unescape(params[:from])
|
base_ref = Addressable::URI.unescape(params[:from])
|
||||||
@ref = head_ref = Addressable::URI.unescape(params[:to])
|
@ref = head_ref = Addressable::URI.unescape(params[:to])
|
||||||
|
|
||||||
compare_result = CompareService.new.execute(
|
compare_result = CompareService.new.
|
||||||
current_user,
|
execute(@project, head_ref, @project, base_ref)
|
||||||
@project,
|
|
||||||
head_ref,
|
|
||||||
@project,
|
|
||||||
base_ref
|
|
||||||
)
|
|
||||||
|
|
||||||
@commits = compare_result.commits
|
@commits = compare_result.commits
|
||||||
@diffs = compare_result.diffs
|
@diffs = compare_result.diffs
|
||||||
|
|
|
@ -149,8 +149,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
|
||||||
return access_denied! unless @merge_request.can_be_merged_by?(current_user)
|
return access_denied! unless @merge_request.can_be_merged_by?(current_user)
|
||||||
|
|
||||||
if @merge_request.automergeable?
|
if @merge_request.automergeable?
|
||||||
#AutoMergeWorker.perform_async(@merge_request.id, current_user.id, params)
|
AutoMergeWorker.perform_async(@merge_request.id, current_user.id, params)
|
||||||
@merge_request.automerge!(current_user, params[:commit_message])
|
|
||||||
@status = true
|
@status = true
|
||||||
else
|
else
|
||||||
@status = false
|
@status = false
|
||||||
|
|
|
@ -437,4 +437,12 @@ class MergeRequest < ActiveRecord::Base
|
||||||
def source_sha
|
def source_sha
|
||||||
commits.first.sha
|
commits.first.sha
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def fetch_ref
|
||||||
|
target_project.repository.fetch_ref(
|
||||||
|
source_project.repository.path_to_repo,
|
||||||
|
"refs/heads/#{source_branch}",
|
||||||
|
"refs/merge-requests/#{id}/head"
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -162,20 +162,18 @@ class MergeRequestDiff < ActiveRecord::Base
|
||||||
def compare_result
|
def compare_result
|
||||||
@compare_result ||=
|
@compare_result ||=
|
||||||
begin
|
begin
|
||||||
|
# Update ref if merge request is from fork
|
||||||
|
merge_request.fetch_ref if merge_request.for_fork?
|
||||||
|
|
||||||
|
# Get latest sha of branch from source project
|
||||||
source_sha = merge_request.source_project.commit(source_branch).sha
|
source_sha = merge_request.source_project.commit(source_branch).sha
|
||||||
|
|
||||||
merge_request.target_project.repository.fetch_ref(
|
Gitlab::CompareResult.new(
|
||||||
merge_request.source_project.repository.path_to_repo,
|
Gitlab::Git::Compare.new(
|
||||||
"refs/heads/#{merge_request.source_branch}",
|
merge_request.target_project.repository.raw_repository,
|
||||||
"refs/merge-requests/#{merge_request.id}/head"
|
merge_request.target_branch,
|
||||||
)
|
source_sha,
|
||||||
|
)
|
||||||
CompareService.new.execute(
|
|
||||||
merge_request.author,
|
|
||||||
merge_request.target_project,
|
|
||||||
source_sha,
|
|
||||||
merge_request.target_project,
|
|
||||||
merge_request.target_branch,
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -428,6 +428,8 @@ class Repository
|
||||||
|
|
||||||
if our_commit && their_commit
|
if our_commit && their_commit
|
||||||
!rugged.merge_commits(our_commit, their_commit).conflicts?
|
!rugged.merge_commits(our_commit, their_commit).conflicts?
|
||||||
|
else
|
||||||
|
false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -3,33 +3,26 @@ require 'securerandom'
|
||||||
# Compare 2 branches for one repo or between repositories
|
# Compare 2 branches for one repo or between repositories
|
||||||
# and return Gitlab::CompareResult object that responds to commits and diffs
|
# and return Gitlab::CompareResult object that responds to commits and diffs
|
||||||
class CompareService
|
class CompareService
|
||||||
def execute(current_user, source_project, source_branch, target_project, target_branch)
|
def execute(source_project, source_branch, target_project, target_branch)
|
||||||
# Try to compare branches to get commits list and diffs
|
source_sha = source_project.commit(source_branch).sha
|
||||||
if target_project == source_project
|
|
||||||
Gitlab::CompareResult.new(
|
# If compare with other project we need to fetch ref first
|
||||||
Gitlab::Git::Compare.new(
|
unless target_project == source_project
|
||||||
target_project.repository.raw_repository,
|
|
||||||
target_branch,
|
|
||||||
source_branch,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else
|
|
||||||
random_string = SecureRandom.hex
|
random_string = SecureRandom.hex
|
||||||
|
|
||||||
target_project.repository.fetch_ref(
|
target_project.repository.fetch_ref(
|
||||||
source_project.repository.path_to_repo,
|
source_project.repository.path_to_repo,
|
||||||
"refs/heads/#{source_branch}",
|
"refs/heads/#{source_branch}",
|
||||||
"refs/tmp/#{random_string}/head"
|
"refs/tmp/#{random_string}/head"
|
||||||
)
|
)
|
||||||
|
|
||||||
source_sha = source_project.commit(source_branch).sha
|
|
||||||
|
|
||||||
Gitlab::CompareResult.new(
|
|
||||||
Gitlab::Git::Compare.new(
|
|
||||||
target_project.repository.raw_repository,
|
|
||||||
target_branch,
|
|
||||||
source_sha,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Gitlab::CompareResult.new(
|
||||||
|
Gitlab::Git::Compare.new(
|
||||||
|
target_project.repository.raw_repository,
|
||||||
|
target_branch,
|
||||||
|
source_sha,
|
||||||
|
)
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,6 @@ module MergeRequests
|
||||||
end
|
end
|
||||||
|
|
||||||
compare_result = CompareService.new.execute(
|
compare_result = CompareService.new.execute(
|
||||||
current_user,
|
|
||||||
merge_request.source_project,
|
merge_request.source_project,
|
||||||
merge_request.source_branch,
|
merge_request.source_branch,
|
||||||
merge_request.target_project,
|
merge_request.target_project,
|
||||||
|
|
|
@ -9,15 +9,6 @@ module MergeRequests
|
||||||
merge_request.author = current_user
|
merge_request.author = current_user
|
||||||
|
|
||||||
if merge_request.save
|
if merge_request.save
|
||||||
# Fetch fork branch into hidden ref of target repository
|
|
||||||
if merge_request.for_fork?
|
|
||||||
merge_request.target_project.repository.fetch_ref(
|
|
||||||
merge_request.source_project.repository.path_to_repo,
|
|
||||||
"refs/heads/#{merge_request.source_branch}",
|
|
||||||
"refs/merge-requests/#{merge_request.id}/head"
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
merge_request.update_attributes(label_ids: label_params)
|
merge_request.update_attributes(label_ids: label_params)
|
||||||
event_service.open_mr(merge_request, current_user)
|
event_service.open_mr(merge_request, current_user)
|
||||||
notification_service.new_merge_request(merge_request, current_user)
|
notification_service.new_merge_request(merge_request, current_user)
|
||||||
|
|
Loading…
Reference in New Issue