Stats page
This commit is contained in:
parent
ca54d43f99
commit
1c5b2a5153
10 changed files with 186 additions and 15 deletions
76
lib/gitlab/git_stats.rb
Normal file
76
lib/gitlab/git_stats.rb
Normal file
|
@ -0,0 +1,76 @@
|
|||
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
|
||||
repo.git.sh("git ls-tree -r --name-only #{ref} | wc -l").first.to_i
|
||||
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
|
||||
|
||||
format = "--pretty=format:'%h|%at|%ai|%aE'"
|
||||
commits_strings = repo.git.sh("git rev-list --since #{from.to_s(:date)} #{format} #{ref} | grep -v commit")[0].split("\n")
|
||||
|
||||
commits_dates = commits_strings.map do |string|
|
||||
data = string.split("|")
|
||||
date = data[2]
|
||||
Time.parse(date).to_date.to_s(:date)
|
||||
end
|
||||
|
||||
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
|
Loading…
Add table
Add a link
Reference in a new issue