gitlab-org--gitlab-foss/app/models/commit.rb

124 lines
2.3 KiB
Ruby
Raw Normal View History

2011-11-20 15:32:12 -05:00
class Commit
2012-01-28 09:47:55 -05:00
include ActiveModel::Conversion
extend ActiveModel::Naming
2011-11-27 10:35:49 -05:00
attr_accessor :commit
attr_accessor :head
attr_accessor :refs
2011-11-27 10:35:49 -05:00
delegate :message,
:authored_date,
2011-11-27 10:35:49 -05:00
:committed_date,
:parents,
:sha,
:date,
:committer,
2011-11-27 10:35:49 -05:00
:author,
:message,
:diffs,
:tree,
:id,
:to => :commit
2012-03-09 14:43:46 -05:00
class << self
def find_or_first(repo, commit_id = nil)
commit = if commit_id
repo.commit(commit_id)
else
repo.commits.first
end
Commit.new(commit) if commit
end
def fresh_commits(repo, n = 10)
commits = repo.heads.map do |h|
repo.commits(h.name, n).map { |c| Commit.new(c, h) }
end.flatten.uniq { |c| c.id }
commits.sort! do |x, y|
y.committed_date <=> x.committed_date
end
commits[0...n]
end
def commits_with_refs(repo, n = 20)
commits = repo.branches.map { |ref| Commit.new(ref.commit, ref) }
commits.sort! do |x, y|
y.committed_date <=> x.committed_date
end
commits[0..n]
end
def commits_since(repo, date)
commits = repo.heads.map do |h|
repo.log(h.name, nil, :since => date).each { |c| Commit.new(c, h) }
end.flatten.uniq { |c| c.id }
commits.sort! do |x, y|
y.committed_date <=> x.committed_date
end
commits
end
def commits(repo, ref, path = nil, limit = nil, offset = nil)
if path
repo.log(ref, path, :max_count => limit, :skip => offset)
elsif limit && offset
repo.commits(ref, limit, offset)
else
repo.commits(ref)
end.map{ |c| Commit.new(c) }
end
def commits_between(repo, from, to)
repo.commits_between(from, to).map { |c| Commit.new(c) }
end
end
2012-01-28 09:47:55 -05:00
def persisted?
false
end
2011-11-27 10:35:49 -05:00
def initialize(raw_commit, head = nil)
@commit = raw_commit
@head = head
end
def safe_message
2011-12-30 08:41:39 -05:00
message
2011-11-27 10:35:49 -05:00
end
def created_at
committed_date
end
def author_email
2011-12-30 08:41:39 -05:00
author.email
2011-11-27 10:35:49 -05:00
end
def author_name
2012-02-18 07:12:48 -05:00
author.name.force_encoding("UTF-8")
2011-11-27 10:35:49 -05:00
end
2011-11-29 13:06:37 -05:00
def committer_name
committer.name
end
def committer_email
committer.email
end
2011-11-29 13:06:37 -05:00
def prev_commit
parents.first
end
2012-02-29 16:34:06 -05:00
def prev_commit_id
prev_commit.id
end
2011-11-20 15:32:12 -05:00
end