summaryrefslogtreecommitdiff
path: root/app/models/commit.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/commit.rb')
-rw-r--r--app/models/commit.rb97
1 files changed, 97 insertions, 0 deletions
diff --git a/app/models/commit.rb b/app/models/commit.rb
new file mode 100644
index 0000000..665f136
--- /dev/null
+++ b/app/models/commit.rb
@@ -0,0 +1,97 @@
+# == Schema Information
+#
+# 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
+#
+
+class Commit < ActiveRecord::Base
+ belongs_to :project
+ has_many :builds
+
+ serialize :push_data
+
+ validates_presence_of :ref, :sha, :before_sha, :push_data
+ validate :valid_commit_sha
+
+ def last_build
+ builds.last
+ end
+
+ def valid_commit_sha
+ if self.sha =~ /\A00000000/
+ self.errors.add(:sha, " cant be 00000000 (branch removal)")
+ end
+ end
+
+ def compare?
+ gitlab? && before_sha
+ end
+
+ def gitlab?
+ project.gitlab?
+ end
+
+ def ci_skip?
+ !!(git_commit_message =~ /(\[ci skip\])/)
+ end
+
+ def git_author_name
+ commit_data[:author][:name] if commit_data && commit_data[:author]
+ end
+
+ def git_author_email
+ commit_data[:author][:email] if commit_data && commit_data[:author]
+ end
+
+ def git_commit_message
+ commit_data[:message] if commit_data
+ end
+
+ def short_before_sha
+ before_sha[0..8]
+ end
+
+ def short_sha
+ sha[0..8]
+ end
+
+ def commit_data
+ push_data[:commits].each do |commit|
+ return commit if commit[:id] == sha
+ end
+ rescue
+ nil
+ end
+
+ # Build a clone-able repo url
+ # using http and basic auth
+ def repo_url
+ auth = "gitlab-ci-token:#{project.token}@"
+ url = project.gitlab_url + ".git"
+ url.sub(/^https?:\/\//) do |prefix|
+ prefix + auth
+ end
+ end
+
+ def allow_git_fetch
+ project.allow_git_fetch
+ end
+
+ def project_name
+ project.name
+ end
+
+ def project_recipients
+ recipients = project.email_recipients.split(' ')
+ recipients << git_author_email if project.email_add_committer?
+ recipients.uniq
+ end
+end