Refactoring and cleanup. Removed unused commit finders

This commit is contained in:
Dmitriy Zaporozhets 2013-04-03 21:05:10 +03:00
parent 9f4fde04f5
commit 3011ac4150
9 changed files with 119 additions and 176 deletions

View file

@ -17,7 +17,7 @@ class RepositoriesController < ProjectResourceController
end
def stats
@stats = Gitlab::GitStats.new(@repository.raw, @repository.root_ref)
@stats = Gitlab::Git::Stats.new(@repository.raw, @repository.root_ref)
@graph = @stats.graph
end

View file

@ -49,9 +49,9 @@ class WikisController < ProjectResourceController
end
def history
unless @wiki = @gollum_wiki.find_page(params[:id])
redirect_to project_wiki_path(@project, :home), notice: "Page not found"
end
@wiki = @gollum_wiki.find_page(params[:id])
redirect_to(project_wiki_path(@project, :home), notice: "Page not found") unless @wiki
end
def destroy

View file

@ -47,12 +47,6 @@ class GollumWiki
wiki.pages.map { |page| WikiPage.new(self, page, true) }
end
# Returns the last 30 Commit objects across the entire
# repository.
def recent_history
Gitlab::Git::Commit.fresh_commits(wiki.repo, 30)
end
# Finds a page within the repository based on a tile
# or slug.
#

View file

@ -25,10 +25,9 @@ module Network
def collect_commits
refs_cache = build_refs_cache
find_commits(count_to_display_commit_in_center)
.map do |commit|
# Decorate with app/model/network/commit.rb
Network::Commit.new(commit, refs_cache[commit.id])
find_commits(count_to_display_commit_in_center).map do |commit|
# Decorate with app/model/network/commit.rb
Network::Commit.new(commit, refs_cache[commit.id])
end
end
@ -93,15 +92,13 @@ module Network
end
def find_commits(skip = 0)
Grit::Commit.find_all(
@repo,
nil,
{
date_order: true,
max_count: self.class.max_count,
skip: skip
}
)
opts = {
date_order: true,
max_count: self.class.max_count,
skip: skip
}
Grit::Commit.find_all(@repo, opts, nil)
end
def commits_sort_by_ref

View file

@ -12,70 +12,6 @@ module Gitlab
delegate :parents, :diffs, :tree, :stats, :to_patch,
to: :raw_commit
class << self
def serialize_keys
%w(id authored_date committed_date author_name author_email committer_name committer_email message parent_ids)
end
def find_or_first(repo, commit_id = nil, root_ref)
commit = if commit_id
repo.commit(commit_id)
else
repo.commits(root_ref).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
def initialize(raw_commit, head = nil)
raise "Nil as raw commit passed" unless raw_commit
@ -88,6 +24,10 @@ module Gitlab
@head = head
end
def serialize_keys
%w(id authored_date committed_date author_name author_email committer_name committer_email message parent_ids)
end
def sha
id
end
@ -143,7 +83,7 @@ module Gitlab
def to_hash
hash = {}
keys = Commit.serialize_keys
keys = serialize_keys
keys.each do |key|
hash[key] = send(key)
@ -172,7 +112,7 @@ module Gitlab
end
def init_from_hash(hash)
Commit.serialize_keys.each do |key|
serialize_keys.each do |key|
send(:"#{key}=", hash[key])
end
end

View file

@ -48,33 +48,43 @@ module Gitlab
end
def commit(commit_id = nil)
Gitlab::Git::Commit.find_or_first(repo, commit_id, root_ref)
end
commit = if commit_id
repo.commit(commit_id)
else
repo.commits(root_ref).first
end
def fresh_commits(n = 10)
Gitlab::Git::Commit.fresh_commits(repo, n)
Commit.new(commit) if commit
end
def commits_with_refs(n = 20)
Gitlab::Git::Commit.commits_with_refs(repo, n)
end
commits = repo.branches.map { |ref| Commit.new(ref.commit, ref) }
def commits_since(date)
Gitlab::Git::Commit.commits_since(repo, date)
commits.sort! do |x, y|
y.committed_date <=> x.committed_date
end
commits[0..n]
end
def commits(ref, path = nil, limit = nil, offset = nil)
Gitlab::Git::Commit.commits(repo, ref, path, limit, offset)
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(from, to)
repo.commits_between(from, to).map { |c| Commit.new(c) }
end
def last_commit_for(ref, path = nil)
commits(ref, path, 1).first
end
def commits_between(from, to)
Gitlab::Git::Commit.commits_between(repo, from, to)
end
# Returns an Array of branch names
# sorted by name ASC
def branch_names

75
lib/gitlab/git/stats.rb Normal file
View file

@ -0,0 +1,75 @@
module Gitlab
module Git
class Stats
attr_accessor :repo, :ref
def initialize repo, ref
@repo, @ref = repo, ref
end
def authors
@authors ||= collect_authors
end
def commits_count
@commits_count ||= repo.commit_count(ref)
end
def files_count
args = [ref, '-r', '--name-only' ]
repo.git.run(nil, 'ls-tree', nil, {}, args).split("\n").count
end
def authors_count
authors.size
end
def graph
@graph ||= build_graph
end
protected
def collect_authors
shortlog = repo.git.shortlog({e: true, s: true }, ref)
authors = []
lines = shortlog.split("\n")
lines.each do |line|
data = line.split("\t")
commits = data.first
author = Grit::Actor.from_string(data.last)
authors << OpenStruct.new(
name: author.name,
email: author.email,
commits: commits.to_i
)
end
authors.sort_by(&:commits).reverse
end
def build_graph n = 4
from, to = (Date.today - n.weeks), Date.today
args = ['--all', "--since=#{from.to_s(:date)}", '--format=%ad' ]
rev_list = repo.git.run(nil, 'rev-list', nil, {}, args).split("\n")
commits_dates = rev_list.values_at(* rev_list.each_index.select {|i| i.odd?})
commits_dates = commits_dates.map { |date_str| Time.parse(date_str).to_date.to_s(:date) }
commits_per_day = from.upto(to).map do |day|
commits_dates.count(day.to_date.to_s(:date))
end
OpenStruct.new(
labels: from.upto(to).map { |day| day.stamp('Aug 23') },
commits: commits_per_day,
weeks: n
)
end
end
end
end

View file

@ -38,7 +38,7 @@ module Gitlab
end
def readme
@readme ||= entries.find { |c| c.is_a?(Grit::Blob) and c.name =~ /^readme/i }
@readme ||= blobs.find { |c| c.name =~ /^readme/i }
end
protected

View file

@ -1,73 +0,0 @@
module Gitlab
class GitStats
attr_accessor :repo, :ref
def initialize repo, ref
@repo, @ref = repo, ref
end
def authors
@authors ||= collect_authors
end
def commits_count
@commits_count ||= repo.commit_count(ref)
end
def files_count
args = [ref, '-r', '--name-only' ]
repo.git.run(nil, 'ls-tree', nil, {}, args).split("\n").count
end
def authors_count
authors.size
end
def graph
@graph ||= build_graph
end
protected
def collect_authors
shortlog = repo.git.shortlog({e: true, s: true }, ref)
authors = []
lines = shortlog.split("\n")
lines.each do |line|
data = line.split("\t")
commits = data.first
author = Grit::Actor.from_string(data.last)
authors << OpenStruct.new(
name: author.name,
email: author.email,
commits: commits.to_i
)
end
authors.sort_by(&:commits).reverse
end
def build_graph n = 4
from, to = (Date.today - n.weeks), Date.today
args = ['--all', "--since=#{from.to_s(:date)}", '--format=%ad' ]
rev_list = repo.git.run(nil, 'rev-list', nil, {}, args).split("\n")
commits_dates = rev_list.values_at(* rev_list.each_index.select {|i| i.odd?})
commits_dates = commits_dates.map { |date_str| Time.parse(date_str).to_date.to_s(:date) }
commits_per_day = from.upto(to).map do |day|
commits_dates.count(day.to_date.to_s(:date))
end
OpenStruct.new(
labels: from.upto(to).map { |day| day.stamp('Aug 23') },
commits: commits_per_day,
weeks: n
)
end
end
end