summaryrefslogtreecommitdiff
path: root/app/models/merge_request.rb
diff options
context:
space:
mode:
authorAndrew8xx8 <avk@8xx8.ru>2013-02-20 17:15:01 +0400
committerAndrew8xx8 <avk@8xx8.ru>2013-02-20 17:49:48 +0400
commite2d94e0719cb4eed4757f4cef946b1c29ef971f0 (patch)
tree371dddf472f9909746d0a8b87f7275aa94f57bc4 /app/models/merge_request.rb
parent1b7b17d12a9f176dd305b9ec95bd50ba3f56f520 (diff)
downloadgitlab-ce-e2d94e0719cb4eed4757f4cef946b1c29ef971f0.tar.gz
State machine added for merge_status field
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r--app/models/merge_request.rb63
1 files changed, 28 insertions, 35 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 06aa9f3c9e0..05ebf44c2e0 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -53,16 +53,32 @@ class MergeRequest < ActiveRecord::Base
BROKEN_DIFF = "--broken-diff"
- UNCHECKED = 1
- CAN_BE_MERGED = 2
- CANNOT_BE_MERGED = 3
+ state_machine :merge_status, initial: :unchecked do
+ event :mark_as_unchecked do
+ transition [:can_be_merged, :cannot_be_merged] => :unchecked
+ end
+
+ event :mark_as_mergeable do
+ transition unchecked: :can_be_merged
+ end
+
+ event :mark_as_unmergeable do
+ transition unchecked: :cannot_be_merged
+ end
+
+ state :unchecked
+
+ state :can_be_merged
+
+ state :cannot_be_merged
+ end
serialize :st_commits
serialize :st_diffs
validates :source_branch, presence: true
validates :target_branch, presence: true
- validate :validate_branches
+ validate :validate_branches
scope :merged, -> { with_state(:merged) }
@@ -84,13 +100,9 @@ class MergeRequest < ActiveRecord::Base
end
end
+ # DEPRECATED: Please use human_merge_status_name instead
def human_merge_status
- merge_statuses = {
- CAN_BE_MERGED => "can_be_merged",
- CANNOT_BE_MERGED => "cannot_be_merged",
- UNCHECKED => "unchecked"
- }
- merge_statuses[self.merge_status]
+ human_merge_status_name
end
def validate_branches
@@ -104,26 +116,12 @@ class MergeRequest < ActiveRecord::Base
self.reloaded_diffs
end
- def unchecked?
- merge_status == UNCHECKED
- end
-
- def mark_as_unchecked
- self.merge_status = UNCHECKED
- self.save
- end
-
- def can_be_merged?
- merge_status == CAN_BE_MERGED
- end
-
def check_if_can_be_merged
- self.merge_status = if Gitlab::Satellite::MergeAction.new(self.author, self).can_be_merged?
- CAN_BE_MERGED
- else
- CANNOT_BE_MERGED
- end
- self.save
+ if Gitlab::Satellite::MergeAction.new(self.author, self).can_be_merged?
+ mark_as_mergeable
+ else
+ mark_as_unmergeable
+ end
end
def diffs
@@ -178,11 +176,6 @@ class MergeRequest < ActiveRecord::Base
commits.any? && opened?
end
- def mark_as_unmergable
- self.merge_status = CANNOT_BE_MERGED
- self.save
- end
-
def reloaded_commits
if opened? && unmerged_commits.any?
self.st_commits = unmerged_commits
@@ -217,7 +210,7 @@ class MergeRequest < ActiveRecord::Base
true
end
rescue
- self.mark_as_unmergable
+ mark_as_unmergeable
false
end