summaryrefslogtreecommitdiff
path: root/app/models/merge_request.rb
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-08-11 10:28:42 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-08-11 10:28:42 +0200
commit9f10943c1a76576ac40d96189a28a4d6123a75d8 (patch)
tree88955d92ebc98a4165d66a36cb8a2cf92709981a /app/models/merge_request.rb
parent84727fba96c6794874e1f94d581408b70e1842a7 (diff)
downloadgitlab-ce-9f10943c1a76576ac40d96189a28a4d6123a75d8.tar.gz
Revert "Merge branch 'drop-satellites'"
This reverts commit 957e849f41d96fa9778fcdd06792d2f0274b29ab, reversing changes made to 6b9dbe9f5a175a8162abf296367f561bab3eea1a. Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r--app/models/merge_request.rb56
1 files changed, 24 insertions, 32 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 631a2d887cc..1ef76d16700 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -41,6 +41,8 @@ class MergeRequest < ActiveRecord::Base
delegate :commits, :diffs, :last_commit, :last_commit_short_sha, to: :merge_request_diff, prefix: nil
+ attr_accessor :should_remove_source_branch
+
# When this attribute is true some MR validation is ignored
# It allows us to close or modify broken merge requests
attr_accessor :allow_broken
@@ -55,7 +57,7 @@ class MergeRequest < ActiveRecord::Base
transition [:reopened, :opened] => :closed
end
- event :mark_as_merged do
+ event :merge do
transition [:reopened, :opened, :locked] => :merged
end
@@ -204,7 +206,11 @@ class MergeRequest < ActiveRecord::Base
def check_if_can_be_merged
can_be_merged =
- project.repository.can_be_merged?(source_sha, target_branch)
+ if for_fork?
+ Gitlab::Satellite::MergeAction.new(self.author, self).can_be_merged?
+ else
+ project.repository.can_be_merged?(source_branch, target_branch)
+ end
if can_be_merged
mark_as_mergeable
@@ -221,6 +227,18 @@ class MergeRequest < ActiveRecord::Base
self.target_project.events.where(target_id: self.id, target_type: "MergeRequest", action: Event::CLOSED).last
end
+ def automerge!(current_user, commit_message = nil)
+ return unless automergeable?
+
+ MergeRequests::AutoMergeService.
+ new(target_project, current_user).
+ execute(self, commit_message)
+ end
+
+ def remove_source_branch?
+ self.should_remove_source_branch && !self.source_project.root_ref?(self.source_branch) && !self.for_fork?
+ end
+
def open?
opened? || reopened?
end
@@ -229,11 +247,11 @@ class MergeRequest < ActiveRecord::Base
title =~ /\A\[?WIP\]?:? /i
end
- def mergeable?
+ def automergeable?
open? && !work_in_progress? && can_be_merged?
end
- def gitlab_merge_status
+ def automerge_status
if work_in_progress?
"work_in_progress"
else
@@ -260,14 +278,14 @@ class MergeRequest < ActiveRecord::Base
#
# see "git diff"
def to_diff(current_user)
- target_project.repository.diff_text(target_branch, source_sha)
+ Gitlab::Satellite::MergeAction.new(current_user, self).diff_in_satellite
end
# Returns the commit as a series of email patches.
#
# see "git format-patch"
def to_patch(current_user)
- target_project.repository.format_patch(target_branch, source_sha)
+ Gitlab::Satellite::MergeAction.new(current_user, self).format_patch
end
def hook_attrs
@@ -418,30 +436,4 @@ class MergeRequest < ActiveRecord::Base
"Open"
end
end
-
- def target_sha
- @target_sha ||= target_project.
- repository.commit(target_branch).sha
- end
-
- def source_sha
- commits.first.sha
- 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
-
- def in_locked_state
- begin
- lock_mr
- yield
- ensure
- unlock_mr if locked?
- end
- end
end