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 |