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 | 17 | end |
18 | 18 | |
19 | 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 | 21 | @graph = @stats.graph |
22 | 22 | end |
23 | 23 | ... | ... |
app/controllers/wikis_controller.rb
... | ... | @@ -49,9 +49,9 @@ class WikisController < ProjectResourceController |
49 | 49 | end |
50 | 50 | |
51 | 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 | 55 | end |
56 | 56 | |
57 | 57 | def destroy | ... | ... |
app/models/gollum_wiki.rb
... | ... | @@ -47,12 +47,6 @@ class GollumWiki |
47 | 47 | wiki.pages.map { |page| WikiPage.new(self, page, true) } |
48 | 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 | 50 | # Finds a page within the repository based on a tile |
57 | 51 | # or slug. |
58 | 52 | # | ... | ... |
app/models/network/graph.rb
... | ... | @@ -25,10 +25,9 @@ module Network |
25 | 25 | def collect_commits |
26 | 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 | 31 | end |
33 | 32 | end |
34 | 33 | |
... | ... | @@ -93,15 +92,13 @@ module Network |
93 | 92 | end |
94 | 93 | |
95 | 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 | 102 | end |
106 | 103 | |
107 | 104 | def commits_sort_by_ref | ... | ... |
lib/gitlab/git/commit.rb
... | ... | @@ -12,70 +12,6 @@ module Gitlab |
12 | 12 | delegate :parents, :diffs, :tree, :stats, :to_patch, |
13 | 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 | 15 | def initialize(raw_commit, head = nil) |
80 | 16 | raise "Nil as raw commit passed" unless raw_commit |
81 | 17 | |
... | ... | @@ -88,6 +24,10 @@ module Gitlab |
88 | 24 | @head = head |
89 | 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 | 31 | def sha |
92 | 32 | id |
93 | 33 | end |
... | ... | @@ -143,7 +83,7 @@ module Gitlab |
143 | 83 | def to_hash |
144 | 84 | hash = {} |
145 | 85 | |
146 | - keys = Commit.serialize_keys | |
86 | + keys = serialize_keys | |
147 | 87 | |
148 | 88 | keys.each do |key| |
149 | 89 | hash[key] = send(key) |
... | ... | @@ -172,7 +112,7 @@ module Gitlab |
172 | 112 | end |
173 | 113 | |
174 | 114 | def init_from_hash(hash) |
175 | - Commit.serialize_keys.each do |key| | |
115 | + serialize_keys.each do |key| | |
176 | 116 | send(:"#{key}=", hash[key]) |
177 | 117 | end |
178 | 118 | end | ... | ... |
lib/gitlab/git/repository.rb
... | ... | @@ -48,31 +48,41 @@ module Gitlab |
48 | 48 | end |
49 | 49 | |
50 | 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 | 58 | end |
57 | 59 | |
58 | 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 | 68 | end |
65 | 69 | |
66 | 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 | 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 | 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 | 86 | end |
77 | 87 | |
78 | 88 | # Returns an Array of branch names | ... | ... |
... | ... | @@ -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 | -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 |