Use Gitlab::Git:: for git features across application
parent
bb06e905ef
commit
49b024f5f5
|
@ -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
|
||||||
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
|
||||||
#
|
#
|
||||||
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
|
||||||
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
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
|
||||||
|
|
||||||
def decorate_commits(commits)
|
|
||||||
commits.map { |c| Commit.new(c) }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -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 @@
|
||||||
%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 @@
|
||||||
%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 @@
|
||||||
= 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
|
|
||||||
|
|
|
@ -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/
|
# 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
|
||||||
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
|
||||||
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
|
||||||
|
|
||||||
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
|
||||||
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
|
||||||
|
|
||||||
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
|
||||||
#
|
#
|
||||||
# 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
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue