Commit 3011ac4150e355da9e5956cb223d19e18425e0eb
1 parent
9f4fde04
Exists in
master
and in
4 other branches
Refactoring and cleanup. Removed unused commit finders
Showing
9 changed files
with
119 additions
and
176 deletions
Show diff stats
app/controllers/repositories_controller.rb
| @@ -17,7 +17,7 @@ class RepositoriesController < ProjectResourceController | @@ -17,7 +17,7 @@ class RepositoriesController < ProjectResourceController | ||
| 17 | end | 17 | end |
| 18 | 18 | ||
| 19 | def stats | 19 | def stats |
| 20 | - @stats = Gitlab::GitStats.new(@repository.raw, @repository.root_ref) | 20 | + @stats = Gitlab::Git::Stats.new(@repository.raw, @repository.root_ref) |
| 21 | @graph = @stats.graph | 21 | @graph = @stats.graph |
| 22 | end | 22 | end |
| 23 | 23 |
app/controllers/wikis_controller.rb
| @@ -49,9 +49,9 @@ class WikisController < ProjectResourceController | @@ -49,9 +49,9 @@ class WikisController < ProjectResourceController | ||
| 49 | end | 49 | end |
| 50 | 50 | ||
| 51 | def history | 51 | def history |
| 52 | - unless @wiki = @gollum_wiki.find_page(params[:id]) | ||
| 53 | - redirect_to project_wiki_path(@project, :home), notice: "Page not found" | ||
| 54 | - end | 52 | + @wiki = @gollum_wiki.find_page(params[:id]) |
| 53 | + | ||
| 54 | + redirect_to(project_wiki_path(@project, :home), notice: "Page not found") unless @wiki | ||
| 55 | end | 55 | end |
| 56 | 56 | ||
| 57 | def destroy | 57 | def destroy |
app/models/gollum_wiki.rb
| @@ -47,12 +47,6 @@ class GollumWiki | @@ -47,12 +47,6 @@ class GollumWiki | ||
| 47 | wiki.pages.map { |page| WikiPage.new(self, page, true) } | 47 | wiki.pages.map { |page| WikiPage.new(self, page, true) } |
| 48 | end | 48 | end |
| 49 | 49 | ||
| 50 | - # Returns the last 30 Commit objects across the entire | ||
| 51 | - # repository. | ||
| 52 | - def recent_history | ||
| 53 | - Gitlab::Git::Commit.fresh_commits(wiki.repo, 30) | ||
| 54 | - end | ||
| 55 | - | ||
| 56 | # Finds a page within the repository based on a tile | 50 | # Finds a page within the repository based on a tile |
| 57 | # or slug. | 51 | # or slug. |
| 58 | # | 52 | # |
app/models/network/graph.rb
| @@ -25,10 +25,9 @@ module Network | @@ -25,10 +25,9 @@ module Network | ||
| 25 | def collect_commits | 25 | def collect_commits |
| 26 | refs_cache = build_refs_cache | 26 | refs_cache = build_refs_cache |
| 27 | 27 | ||
| 28 | - find_commits(count_to_display_commit_in_center) | ||
| 29 | - .map do |commit| | ||
| 30 | - # Decorate with app/model/network/commit.rb | ||
| 31 | - Network::Commit.new(commit, refs_cache[commit.id]) | 28 | + find_commits(count_to_display_commit_in_center).map do |commit| |
| 29 | + # Decorate with app/model/network/commit.rb | ||
| 30 | + Network::Commit.new(commit, refs_cache[commit.id]) | ||
| 32 | end | 31 | end |
| 33 | end | 32 | end |
| 34 | 33 | ||
| @@ -93,15 +92,13 @@ module Network | @@ -93,15 +92,13 @@ module Network | ||
| 93 | end | 92 | end |
| 94 | 93 | ||
| 95 | def find_commits(skip = 0) | 94 | def find_commits(skip = 0) |
| 96 | - Grit::Commit.find_all( | ||
| 97 | - @repo, | ||
| 98 | - nil, | ||
| 99 | - { | ||
| 100 | - date_order: true, | ||
| 101 | - max_count: self.class.max_count, | ||
| 102 | - skip: skip | ||
| 103 | - } | ||
| 104 | - ) | 95 | + opts = { |
| 96 | + date_order: true, | ||
| 97 | + max_count: self.class.max_count, | ||
| 98 | + skip: skip | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + Grit::Commit.find_all(@repo, opts, nil) | ||
| 105 | end | 102 | end |
| 106 | 103 | ||
| 107 | def commits_sort_by_ref | 104 | def commits_sort_by_ref |
lib/gitlab/git/commit.rb
| @@ -12,70 +12,6 @@ module Gitlab | @@ -12,70 +12,6 @@ module Gitlab | ||
| 12 | delegate :parents, :diffs, :tree, :stats, :to_patch, | 12 | delegate :parents, :diffs, :tree, :stats, :to_patch, |
| 13 | to: :raw_commit | 13 | to: :raw_commit |
| 14 | 14 | ||
| 15 | - class << self | ||
| 16 | - def serialize_keys | ||
| 17 | - %w(id authored_date committed_date author_name author_email committer_name committer_email message parent_ids) | ||
| 18 | - end | ||
| 19 | - | ||
| 20 | - def find_or_first(repo, commit_id = nil, root_ref) | ||
| 21 | - commit = if commit_id | ||
| 22 | - repo.commit(commit_id) | ||
| 23 | - else | ||
| 24 | - repo.commits(root_ref).first | ||
| 25 | - end | ||
| 26 | - | ||
| 27 | - Commit.new(commit) if commit | ||
| 28 | - end | ||
| 29 | - | ||
| 30 | - def fresh_commits(repo, n = 10) | ||
| 31 | - commits = repo.heads.map do |h| | ||
| 32 | - repo.commits(h.name, n).map { |c| Commit.new(c, h) } | ||
| 33 | - end.flatten.uniq { |c| c.id } | ||
| 34 | - | ||
| 35 | - commits.sort! do |x, y| | ||
| 36 | - y.committed_date <=> x.committed_date | ||
| 37 | - end | ||
| 38 | - | ||
| 39 | - commits[0...n] | ||
| 40 | - end | ||
| 41 | - | ||
| 42 | - def commits_with_refs(repo, n = 20) | ||
| 43 | - commits = repo.branches.map { |ref| Commit.new(ref.commit, ref) } | ||
| 44 | - | ||
| 45 | - commits.sort! do |x, y| | ||
| 46 | - y.committed_date <=> x.committed_date | ||
| 47 | - end | ||
| 48 | - | ||
| 49 | - commits[0..n] | ||
| 50 | - end | ||
| 51 | - | ||
| 52 | - def commits_since(repo, date) | ||
| 53 | - commits = repo.heads.map do |h| | ||
| 54 | - repo.log(h.name, nil, since: date).each { |c| Commit.new(c, h) } | ||
| 55 | - end.flatten.uniq { |c| c.id } | ||
| 56 | - | ||
| 57 | - commits.sort! do |x, y| | ||
| 58 | - y.committed_date <=> x.committed_date | ||
| 59 | - end | ||
| 60 | - | ||
| 61 | - commits | ||
| 62 | - end | ||
| 63 | - | ||
| 64 | - def commits(repo, ref, path = nil, limit = nil, offset = nil) | ||
| 65 | - if path | ||
| 66 | - repo.log(ref, path, max_count: limit, skip: offset) | ||
| 67 | - elsif limit && offset | ||
| 68 | - repo.commits(ref, limit, offset) | ||
| 69 | - else | ||
| 70 | - repo.commits(ref) | ||
| 71 | - end.map{ |c| Commit.new(c) } | ||
| 72 | - end | ||
| 73 | - | ||
| 74 | - def commits_between(repo, from, to) | ||
| 75 | - repo.commits_between(from, to).map { |c| Commit.new(c) } | ||
| 76 | - end | ||
| 77 | - end | ||
| 78 | - | ||
| 79 | def initialize(raw_commit, head = nil) | 15 | def initialize(raw_commit, head = nil) |
| 80 | raise "Nil as raw commit passed" unless raw_commit | 16 | raise "Nil as raw commit passed" unless raw_commit |
| 81 | 17 | ||
| @@ -88,6 +24,10 @@ module Gitlab | @@ -88,6 +24,10 @@ module Gitlab | ||
| 88 | @head = head | 24 | @head = head |
| 89 | end | 25 | end |
| 90 | 26 | ||
| 27 | + def serialize_keys | ||
| 28 | + %w(id authored_date committed_date author_name author_email committer_name committer_email message parent_ids) | ||
| 29 | + end | ||
| 30 | + | ||
| 91 | def sha | 31 | def sha |
| 92 | id | 32 | id |
| 93 | end | 33 | end |
| @@ -143,7 +83,7 @@ module Gitlab | @@ -143,7 +83,7 @@ module Gitlab | ||
| 143 | def to_hash | 83 | def to_hash |
| 144 | hash = {} | 84 | hash = {} |
| 145 | 85 | ||
| 146 | - keys = Commit.serialize_keys | 86 | + keys = serialize_keys |
| 147 | 87 | ||
| 148 | keys.each do |key| | 88 | keys.each do |key| |
| 149 | hash[key] = send(key) | 89 | hash[key] = send(key) |
| @@ -172,7 +112,7 @@ module Gitlab | @@ -172,7 +112,7 @@ module Gitlab | ||
| 172 | end | 112 | end |
| 173 | 113 | ||
| 174 | def init_from_hash(hash) | 114 | def init_from_hash(hash) |
| 175 | - Commit.serialize_keys.each do |key| | 115 | + serialize_keys.each do |key| |
| 176 | send(:"#{key}=", hash[key]) | 116 | send(:"#{key}=", hash[key]) |
| 177 | end | 117 | end |
| 178 | end | 118 | end |
lib/gitlab/git/repository.rb
| @@ -48,31 +48,41 @@ module Gitlab | @@ -48,31 +48,41 @@ module Gitlab | ||
| 48 | end | 48 | end |
| 49 | 49 | ||
| 50 | def commit(commit_id = nil) | 50 | def commit(commit_id = nil) |
| 51 | - Gitlab::Git::Commit.find_or_first(repo, commit_id, root_ref) | ||
| 52 | - end | 51 | + commit = if commit_id |
| 52 | + repo.commit(commit_id) | ||
| 53 | + else | ||
| 54 | + repo.commits(root_ref).first | ||
| 55 | + end | ||
| 53 | 56 | ||
| 54 | - def fresh_commits(n = 10) | ||
| 55 | - Gitlab::Git::Commit.fresh_commits(repo, n) | 57 | + Commit.new(commit) if commit |
| 56 | end | 58 | end |
| 57 | 59 | ||
| 58 | def commits_with_refs(n = 20) | 60 | def commits_with_refs(n = 20) |
| 59 | - Gitlab::Git::Commit.commits_with_refs(repo, n) | ||
| 60 | - end | 61 | + commits = repo.branches.map { |ref| Commit.new(ref.commit, ref) } |
| 62 | + | ||
| 63 | + commits.sort! do |x, y| | ||
| 64 | + y.committed_date <=> x.committed_date | ||
| 65 | + end | ||
| 61 | 66 | ||
| 62 | - def commits_since(date) | ||
| 63 | - Gitlab::Git::Commit.commits_since(repo, date) | 67 | + commits[0..n] |
| 64 | end | 68 | end |
| 65 | 69 | ||
| 66 | def commits(ref, path = nil, limit = nil, offset = nil) | 70 | def commits(ref, path = nil, limit = nil, offset = nil) |
| 67 | - Gitlab::Git::Commit.commits(repo, ref, path, limit, offset) | 71 | + if path |
| 72 | + repo.log(ref, path, max_count: limit, skip: offset) | ||
| 73 | + elsif limit && offset | ||
| 74 | + repo.commits(ref, limit, offset) | ||
| 75 | + else | ||
| 76 | + repo.commits(ref) | ||
| 77 | + end.map{ |c| Commit.new(c) } | ||
| 68 | end | 78 | end |
| 69 | 79 | ||
| 70 | - def last_commit_for(ref, path = nil) | ||
| 71 | - commits(ref, path, 1).first | 80 | + def commits_between(from, to) |
| 81 | + repo.commits_between(from, to).map { |c| Commit.new(c) } | ||
| 72 | end | 82 | end |
| 73 | 83 | ||
| 74 | - def commits_between(from, to) | ||
| 75 | - Gitlab::Git::Commit.commits_between(repo, from, to) | 84 | + def last_commit_for(ref, path = nil) |
| 85 | + commits(ref, path, 1).first | ||
| 76 | end | 86 | end |
| 77 | 87 | ||
| 78 | # Returns an Array of branch names | 88 | # Returns an Array of branch names |
| @@ -0,0 +1,75 @@ | @@ -0,0 +1,75 @@ | ||
| 1 | +module Gitlab | ||
| 2 | + module Git | ||
| 3 | + class Stats | ||
| 4 | + attr_accessor :repo, :ref | ||
| 5 | + | ||
| 6 | + def initialize repo, ref | ||
| 7 | + @repo, @ref = repo, ref | ||
| 8 | + end | ||
| 9 | + | ||
| 10 | + def authors | ||
| 11 | + @authors ||= collect_authors | ||
| 12 | + end | ||
| 13 | + | ||
| 14 | + def commits_count | ||
| 15 | + @commits_count ||= repo.commit_count(ref) | ||
| 16 | + end | ||
| 17 | + | ||
| 18 | + def files_count | ||
| 19 | + args = [ref, '-r', '--name-only' ] | ||
| 20 | + repo.git.run(nil, 'ls-tree', nil, {}, args).split("\n").count | ||
| 21 | + end | ||
| 22 | + | ||
| 23 | + def authors_count | ||
| 24 | + authors.size | ||
| 25 | + end | ||
| 26 | + | ||
| 27 | + def graph | ||
| 28 | + @graph ||= build_graph | ||
| 29 | + end | ||
| 30 | + | ||
| 31 | + protected | ||
| 32 | + | ||
| 33 | + def collect_authors | ||
| 34 | + shortlog = repo.git.shortlog({e: true, s: true }, ref) | ||
| 35 | + | ||
| 36 | + authors = [] | ||
| 37 | + | ||
| 38 | + lines = shortlog.split("\n") | ||
| 39 | + | ||
| 40 | + lines.each do |line| | ||
| 41 | + data = line.split("\t") | ||
| 42 | + commits = data.first | ||
| 43 | + author = Grit::Actor.from_string(data.last) | ||
| 44 | + | ||
| 45 | + authors << OpenStruct.new( | ||
| 46 | + name: author.name, | ||
| 47 | + email: author.email, | ||
| 48 | + commits: commits.to_i | ||
| 49 | + ) | ||
| 50 | + end | ||
| 51 | + | ||
| 52 | + authors.sort_by(&:commits).reverse | ||
| 53 | + end | ||
| 54 | + | ||
| 55 | + def build_graph n = 4 | ||
| 56 | + from, to = (Date.today - n.weeks), Date.today | ||
| 57 | + args = ['--all', "--since=#{from.to_s(:date)}", '--format=%ad' ] | ||
| 58 | + rev_list = repo.git.run(nil, 'rev-list', nil, {}, args).split("\n") | ||
| 59 | + | ||
| 60 | + commits_dates = rev_list.values_at(* rev_list.each_index.select {|i| i.odd?}) | ||
| 61 | + commits_dates = commits_dates.map { |date_str| Time.parse(date_str).to_date.to_s(:date) } | ||
| 62 | + | ||
| 63 | + commits_per_day = from.upto(to).map do |day| | ||
| 64 | + commits_dates.count(day.to_date.to_s(:date)) | ||
| 65 | + end | ||
| 66 | + | ||
| 67 | + OpenStruct.new( | ||
| 68 | + labels: from.upto(to).map { |day| day.stamp('Aug 23') }, | ||
| 69 | + commits: commits_per_day, | ||
| 70 | + weeks: n | ||
| 71 | + ) | ||
| 72 | + end | ||
| 73 | + end | ||
| 74 | + end | ||
| 75 | +end |
lib/gitlab/git/tree.rb
lib/gitlab/git_stats.rb
| @@ -1,73 +0,0 @@ | @@ -1,73 +0,0 @@ | ||
| 1 | -module Gitlab | ||
| 2 | - class GitStats | ||
| 3 | - attr_accessor :repo, :ref | ||
| 4 | - | ||
| 5 | - def initialize repo, ref | ||
| 6 | - @repo, @ref = repo, ref | ||
| 7 | - end | ||
| 8 | - | ||
| 9 | - def authors | ||
| 10 | - @authors ||= collect_authors | ||
| 11 | - end | ||
| 12 | - | ||
| 13 | - def commits_count | ||
| 14 | - @commits_count ||= repo.commit_count(ref) | ||
| 15 | - end | ||
| 16 | - | ||
| 17 | - def files_count | ||
| 18 | - args = [ref, '-r', '--name-only' ] | ||
| 19 | - repo.git.run(nil, 'ls-tree', nil, {}, args).split("\n").count | ||
| 20 | - end | ||
| 21 | - | ||
| 22 | - def authors_count | ||
| 23 | - authors.size | ||
| 24 | - end | ||
| 25 | - | ||
| 26 | - def graph | ||
| 27 | - @graph ||= build_graph | ||
| 28 | - end | ||
| 29 | - | ||
| 30 | - protected | ||
| 31 | - | ||
| 32 | - def collect_authors | ||
| 33 | - shortlog = repo.git.shortlog({e: true, s: true }, ref) | ||
| 34 | - | ||
| 35 | - authors = [] | ||
| 36 | - | ||
| 37 | - lines = shortlog.split("\n") | ||
| 38 | - | ||
| 39 | - lines.each do |line| | ||
| 40 | - data = line.split("\t") | ||
| 41 | - commits = data.first | ||
| 42 | - author = Grit::Actor.from_string(data.last) | ||
| 43 | - | ||
| 44 | - authors << OpenStruct.new( | ||
| 45 | - name: author.name, | ||
| 46 | - email: author.email, | ||
| 47 | - commits: commits.to_i | ||
| 48 | - ) | ||
| 49 | - end | ||
| 50 | - | ||
| 51 | - authors.sort_by(&:commits).reverse | ||
| 52 | - end | ||
| 53 | - | ||
| 54 | - def build_graph n = 4 | ||
| 55 | - from, to = (Date.today - n.weeks), Date.today | ||
| 56 | - args = ['--all', "--since=#{from.to_s(:date)}", '--format=%ad' ] | ||
| 57 | - rev_list = repo.git.run(nil, 'rev-list', nil, {}, args).split("\n") | ||
| 58 | - | ||
| 59 | - commits_dates = rev_list.values_at(* rev_list.each_index.select {|i| i.odd?}) | ||
| 60 | - commits_dates = commits_dates.map { |date_str| Time.parse(date_str).to_date.to_s(:date) } | ||
| 61 | - | ||
| 62 | - commits_per_day = from.upto(to).map do |day| | ||
| 63 | - commits_dates.count(day.to_date.to_s(:date)) | ||
| 64 | - end | ||
| 65 | - | ||
| 66 | - OpenStruct.new( | ||
| 67 | - labels: from.upto(to).map { |day| day.stamp('Aug 23') }, | ||
| 68 | - commits: commits_per_day, | ||
| 69 | - weeks: n | ||
| 70 | - ) | ||
| 71 | - end | ||
| 72 | - end | ||
| 73 | -end |