summaryrefslogtreecommitdiff
path: root/lib/gitlab/git
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-04-03 21:05:10 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-04-03 21:05:10 +0300
commit3011ac4150e355da9e5956cb223d19e18425e0eb (patch)
tree1a857049b14ed6ff2a5f920d94101f9e2ccc7c63 /lib/gitlab/git
parent9f4fde04f5b74199c9bd72621e03c544aaf6f2ef (diff)
downloadgitlab-ce-3011ac4150e355da9e5956cb223d19e18425e0eb.tar.gz
Refactoring and cleanup. Removed unused commit finders
Diffstat (limited to 'lib/gitlab/git')
-rw-r--r--lib/gitlab/git/commit.rb72
-rw-r--r--lib/gitlab/git/repository.rb36
-rw-r--r--lib/gitlab/git/stats.rb75
-rw-r--r--lib/gitlab/git/tree.rb2
4 files changed, 105 insertions, 80 deletions
diff --git a/lib/gitlab/git/commit.rb b/lib/gitlab/git/commit.rb
index f1b9a76b7d6..27b866893f9 100644
--- a/lib/gitlab/git/commit.rb
+++ b/lib/gitlab/git/commit.rb
@@ -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
diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb
index 30344a3dec5..330448c81b2 100644
--- a/lib/gitlab/git/repository.rb
+++ b/lib/gitlab/git/repository.rb
@@ -48,31 +48,41 @@ 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) }
+
+ commits.sort! do |x, y|
+ y.committed_date <=> x.committed_date
+ end
- def commits_since(date)
- Gitlab::Git::Commit.commits_since(repo, date)
+ 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 last_commit_for(ref, path = nil)
- commits(ref, path, 1).first
+ def commits_between(from, to)
+ repo.commits_between(from, to).map { |c| Commit.new(c) }
end
- def commits_between(from, to)
- Gitlab::Git::Commit.commits_between(repo, from, to)
+ def last_commit_for(ref, path = nil)
+ commits(ref, path, 1).first
end
# Returns an Array of branch names
diff --git a/lib/gitlab/git/stats.rb b/lib/gitlab/git/stats.rb
new file mode 100644
index 00000000000..c925c653342
--- /dev/null
+++ b/lib/gitlab/git/stats.rb
@@ -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
diff --git a/lib/gitlab/git/tree.rb b/lib/gitlab/git/tree.rb
index 8bcf71ea217..e6b500ba18c 100644
--- a/lib/gitlab/git/tree.rb
+++ b/lib/gitlab/git/tree.rb
@@ -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