Commit 49b024f5 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Use Gitlab::Git:: for git features across application

parent bb06e905
...@@ -8,7 +8,6 @@ class BlameController < ProjectResourceController ...@@ -8,7 +8,6 @@ class BlameController < ProjectResourceController
before_filter :require_non_empty_project before_filter :require_non_empty_project
def show def show
@repo = @project.repo @blame = Gitlab::Git::Blame.new(project.repository, @commit.id, @path)
@blame = Grit::Blob.blame(@repo, @commit.id, @path)
end end
end end
...@@ -8,12 +8,12 @@ class CompareController < ProjectResourceController ...@@ -8,12 +8,12 @@ class CompareController < ProjectResourceController
end end
def show def show
result = Commit.compare(project, params[:from], params[:to]) compare = Gitlab::Git::Compare.new(project.repository, params[:from], params[:to])
@commits = result[:commits] @commits = compare.commits
@commit = result[:commit] @commit = compare.commit
@diffs = result[:diffs] @diffs = compare.diffs
@refs_are_same = result[:same] @refs_are_same = compare.same
@line_notes = [] @line_notes = []
end end
......
...@@ -8,6 +8,10 @@ class Commit ...@@ -8,6 +8,10 @@ class Commit
# #
DIFF_SAFE_SIZE = 100 DIFF_SAFE_SIZE = 100
def self.decorate(commits)
commits.map { |c| self.new(c) }
end
attr_accessor :raw attr_accessor :raw
def initialize(raw_commit) def initialize(raw_commit)
......
...@@ -114,5 +114,4 @@ class GollumWiki ...@@ -114,5 +114,4 @@ class GollumWiki
def path_to_repo def path_to_repo
@path_to_repo ||= File.join(Gitlab.config.gitlab_shell.repos_path, "#{path_with_namespace}.git") @path_to_repo ||= File.join(Gitlab.config.gitlab_shell.repos_path, "#{path_with_namespace}.git")
end end
end end
...@@ -13,13 +13,13 @@ class Repository ...@@ -13,13 +13,13 @@ class Repository
def commits(ref, path = nil, limit = nil, offset = nil) def commits(ref, path = nil, limit = nil, offset = nil)
commits = raw_repository.commits(ref, path, limit, offset) commits = raw_repository.commits(ref, path, limit, offset)
commits = decorate_commits(commits) if commits.present? commits = Commit.decorate(commits) if commits.present?
commits commits
end end
def commits_between(target, source) def commits_between(target, source)
commits = raw_repository.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 commits
end end
...@@ -32,10 +32,4 @@ class Repository ...@@ -32,10 +32,4 @@ class Repository
super super
end end
protected
def decorate_commits(commits)
commits.map { |c| Commit.new(c) }
end
end end
...@@ -79,14 +79,14 @@ class WikiPage ...@@ -79,14 +79,14 @@ class WikiPage
def version def version
return nil unless persisted? return nil unless persisted?
@version ||= Commit.new(@page.version) @version ||= Commit.new(Gitlab::Git::Commit.new(@page.version))
end end
# Returns an array of Gitlab Commit instances. # Returns an array of Gitlab Commit instances.
def versions def versions
return [] unless persisted? return [] unless persisted?
@page.versions.map { |v| Commit.new(v) } @page.versions.map { |v| Commit.new(Gitlab::Git::Commit.new(v)) }
end end
# Returns the Date that this latest version was # Returns the Date that this latest version was
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
%i.icon-angle-right %i.icon-angle-right
= link_to project_tree_path(@project, @ref) do = link_to project_tree_path(@project, @ref) do
= @project.name = @project.name
- @tree.breadcrumbs(6) do |link| - tree_breadcrumbs(@tree, 6) do |link|
\/ \/
%li= link %li= link
.clear .clear
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
%div.ui-box %div.ui-box
%h5.title %h5.title
Commits (#{@commits.count}) Commits (#{@commits.count})
%ul.well-list= render @commits %ul.well-list= render Commit.decorate(@commits)
- unless @diffs.empty? - unless @diffs.empty?
%h4 Diff %h4 Diff
......
...@@ -13,5 +13,4 @@ ...@@ -13,5 +13,4 @@
= preserve do = preserve do
= render_wiki_content(@wiki) = render_wiki_content(@wiki)
- commit = Commit.new(@wiki.version) %p.time Last edited by #{commit_author_link(@wiki.version, avatar: true, size: 16)} #{time_ago_in_words @wiki.created_at} ago
%p.time Last edited by #{commit_author_link(commit, avatar: true, size: 16)} #{time_ago_in_words @wiki.created_at} ago
# 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/ # We dont want to use grit objects inside app/
# It helps us easily migrate to rugged in future # It helps us easily migrate to rugged in future
module Gitlab module Gitlab
module Git module Git
class Gitlab::Git::Commit class Commit
attr_accessor :raw_commit, :head, :refs attr_accessor :raw_commit, :head, :refs
delegate :message, :authored_date, :committed_date, :parents, :sha, delegate :message, :authored_date, :committed_date, :parents, :sha,
...@@ -18,12 +18,12 @@ module Gitlab ...@@ -18,12 +18,12 @@ module Gitlab
repo.commits(root_ref).first repo.commits(root_ref).first
end end
Gitlab::Git::Commit.new(commit) if commit Commit.new(commit) if commit
end end
def fresh_commits(repo, n = 10) def fresh_commits(repo, n = 10)
commits = repo.heads.map do |h| 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 } end.flatten.uniq { |c| c.id }
commits.sort! do |x, y| commits.sort! do |x, y|
...@@ -34,7 +34,7 @@ module Gitlab ...@@ -34,7 +34,7 @@ module Gitlab
end end
def commits_with_refs(repo, n = 20) 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| commits.sort! do |x, y|
y.committed_date <=> x.committed_date y.committed_date <=> x.committed_date
...@@ -45,7 +45,7 @@ module Gitlab ...@@ -45,7 +45,7 @@ module Gitlab
def commits_since(repo, date) def commits_since(repo, date)
commits = repo.heads.map do |h| 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 } end.flatten.uniq { |c| c.id }
commits.sort! do |x, y| commits.sort! do |x, y|
...@@ -62,41 +62,11 @@ module Gitlab ...@@ -62,41 +62,11 @@ module Gitlab
repo.commits(ref, limit, offset) repo.commits(ref, limit, offset)
else else
repo.commits(ref) repo.commits(ref)
end.map{ |c| Gitlab::Git::Commit.new(c) } end.map{ |c| Commit.new(c) }
end end
def commits_between(repo, from, to) def commits_between(repo, from, to)
repo.commits_between(from, to).map { |c| Gitlab::Git::Commit.new(c) } repo.commits_between(from, to).map { |c| 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
end end
end end
...@@ -142,7 +112,7 @@ module Gitlab ...@@ -142,7 +112,7 @@ module Gitlab
def prev_commit def prev_commit
@prev_commit ||= if parents.present? @prev_commit ||= if parents.present?
Gitlab::Git::Commit.new(parents.first) Commit.new(parents.first)
else else
nil nil
end end
...@@ -156,7 +126,7 @@ module Gitlab ...@@ -156,7 +126,7 @@ module Gitlab
# #
# Cuts out the header and stats from #to_patch and returns only the diff. # Cuts out the header and stats from #to_patch and returns only the diff.
def to_diff def to_diff
# see Grit::Gitlab::Git::Commit#show # see Grit::Commit#show
patch = to_patch patch = to_patch
# discard lines before the diff # discard lines before the diff
......
...@@ -17,15 +17,18 @@ module TestEnv ...@@ -17,15 +17,18 @@ module TestEnv
repos_path = Rails.root.join('tmp', 'test-git-base-path') repos_path = Rails.root.join('tmp', 'test-git-base-path')
Gitlab.config.gitlab_shell.stub(repos_path: repos_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( Gitlab::Shell.any_instance.stub(
add_repository: ->(path) { create_temp_repo(File.join(repos_path, "#{path}.git")) },
mv_repository: true, mv_repository: true,
remove_repository: true, remove_repository: true,
add_key: true, add_key: true,
remove_key: true remove_key: true
) )
fake_satellite = double( fake_satellite = stub(
exists?: true, exists?: true,
destroy: true, destroy: true,
create: true create: true
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment