diff options
Diffstat (limited to 'app/models/commit.rb')
-rw-r--r-- | app/models/commit.rb | 89 |
1 files changed, 81 insertions, 8 deletions
diff --git a/app/models/commit.rb b/app/models/commit.rb index 665f136..4abe0da 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -2,25 +2,30 @@ # # Table name: commits # -# id :integer not null, primary key -# project_id :integer -# ref :string(255) -# sha :string(255) -# before_sha :string(255) -# push_data :text -# created_at :datetime -# updated_at :datetime +# id :integer not null, primary key +# project_id :integer +# ref :string(255) +# sha :string(255) +# before_sha :string(255) +# push_data :text +# created_at :datetime +# updated_at :datetime # class Commit < ActiveRecord::Base belongs_to :project has_many :builds + has_many :jobs, through: :builds serialize :push_data validates_presence_of :ref, :sha, :before_sha, :push_data validate :valid_commit_sha + def to_param + sha + end + def last_build builds.last end @@ -94,4 +99,72 @@ class Commit < ActiveRecord::Base recipients << git_author_email if project.email_add_committer? recipients.uniq end + + def create_builds + project.jobs.active.map do |job| + build = builds.new(commands: job.commands) + build.job = job + build.save + build + end + end + + def builds_without_retry + @builds_without_retry ||= + begin + grouped_builds = builds.group_by(&:job) + grouped_builds.map do |job, builds| + builds.sort_by(&:id).last + end + end + end + + def status + if success? + 'success' + elsif pending? + 'pending' + elsif running? + 'running' + else + 'failed' + end + end + + def pending? + builds_without_retry.all? do |build| + build.pending? + end + end + + def running? + builds_without_retry.any? do |build| + build.running? || build.pending? + end + end + + def success? + builds_without_retry.all? do |build| + build.success? + end + end + + def failed? + status == 'failed' + end + + def canceled? + end + + def duration + end + + def finished_at + end + + def coverage + if builds.size == 1 + builds.first.coverage + end + end end |