summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorZeger-Jan van de Weg <mail@zjvandeweg.nl>2015-11-02 17:27:38 +0100
committerZeger-Jan van de Weg <mail@zjvandeweg.nl>2015-11-02 17:27:38 +0100
commit77f8a1e392b64f51326df8aebdc77e97af07bfed (patch)
treef1ce42885c2459c9e4737d8a8b5099fbdc2efa7b /app/models
parent8c9e1df98eb45e3305ab5badc6727580e84d36e0 (diff)
downloadgitlab-ce-77f8a1e392b64f51326df8aebdc77e97af07bfed.tar.gz
Merge when build succeeds
Diffstat (limited to 'app/models')
-rw-r--r--app/models/ci/commit.rb8
-rw-r--r--app/models/commit_status.rb33
-rw-r--r--app/models/merge_request.rb13
3 files changed, 54 insertions, 0 deletions
diff --git a/app/models/ci/commit.rb b/app/models/ci/commit.rb
index 13437b2483f..ebe4bace3b5 100644
--- a/app/models/ci/commit.rb
+++ b/app/models/ci/commit.rb
@@ -164,6 +164,14 @@ module Ci
status == 'canceled'
end
+ def active?
+ running? || pending?
+ end
+
+ def complete?
+ canceled? || success? || failed?
+ end
+
def duration
duration_array = latest_statuses.map(&:duration).compact
duration_array.reduce(:+).to_i
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index 0b73ab6d2eb..b1049fab788 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -1,3 +1,32 @@
+# == Schema Information
+#
+# project_id integer
+# status string
+# finished_at datetime
+# trace text
+# created_at datetime
+# updated_at datetime
+# started_at datetime
+# runner_id integer
+# coverage float
+# commit_id integer
+# commands text
+# job_id integer
+# name string
+# deploy boolean default: false
+# options text
+# allow_failure boolean default: false, null: false
+# stage string
+# trigger_request_id integer
+# stage_idx integer
+# tag boolean
+# ref string
+# user_id integer
+# type string
+# target_url string
+# description string
+#
+
class CommitStatus < ActiveRecord::Base
self.table_name = 'ci_builds'
@@ -46,6 +75,10 @@ class CommitStatus < ActiveRecord::Base
build.update_attributes finished_at: Time.now
end
+ after_transition running: :success do |build, transition|
+ MergeRequests::MergeWhenBuildSucceedsService.new(build.commit.gl_project, nil).trigger(build)
+ end
+
state :pending, value: 'pending'
state :running, value: 'running'
state :failed, value: 'failed'
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 85f37e49e62..c5f04dbcf4c 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -34,9 +34,12 @@ class MergeRequest < ActiveRecord::Base
belongs_to :target_project, foreign_key: :target_project_id, class_name: "Project"
belongs_to :source_project, foreign_key: :source_project_id, class_name: "Project"
+ belongs_to :merge_user, class_name: "User"
has_one :merge_request_diff, dependent: :destroy
+ serialize :merge_params, Hash
+
after_create :create_merge_request_diff
after_update :update_merge_request_diff
@@ -385,6 +388,16 @@ class MergeRequest < ActiveRecord::Base
message
end
+ def reset_merge_when_build_succeeds
+ return unless merge_when_build_succeeds?
+
+ self.merge_when_build_succeeds = false
+ self.merge_user = nil
+ self.merge_params = nil
+
+ self.save
+ end
+
# Return array of possible target branches
# depends on target project of MR
def target_branches