mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-18 00:56:41 +10:00
When a build fails for a commit, create a todo for the author of the merge request that commit is the HEAD of. If the commit isn't the HEAD commit of any MR, don't do anything. If there already is a todo for that user and MR, don't do anything. Current limitations: - This isn't configurable by project. - The author of a merge request might not be the person who pushed the breaking commit.
65 lines
1.2 KiB
Ruby
65 lines
1.2 KiB
Ruby
class Todo < ActiveRecord::Base
|
|
ASSIGNED = 1
|
|
MENTIONED = 2
|
|
BUILD_FAILED = 3
|
|
|
|
belongs_to :author, class_name: "User"
|
|
belongs_to :note
|
|
belongs_to :project
|
|
belongs_to :target, polymorphic: true, touch: true
|
|
belongs_to :user
|
|
|
|
delegate :name, :email, to: :author, prefix: true, allow_nil: true
|
|
|
|
validates :action, :project, :target_type, :user, presence: true
|
|
validates :target_id, presence: true, unless: :for_commit?
|
|
validates :commit_id, presence: true, if: :for_commit?
|
|
|
|
default_scope { reorder(id: :desc) }
|
|
|
|
scope :pending, -> { with_state(:pending) }
|
|
scope :done, -> { with_state(:done) }
|
|
|
|
state_machine :state, initial: :pending do
|
|
event :done do
|
|
transition [:pending] => :done
|
|
end
|
|
|
|
state :pending
|
|
state :done
|
|
end
|
|
|
|
def build_failed?
|
|
action == BUILD_FAILED
|
|
end
|
|
|
|
def body
|
|
if note.present?
|
|
note.note
|
|
else
|
|
target.title
|
|
end
|
|
end
|
|
|
|
def for_commit?
|
|
target_type == "Commit"
|
|
end
|
|
|
|
# override to return commits, which are not active record
|
|
def target
|
|
if for_commit?
|
|
project.commit(commit_id) rescue nil
|
|
else
|
|
super
|
|
end
|
|
end
|
|
|
|
def target_reference
|
|
if for_commit?
|
|
target.short_id
|
|
else
|
|
target.to_reference
|
|
end
|
|
end
|
|
end
|