diff options
author | Dmitriy Zaporozhets <dzaporozhets@gitlab.com> | 2014-11-05 09:51:39 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dzaporozhets@gitlab.com> | 2014-11-05 09:51:39 +0000 |
commit | 3559e3906a005a71183032bc06cf7538fc9d7d05 (patch) | |
tree | 5cd5f8f194ef03e10cac10cd7860c86aff5939bb /app/models/commit.rb | |
parent | f18299e45279ce2ffdaee22482e30e6f37c1f5b6 (diff) | |
parent | e1ea394072b9358d77a02a021cc79a37ddee1409 (diff) | |
download | gitlab-ci-3559e3906a005a71183032bc06cf7538fc9d7d05.tar.gz |
Merge branch 'parallel-builds' into 'master'
Parallel builds
This merge contains next changes:
* Replace project scripts textarea with jobs
* Create multiple builds on push if there are multiple jobs
* Change UI hierarchy to next chain: project -> commit -> builds
* Requires GitLab 7.5.0pre or higher
See merge request !83
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 |