Commit 03f41e28 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Gitlab::Git::Tree & Blob added

parent 0c5795a4
...@@ -30,7 +30,7 @@ class RefsController < ProjectResourceController ...@@ -30,7 +30,7 @@ class RefsController < ProjectResourceController
end end
def logs_tree def logs_tree
contents = @tree.contents contents = @tree.entries
@logs = contents.map do |content| @logs = contents.map do |content|
file = params[:path] ? File.join(params[:path], content.name) : content.name file = params[:path] ? File.join(params[:path], content.name) : content.name
last_commit = @repo.commits(@commit.id, file, 1).last last_commit = @repo.commits(@commit.id, file, 1).last
......
...@@ -3,9 +3,9 @@ module TreeHelper ...@@ -3,9 +3,9 @@ module TreeHelper
# their corresponding partials # their corresponding partials
# #
# contents - A Grit::Tree object for the current tree # contents - A Grit::Tree object for the current tree
def render_tree(contents) def render_tree(tree)
# Render Folders before Files/Submodules # Render Folders before Files/Submodules
folders, files = contents.partition { |v| v.kind_of?(Grit::Tree) } folders, files = tree.trees, tree.blobs
tree = "" tree = ""
...@@ -91,5 +91,4 @@ module TreeHelper ...@@ -91,5 +91,4 @@ module TreeHelper
file = File.join(tree.path, "..") file = File.join(tree.path, "..")
tree_join(tree.ref, file) tree_join(tree.ref, file)
end end
end end
...@@ -152,7 +152,7 @@ class MergeRequest < ActiveRecord::Base ...@@ -152,7 +152,7 @@ class MergeRequest < ActiveRecord::Base
end end
def commits def commits
load_commits(st_commits) || [] load_commits(st_commits || [])
end end
def probably_merged? def probably_merged?
......
class Tree class Tree
attr_accessor :path, :tree, :ref attr_accessor :raw
def initialize(repository, sha, ref = nil, path = nil) def initialize(repository, sha, ref = nil, path = nil)
@raw = Gitlab::Git::Tree.new(repository, sha, ref, path) @raw = Gitlab::Git::Tree.new(repository, sha, ref, path)
end end
def invalid?
@raw.nil?
end
def method_missing(m, *args, &block) def method_missing(m, *args, &block)
@raw.send(m, *args, &block) @raw.send(m, *args, &block)
end end
......
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
- unless @suppress_diff - unless @suppress_diff
- diffs.each_with_index do |diff, i| - diffs.each_with_index do |diff, i|
- next if diff.diff.empty? - next if diff.diff.empty?
- file = Tree.new(@repository, @commit.id, @ref, diff.new_path) - file = Gitlab::Git::Blob.new(@repository, @commit.id, @ref, diff.new_path)
- file = Tree.new(@repository, @commit.parent_id, @ref, diff.old_path) unless file - file = Gitlab::Git::Blob.new(@repository, @commit.parent_id, @ref, diff.old_path) unless file.exists?
- next unless file - next unless file
.file{id: "diff-#{i}"} .file{id: "diff-#{i}"}
.header .header
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
%span= diff.old_path %span= diff.old_path
- if @commit.parent_ids.present? - if @commit.parent_ids.present?
= link_to project_tree_path(@project, tree_join(@commit.prev_commit_id, diff.new_path)), {:class => 'btn btn-tiny pull-right view-file'} do = link_to project_tree_path(@project, tree_join(@commit.parent_id, diff.new_path)), {:class => 'btn btn-tiny pull-right view-file'} do
View file @ View file @
%span.commit-short-id= @commit.short_id(6) %span.commit-short-id= @commit.short_id(6)
- else - else
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
- if file.text? - if file.text?
= render "commits/text_file", diff: diff, index: i = render "commits/text_file", diff: diff, index: i
- elsif file.image? - elsif file.image?
- old_file = Tree.new(@repository, @commit.parent_id, @ref, diff.old_path) if @commit.parent_id - old_file = Gitlab::Git::Blob.new(@repository, @commit.parent_id, @ref, diff.old_path) if @commit.parent_id
= render "commits/image", diff: diff, old_file: old_file, file: file, index: i = render "commits/image", diff: diff, old_file: old_file, file: file, index: i
- else - else
%p.nothing_here_message No preview for this file type %p.nothing_here_message No preview for this file type
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
%td %td
%td %td
= render_tree(tree.contents) = render_tree(tree)
- if tree.readme - if tree.readme
= render "tree/readme", readme: tree.readme = render "tree/readme", readme: tree.readme
......
...@@ -104,7 +104,7 @@ module ExtractsPath ...@@ -104,7 +104,7 @@ module ExtractsPath
@tree = Tree.new(@project.repository, @commit.id, @ref, @path) @tree = Tree.new(@project.repository, @commit.id, @ref, @path)
raise InvalidPathError if @tree.invalid? raise InvalidPathError unless @tree.exists?
rescue RuntimeError, NoMethodError, InvalidPathError rescue RuntimeError, NoMethodError, InvalidPathError
not_found! not_found!
end end
......
module Gitlab
module Git
class Blob
include Linguist::BlobHelper
attr_accessor :raw_blob
delegate :name, to: :raw_blob
def initialize(repository, sha, ref, path)
@repository, @sha, @ref = repository, sha, ref
@commit = @repository.commit(sha)
@raw_blob = @repository.tree(@commit, path)
end
def data
if raw_blob
raw_blob.data
else
nil
end
end
def exists?
@raw_blob
end
end
end
end
module Gitlab module Gitlab
module Git module Git
class Tree class Tree
include Linguist::BlobHelper attr_accessor :repository, :sha, :path, :ref, :raw_tree, :id
attr_accessor :repository, :sha, :path, :ref, :raw_tree
def initialize(repository, sha, ref = nil, path = nil) def initialize(repository, sha, ref = nil, path = nil)
@repository, @sha, @ref = repository, sha, ref @repository, @sha, @ref, @path = repository, sha, ref, path
@path = nil if @path.blank?
# Load tree from repository # Load tree from repository
@commit = @repository.commit(sha) @commit = @repository.commit(@sha)
@raw_tree = @repository.tree(@commit, path) @raw_tree = @repository.tree(@commit, @path)
end
def exists?
raw_tree
end end
def empty? def empty?
data.blank? data.blank?
end end
def data def trees
raw_tree.data entries.select { |t| t.is_a?(Grit::Tree) }
end
def blobs
entries.select { |t| t.is_a?(Grit::Blob) }
end end
def is_blob? def is_blob?
tree.is_a?(Grit::Blob) raw_tree.is_a?(Grit::Blob)
end end
def up_dir? def up_dir?
...@@ -30,7 +38,13 @@ module Gitlab ...@@ -30,7 +38,13 @@ module Gitlab
end end
def readme def readme
@readme ||= contents.find { |c| c.is_a?(Grit::Blob) and c.name =~ /^readme/i } @readme ||= entries.find { |c| c.is_a?(Grit::Blob) and c.name =~ /^readme/i }
end
protected
def entries
raw_tree.contents
end end
end end
end end
......
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