Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorAndrew8xx8 <avk@8xx8.ru>2013-02-18 12:40:56 +0400
committerAndrew8xx8 <avk@8xx8.ru>2013-02-18 14:43:50 +0400
commitb45e9aefd3207c00f9d83a0cbfcca457c9562a59 (patch)
tree48a2707686d2ebf58aa5fe3331562615e2911228 /app
parentf97296597caf34bb66a3e28a7419665757608795 (diff)
Merge Request uses StateMachine now
Diffstat (limited to 'app')
-rw-r--r--app/contexts/merge_requests_load_context.rb2
-rw-r--r--app/controllers/merge_requests_controller.rb2
-rw-r--r--app/helpers/merge_requests_helper.rb2
-rw-r--r--app/models/merge_request.rb54
-rw-r--r--app/observers/merge_request_observer.rb19
-rw-r--r--app/views/merge_requests/show/_mr_accept.html.haml2
-rw-r--r--app/views/merge_requests/show/_mr_box.html.haml6
-rw-r--r--app/views/merge_requests/show/_mr_ci.html.haml2
-rw-r--r--app/views/merge_requests/show/_mr_title.html.haml2
-rw-r--r--app/views/milestones/show.html.haml2
10 files changed, 54 insertions, 39 deletions
diff --git a/app/contexts/merge_requests_load_context.rb b/app/contexts/merge_requests_load_context.rb
index 4ec66cd9b78..683f4c83e77 100644
--- a/app/contexts/merge_requests_load_context.rb
+++ b/app/contexts/merge_requests_load_context.rb
@@ -14,7 +14,7 @@ class MergeRequestsLoadContext < BaseContext
end
merge_requests = merge_requests.page(params[:page]).per(20)
- merge_requests = merge_requests.includes(:author, :project).order("closed, created_at desc")
+ merge_requests = merge_requests.includes(:author, :project).order("state, created_at desc")
# Filter by specific assignee_id (or lack thereof)?
if params[:assignee_id].present?
diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index c1cf66d5656..bf6652726d2 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -80,7 +80,7 @@ class MergeRequestsController < ProjectResourceController
def automerge
return access_denied! unless can?(current_user, :accept_mr, @project)
- if @merge_request.open? && @merge_request.can_be_merged?
+ if @merge_request.opened? && @merge_request.can_be_merged?
@merge_request.should_remove_source_branch = params[:should_remove_source_branch]
@merge_request.automerge!(current_user)
@status = true
diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb
index ca0a89c3749..155d03d1147 100644
--- a/app/helpers/merge_requests_helper.rb
+++ b/app/helpers/merge_requests_helper.rb
@@ -12,7 +12,7 @@ module MergeRequestsHelper
def mr_css_classes mr
classes = "merge_request"
- classes << " closed" if mr.closed
+ classes << " closed" if mr.closed?
classes << " merged" if mr.merged?
classes
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index cf4f75aaf41..67f3fb5162a 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -9,15 +9,14 @@
# author_id :integer
# assignee_id :integer
# title :string(255)
-# closed :boolean default(FALSE), not null
+# state :string(255) not null
# created_at :datetime not null
# updated_at :datetime not null
# st_commits :text(2147483647)
# st_diffs :text(2147483647)
-# merged :boolean default(FALSE), not null
# merge_status :integer default(1), not null
-# milestone_id :integer
#
+# milestone_id :integer
require Rails.root.join("app/models/commit")
require Rails.root.join("lib/static_model")
@@ -25,11 +24,33 @@ require Rails.root.join("lib/static_model")
class MergeRequest < ActiveRecord::Base
include Issuable
- attr_accessible :title, :assignee_id, :closed, :target_branch, :source_branch, :milestone_id,
+ attr_accessible :title, :assignee_id, :target_branch, :source_branch, :milestone_id,
:author_id_of_changes
attr_accessor :should_remove_source_branch
+ state_machine :state, :initial => :opened do
+ event :close do
+ transition [:reopened, :opened] => :closed
+ end
+
+ event :merge do
+ transition [:reopened, :opened] => :merged
+ end
+
+ event :reopen do
+ transition :closed => :reopened
+ end
+
+ state :opened
+
+ state :reopened
+
+ state :closed
+
+ state :merged
+ end
+
BROKEN_DIFF = "--broken-diff"
UNCHECKED = 1
@@ -43,6 +64,8 @@ class MergeRequest < ActiveRecord::Base
validates :target_branch, presence: true
validate :validate_branches
+ scope :merged, -> { with_state(:merged) }
+
def self.find_all_by_branch(branch_name)
where("source_branch LIKE :branch OR target_branch LIKE :branch", branch: branch_name)
end
@@ -98,7 +121,7 @@ class MergeRequest < ActiveRecord::Base
end
def reloaded_diffs
- if open? && unmerged_diffs.any?
+ if opened? && unmerged_diffs.any?
self.st_diffs = unmerged_diffs
self.save
end
@@ -128,10 +151,6 @@ class MergeRequest < ActiveRecord::Base
commits.first
end
- def merged?
- merged && merge_event
- end
-
def merge_event
self.project.events.where(target_id: self.id, target_type: "MergeRequest", action: Event::MERGED).last
end
@@ -146,17 +165,7 @@ class MergeRequest < ActiveRecord::Base
def probably_merged?
unmerged_commits.empty? &&
- commits.any? && open?
- end
-
- def open?
- !closed
- end
-
- def mark_as_merged!
- self.merged = true
- self.closed = true
- save
+ commits.any? && opened?
end
def mark_as_unmergable
@@ -165,7 +174,7 @@ class MergeRequest < ActiveRecord::Base
end
def reloaded_commits
- if open? && unmerged_commits.any?
+ if opened? && unmerged_commits.any?
self.st_commits = unmerged_commits
save
end
@@ -181,7 +190,8 @@ class MergeRequest < ActiveRecord::Base
end
def merge!(user_id)
- self.mark_as_merged!
+ self.merge
+
Event.create(
project: self.project,
action: Event::MERGED,
diff --git a/app/observers/merge_request_observer.rb b/app/observers/merge_request_observer.rb
index 6d3c2bdd186..d89e7734c1a 100644
--- a/app/observers/merge_request_observer.rb
+++ b/app/observers/merge_request_observer.rb
@@ -7,15 +7,20 @@ class MergeRequestObserver < ActiveRecord::Observer
end
end
- def after_update(merge_request)
+ def after_close(merge_request, transition)
send_reassigned_email(merge_request) if merge_request.is_being_reassigned?
- status = nil
- status = 'closed' if merge_request.is_being_closed?
- status = 'reopened' if merge_request.is_being_reopened?
- if status
- Note.create_status_change_note(merge_request, current_user, status)
- end
+ Note.create_status_change_note(merge_request, current_user, merge_request.state)
+ end
+
+ def after_reopen(merge_request, transition)
+ send_reassigned_email(merge_request) if merge_request.is_being_reassigned?
+
+ Note.create_status_change_note(merge_request, current_user, merge_request.state)
+ end
+
+ def after_update(merge_request)
+ send_reassigned_email(merge_request) if merge_request.is_being_reassigned?
end
protected
diff --git a/app/views/merge_requests/show/_mr_accept.html.haml b/app/views/merge_requests/show/_mr_accept.html.haml
index c2c04b863e7..64f25a5118c 100644
--- a/app/views/merge_requests/show/_mr_accept.html.haml
+++ b/app/views/merge_requests/show/_mr_accept.html.haml
@@ -3,7 +3,7 @@
%strong Only masters can accept MR
-- if @merge_request.open? && @commits.any? && can?(current_user, :accept_mr, @project)
+- if @merge_request.opened? && @commits.any? && can?(current_user, :accept_mr, @project)
.automerge_widget.can_be_merged{style: "display:none"}
.alert.alert-success
%span
diff --git a/app/views/merge_requests/show/_mr_box.html.haml b/app/views/merge_requests/show/_mr_box.html.haml
index 644d7fcc58e..fdc61a97924 100644
--- a/app/views/merge_requests/show/_mr_box.html.haml
+++ b/app/views/merge_requests/show/_mr_box.html.haml
@@ -1,11 +1,11 @@
.ui-box.ui-box-show
.ui-box-head
%h4.box-title
- - if @merge_request.merged
+ - if @merge_request.merged?
.error.status_info
%i.icon-ok
Merged
- - elsif @merge_request.closed
+ - elsif @merge_request.closed?
.error.status_info Closed
= gfm escape_once(@merge_request.title)
@@ -21,7 +21,7 @@
%strong= link_to_gfm truncate(milestone.title, length: 20), project_milestone_path(milestone.project, milestone)
- - if @merge_request.closed
+ - if @merge_request.closed?
.ui-box-bottom
- if @merge_request.merged?
%span
diff --git a/app/views/merge_requests/show/_mr_ci.html.haml b/app/views/merge_requests/show/_mr_ci.html.haml
index dd1e78a0205..a8faa6ba617 100644
--- a/app/views/merge_requests/show/_mr_ci.html.haml
+++ b/app/views/merge_requests/show/_mr_ci.html.haml
@@ -1,4 +1,4 @@
-- if @merge_request.open? && @commits.any?
+- if @merge_request.opened? && @commits.any?
.ci_widget.ci-success{style: "display:none"}
.alert.alert-success
%i.icon-ok
diff --git a/app/views/merge_requests/show/_mr_title.html.haml b/app/views/merge_requests/show/_mr_title.html.haml
index 8119728dcb9..26a8296d96b 100644
--- a/app/views/merge_requests/show/_mr_title.html.haml
+++ b/app/views/merge_requests/show/_mr_title.html.haml
@@ -7,7 +7,7 @@
%span.pull-right
- if can?(current_user, :modify_merge_request, @merge_request)
- - if @merge_request.open?
+ - if @merge_request.opened?
.left.btn-group
%a.btn.grouped.dropdown-toggle{ data: {toggle: :dropdown} }
%i.icon-download-alt
diff --git a/app/views/milestones/show.html.haml b/app/views/milestones/show.html.haml
index 43d82a54dd6..3133c2011ba 100644
--- a/app/views/milestones/show.html.haml
+++ b/app/views/milestones/show.html.haml
@@ -77,7 +77,7 @@
%li=link_to('All Merge Requests', '#')
%ul.well-list
- @merge_requests.each do |merge_request|
- %li{data: {closed: merge_request.closed}}
+ %li{data: {closed: merge_request.closed?}}
= link_to [@project, merge_request] do
%span.badge.badge-info ##{merge_request.id}
&ndash;