diff --git a/app/controllers/blame_controller.rb b/app/controllers/blame_controller.rb index 76caa4a69c4dea822b80b238a39879892c4d8914..310b567cfe6481df4e9c35715f12444729a6b6b1 100644 --- a/app/controllers/blame_controller.rb +++ b/app/controllers/blame_controller.rb @@ -8,7 +8,6 @@ class BlameController < ProjectResourceController before_filter :require_non_empty_project def show - @repo = @project.repo - @blame = Grit::Blob.blame(@repo, @commit.id, @path) + @blame = Gitlab::Git::Blame.new(project.repository, @commit.id, @path) end end diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index b72da783d088b9632be99c7ae9a55a7ef7a0fdc0..750e9c2380ef821c6835547c51d80f3d2fd8887d 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -8,12 +8,12 @@ class CompareController < ProjectResourceController end def show - result = Commit.compare(project, params[:from], params[:to]) + compare = Gitlab::Git::Compare.new(project.repository, params[:from], params[:to]) - @commits = result[:commits] - @commit = result[:commit] - @diffs = result[:diffs] - @refs_are_same = result[:same] + @commits = compare.commits + @commit = compare.commit + @diffs = compare.diffs + @refs_are_same = compare.same @line_notes = [] end diff --git a/app/models/commit.rb b/app/models/commit.rb index 96c8577f90e56b189c5c6b97dc1097ac3ada816b..e3363350997ebc5ee1520e06d6a236e3f19e6b28 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -8,6 +8,10 @@ class Commit # DIFF_SAFE_SIZE = 100 + def self.decorate(commits) + commits.map { |c| self.new(c) } + end + attr_accessor :raw def initialize(raw_commit) diff --git a/app/models/gollum_wiki.rb b/app/models/gollum_wiki.rb index cdfcd567a434d531a9463615dc67f846d0ad33e6..647058e8ec9744dd52e76ac460c7ab96c43185fe 100644 --- a/app/models/gollum_wiki.rb +++ b/app/models/gollum_wiki.rb @@ -114,5 +114,4 @@ class GollumWiki def path_to_repo @path_to_repo ||= File.join(Gitlab.config.gitlab_shell.repos_path, "#{path_with_namespace}.git") end - end diff --git a/app/models/repository.rb b/app/models/repository.rb index be6502ebf5cadda56bfe88c2bf9e6b61978a117b..0a4431f14c12559c2663ab40b1af7bf25d798dde 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -13,13 +13,13 @@ class Repository def commits(ref, path = nil, limit = nil, offset = nil) commits = raw_repository.commits(ref, path, limit, offset) - commits = decorate_commits(commits) if commits.present? + commits = Commit.decorate(commits) if commits.present? commits end def commits_between(target, source) commits = raw_repository.commits_between(target, source) - commits = decorate_commits(commits) if commits.present? + commits = Commit.decorate(commits) if commits.present? commits end @@ -32,10 +32,4 @@ class Repository super end - - protected - - def decorate_commits(commits) - commits.map { |c| Commit.new(c) } - end end diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index adc77b22231eb49b316f91022bae362d2c21f230..497d69e8e90bab7b1b3a2721454144541ff026f6 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -79,14 +79,14 @@ class WikiPage def version return nil unless persisted? - @version ||= Commit.new(@page.version) + @version ||= Commit.new(Gitlab::Git::Commit.new(@page.version)) end # Returns an array of Gitlab Commit instances. def versions return [] unless persisted? - @page.versions.map { |v| Commit.new(v) } + @page.versions.map { |v| Commit.new(Gitlab::Git::Commit.new(v)) } end # Returns the Date that this latest version was diff --git a/app/views/blame/show.html.haml b/app/views/blame/show.html.haml index b07a514fdf7f00aa52ad52b27683162ecf83f483..96d153e627f778789042855f89fe86dc7fa591f6 100644 --- a/app/views/blame/show.html.haml +++ b/app/views/blame/show.html.haml @@ -6,7 +6,7 @@ %i.icon-angle-right = link_to project_tree_path(@project, @ref) do = @project.name - - @tree.breadcrumbs(6) do |link| + - tree_breadcrumbs(@tree, 6) do |link| \/ %li= link .clear diff --git a/app/views/compare/show.html.haml b/app/views/compare/show.html.haml index 476be2550af36754eedf66be4cfe6bc845f3193b..56c4a113ea0d0d3cf9d48569d9bae496e451c9f9 100644 --- a/app/views/compare/show.html.haml +++ b/app/views/compare/show.html.haml @@ -16,7 +16,7 @@ %div.ui-box %h5.title Commits (#{@commits.count}) - %ul.well-list= render @commits + %ul.well-list= render Commit.decorate(@commits) - unless @diffs.empty? %h4 Diff diff --git a/app/views/wikis/show.html.haml b/app/views/wikis/show.html.haml index 4102182e9231ed15ad74a67ab4f72f6889bcec00..b237bc524ed722c66e964a7e9a3ddf68f9bf137a 100644 --- a/app/views/wikis/show.html.haml +++ b/app/views/wikis/show.html.haml @@ -13,5 +13,4 @@ = preserve do = render_wiki_content(@wiki) -- commit = Commit.new(@wiki.version) -%p.time Last edited by #{commit_author_link(commit, avatar: true, size: 16)} #{time_ago_in_words @wiki.created_at} ago +%p.time Last edited by #{commit_author_link(@wiki.version, avatar: true, size: 16)} #{time_ago_in_words @wiki.created_at} ago diff --git a/lib/gitlab/git/commit.rb b/lib/gitlab/git/commit.rb index 023672f986b37975f3acc2eea02b7eb7db9a72e1..d7e1a5ca770779d4b8981c0a978eab60c14a7c4e 100644 --- a/lib/gitlab/git/commit.rb +++ b/lib/gitlab/git/commit.rb @@ -1,9 +1,9 @@ -# Gitlab::Git::Gitlab::Git::Commit is a wrapper around native Grit::Commit object +# Gitlab::Git::Commit is a wrapper around native Grit::Commit object # We dont want to use grit objects inside app/ # It helps us easily migrate to rugged in future module Gitlab module Git - class Gitlab::Git::Commit + class Commit attr_accessor :raw_commit, :head, :refs delegate :message, :authored_date, :committed_date, :parents, :sha, @@ -18,12 +18,12 @@ module Gitlab repo.commits(root_ref).first end - Gitlab::Git::Commit.new(commit) if commit + 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| Gitlab::Git::Commit.new(c, h) } + repo.commits(h.name, n).map { |c| Commit.new(c, h) } end.flatten.uniq { |c| c.id } commits.sort! do |x, y| @@ -34,7 +34,7 @@ module Gitlab end def commits_with_refs(repo, n = 20) - commits = repo.branches.map { |ref| Gitlab::Git::Commit.new(ref.commit, ref) } + commits = repo.branches.map { |ref| Commit.new(ref.commit, ref) } commits.sort! do |x, y| y.committed_date <=> x.committed_date @@ -45,7 +45,7 @@ module Gitlab def commits_since(repo, date) commits = repo.heads.map do |h| - repo.log(h.name, nil, since: date).each { |c| Gitlab::Git::Commit.new(c, 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| @@ -62,41 +62,11 @@ module Gitlab repo.commits(ref, limit, offset) else repo.commits(ref) - end.map{ |c| Gitlab::Git::Commit.new(c) } + end.map{ |c| Commit.new(c) } end def commits_between(repo, from, to) - repo.commits_between(from, to).map { |c| Gitlab::Git::Commit.new(c) } - end - - def compare(project, from, to) - result = { - commits: [], - diffs: [], - commit: nil, - same: false - } - - return result unless from && to - - first = project.repository.commit(to.try(:strip)) - last = project.repository.commit(from.try(:strip)) - - if first && last - result[:same] = (first.id == last.id) - result[:commits] = project.repo.commits_between(last.id, first.id).map {|c| Gitlab::Git::Commit.new(c)} - - # Dont load diff for 100+ commits - result[:diffs] = if result[:commits].size > 100 - [] - else - project.repo.diff(last.id, first.id) rescue [] - end - - result[:commit] = Gitlab::Git::Commit.new(first) - end - - result + repo.commits_between(from, to).map { |c| Commit.new(c) } end end @@ -142,7 +112,7 @@ module Gitlab def prev_commit @prev_commit ||= if parents.present? - Gitlab::Git::Commit.new(parents.first) + Commit.new(parents.first) else nil end @@ -156,7 +126,7 @@ module Gitlab # # Cuts out the header and stats from #to_patch and returns only the diff. def to_diff - # see Grit::Gitlab::Git::Commit#show + # see Grit::Commit#show patch = to_patch # discard lines before the diff diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb index 769405b6ffb6169112627b44edbbfddd1b34aaf2..0f81347dd6b965fbac46977df8069a64c910e2f1 100644 --- a/spec/support/test_env.rb +++ b/spec/support/test_env.rb @@ -17,15 +17,18 @@ module TestEnv repos_path = Rails.root.join('tmp', 'test-git-base-path') Gitlab.config.gitlab_shell.stub(repos_path: repos_path) + Gitlab::Shell.any_instance.stub(:add_repository) do |path| + create_temp_repo(File.join(repos_path, "#{path}.git")) + end + Gitlab::Shell.any_instance.stub( - add_repository: ->(path) { create_temp_repo(File.join(repos_path, "#{path}.git")) }, mv_repository: true, remove_repository: true, add_key: true, remove_key: true ) - fake_satellite = double( + fake_satellite = stub( exists?: true, destroy: true, create: true