Skip to content
Snippets Groups Projects
Commit 398ba6f1 authored by Robert Speicher's avatar Robert Speicher
Browse files

DRY up Blame, Blob and Tree controllers

parent 576cec6c
No related branches found
No related tags found
1 merge request!1568Routing overhaul
# Controller for viewing a file's blame
class BlameController < ApplicationController
# Thrown when given an invalid path
class InvalidPathError < StandardError; end
 
include RefExtractor
 
Loading
Loading
@@ -15,31 +13,10 @@ class BlameController < ApplicationController
before_filter :authorize_code_access!
before_filter :require_non_empty_project
 
before_filter :define_tree_vars
before_filter :assign_ref_vars
 
def show
@repo = @project.repo
@blame = Grit::Blob.blame(@repo, @commit.id, @path)
end
private
def define_tree_vars
@ref, @path = extract_ref(params[:id])
@id = File.join(@ref, @path)
@repo = @project.repo
@commit = CommitDecorator.decorate(@project.commit(@ref))
@tree = Tree.new(@commit.tree, @project, @ref, @path)
@tree = TreeDecorator.new(@tree)
raise InvalidPathError if @tree.invalid?
@hex_path = Digest::SHA1.hexdigest(@path)
@history_path = project_tree_path(@project, @id)
@logs_path = logs_file_project_ref_path(@project, @ref, @path)
rescue NoMethodError, InvalidPathError
not_found!
end
end
Loading
Loading
@@ -16,7 +16,7 @@ class BlobController < ApplicationController
before_filter :authorize_code_access!
before_filter :require_non_empty_project
 
before_filter :define_tree_vars
before_filter :assign_ref_vars
 
def show
if @tree.is_blob?
Loading
Loading
@@ -37,26 +37,4 @@ class BlobController < ApplicationController
not_found!
end
end
private
def define_tree_vars
@ref, @path = extract_ref(params[:id])
@id = File.join(@ref, @path)
@repo = @project.repo
@commit = CommitDecorator.decorate(@project.commit(@ref))
@tree = Tree.new(@commit.tree, @project, @ref, @path)
@tree = TreeDecorator.new(@tree)
raise InvalidPathError if @tree.invalid?
@hex_path = Digest::SHA1.hexdigest(@path)
@history_path = project_tree_path(@project, @id)
@logs_path = logs_file_project_ref_path(@project, @ref, @path)
rescue NoMethodError, InvalidPathError
not_found!
end
end
Loading
Loading
@@ -15,35 +15,18 @@ class TreeController < ApplicationController
before_filter :authorize_code_access!
before_filter :require_non_empty_project
 
before_filter :define_tree_vars
before_filter :assign_ref_vars
 
def show
@hex_path = Digest::SHA1.hexdigest(@path)
@history_path = project_tree_path(@project, @id)
@logs_path = logs_file_project_ref_path(@project, @ref, @path)
respond_to do |format|
format.html
# Disable cache so browser history works
format.js { no_cache_headers }
end
end
private
def define_tree_vars
@ref, @path = extract_ref(params[:id])
@id = File.join(@ref, @path)
@repo = @project.repo
@commit = CommitDecorator.decorate(@project.commit(@ref))
@tree = Tree.new(@commit.tree, @project, @ref, @path.gsub(/^\//, ''))
@tree = TreeDecorator.new(@tree)
raise InvalidPathError if @tree.invalid?
@hex_path = Digest::SHA1.hexdigest(@path)
@history_path = project_tree_path(@project, @id)
@logs_path = logs_file_project_ref_path(@project, @ref, @path)
rescue NoMethodError, InvalidPathError
not_found!
end
end
= render "head"
#tree-holder= render partial: "tree", locals: {repo: @repo, commit: @commit, tree: @tree}
#tree-holder= render partial: "tree", locals: {commit: @commit, tree: @tree}
 
:javascript
$(function() {
Loading
Loading
:plain
// Load Files list
$("#tree-holder").html("#{escape_javascript(render(partial: "tree", locals: {repo: @repo, commit: @commit, tree: @tree}))}");
$("#tree-holder").html("#{escape_javascript(render(partial: "tree", locals: {commit: @commit, tree: @tree}))}");
$("#tree-content-holder").show("slide", { direction: "right" }, 150);
$('.project-refs-form #path').val("#{@path}");
 
Loading
Loading
Loading
Loading
@@ -67,4 +67,31 @@ module RefExtractor
 
pair
end
# Assigns common instance variables for views working with Git tree-ish objects
#
# Assignments are:
#
# - @id - A string representing the joined ref and path
# - @ref - A string representing the ref (e.g., the branch, tag, or commit SHA)
# - @path - A string representing the filesystem path
# - @commit - A CommitDecorator representing the commit from the given ref
# - @tree - A TreeDecorator representing the tree at the given ref/path
#
# Automatically renders `not_found!` if a valid tree could not be resolved
# (e.g., when a user inserts an invalid path or ref).
def assign_ref_vars
@ref, @path = extract_ref(params[:id])
@id = File.join(@ref, @path)
@commit = CommitDecorator.decorate(@project.commit(@ref))
@tree = Tree.new(@commit.tree, @project, @ref, @path)
@tree = TreeDecorator.new(@tree)
raise InvalidPathError if @tree.invalid?
rescue NoMethodError, InvalidPathError
not_found!
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment