Commit 97a4d8ae authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Improve code according to new gitlab_git

Signed-off-by: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
parent bacfad1c
......@@ -166,13 +166,13 @@ module GitlabMarkdownHelper
def file_exists?(path)
return false if path.nil? || path.empty?
return @repository.blob_at(current_ref, path).present? || Tree.new(@repository, current_ref, path).entries.any?
return @repository.blob_at(current_ref, path).present? || @repository.tree(:head, path).entries.any?
end
# Check if the path is pointing to a directory(tree) or a file(blob)
# eg. doc/api is directory and doc/README.md is file
def local_path(path)
return "tree" if Tree.new(@repository, current_ref, path).entries.any?
return "tree" if @repository.tree(:head, path).entries.any?
return "raw" if @repository.blob_at(current_ref, path).image?
return "blob"
end
......
......@@ -163,7 +163,19 @@ class Repository
def readme
Rails.cache.fetch(cache_key(:readme)) do
Tree.new(self, self.root_ref).readme
tree(:head).readme
end
end
def head_commit
commit(self.root_ref)
end
def tree(sha = :head, path = nil)
if sha == :head
sha = head_commit.sha
end
Tree.new(self, sha, path)
end
end
......@@ -23,4 +23,8 @@ class Tree
def submodules
@entries.select(&:submodule?)
end
def sorted_entries
trees + blobs + submodules
end
end
......@@ -79,7 +79,16 @@ module API
end
class RepoObject < Grape::Entity
expose :name, :commit
expose :name
expose :commit do |repo_obj, options|
if repo_obj.respond_to?(:commit)
repo_obj.commit
elsif options[:project]
options[:project].repository.commit(repo_obj.target)
end
end
expose :protected do |repo, options|
if options[:project]
options[:project].protected_branch? repo.name
......@@ -87,6 +96,16 @@ module API
end
end
class RepoTreeObject < Grape::Entity
expose :id, :name, :type
expose :mode do |obj, options|
filemode = obj.mode.to_s(8)
filemode = "0" + filemode if filemode.length < 6
filemode
end
end
class RepoCommit < Grape::Entity
expose :id, :short_id, :title, :author_name, :author_email, :created_at
end
......
......@@ -82,7 +82,7 @@ module API
# Example Request:
# GET /projects/:id/repository/tags
get ":id/repository/tags" do
present user_project.repo.tags.sort_by(&:name).reverse, with: Entities::RepoObject
present user_project.repo.tags.sort_by(&:name).reverse, with: Entities::RepoObject, project: user_project
end
# Get a project repository commits
......@@ -141,15 +141,9 @@ module API
path = params[:path] || nil
commit = user_project.repository.commit(ref)
tree = Tree.new(user_project.repository, commit.id, path)
tree = user_project.repository.tree(commit.id, path)
trees = []
%w(trees blobs submodules).each do |type|
trees += tree.send(type).map { |t| {name: t.name, type: type.singularize, mode: t.mode, id: t.id} }
end
trees
present tree.sorted_entries, with: Entities::RepoTreeObject
end
# Get a raw file contents
......@@ -233,4 +227,3 @@ module API
end
end
end
......@@ -117,7 +117,7 @@ module ExtractsPath
end
def tree
@tree ||= Tree.new(@repo, @commit.id, @path)
@tree ||= @repo.tree(@commit.id, @path)
end
private
......
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