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 # Controller for viewing a file's blame
class BlameController < ApplicationController class BlameController < ApplicationController
# Thrown when given an invalid path
class InvalidPathError < StandardError; end
   
include RefExtractor include RefExtractor
   
Loading
@@ -15,31 +13,10 @@ class BlameController < ApplicationController
Loading
@@ -15,31 +13,10 @@ class BlameController < ApplicationController
before_filter :authorize_code_access! before_filter :authorize_code_access!
before_filter :require_non_empty_project before_filter :require_non_empty_project
   
before_filter :define_tree_vars before_filter :assign_ref_vars
   
def show def show
@repo = @project.repo
@blame = Grit::Blob.blame(@repo, @commit.id, @path) @blame = Grit::Blob.blame(@repo, @commit.id, @path)
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 end
Loading
@@ -16,7 +16,7 @@ class BlobController < ApplicationController
Loading
@@ -16,7 +16,7 @@ class BlobController < ApplicationController
before_filter :authorize_code_access! before_filter :authorize_code_access!
before_filter :require_non_empty_project before_filter :require_non_empty_project
   
before_filter :define_tree_vars before_filter :assign_ref_vars
   
def show def show
if @tree.is_blob? if @tree.is_blob?
Loading
@@ -37,26 +37,4 @@ class BlobController < ApplicationController
Loading
@@ -37,26 +37,4 @@ class BlobController < ApplicationController
not_found! not_found!
end end
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 end
Loading
@@ -15,35 +15,18 @@ class TreeController < ApplicationController
Loading
@@ -15,35 +15,18 @@ class TreeController < ApplicationController
before_filter :authorize_code_access! before_filter :authorize_code_access!
before_filter :require_non_empty_project before_filter :require_non_empty_project
   
before_filter :define_tree_vars before_filter :assign_ref_vars
   
def show 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| respond_to do |format|
format.html format.html
# Disable cache so browser history works # Disable cache so browser history works
format.js { no_cache_headers } format.js { no_cache_headers }
end end
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 end
= render "head" = 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 :javascript
$(function() { $(function() {
Loading
Loading
:plain :plain
// Load Files list // 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); $("#tree-content-holder").show("slide", { direction: "right" }, 150);
$('.project-refs-form #path').val("#{@path}"); $('.project-refs-form #path').val("#{@path}");
   
Loading
Loading
Loading
@@ -67,4 +67,31 @@ module RefExtractor
Loading
@@ -67,4 +67,31 @@ module RefExtractor
   
pair pair
end 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 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