summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/blame_controller.rb27
-rw-r--r--app/controllers/blob_controller.rb24
-rw-r--r--app/controllers/tree_controller.rb29
-rw-r--r--app/views/tree/show.html.haml2
-rw-r--r--app/views/tree/show.js.haml2
-rw-r--r--lib/ref_extractor.rb27
6 files changed, 38 insertions, 73 deletions
diff --git a/app/controllers/blame_controller.rb b/app/controllers/blame_controller.rb
index d159a83c8cb..dd5be6dcd58 100644
--- a/app/controllers/blame_controller.rb
+++ b/app/controllers/blame_controller.rb
@@ -1,7 +1,5 @@
# Controller for viewing a file's blame
class BlameController < ApplicationController
- # Thrown when given an invalid path
- class InvalidPathError < StandardError; end
include RefExtractor
@@ -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
diff --git a/app/controllers/blob_controller.rb b/app/controllers/blob_controller.rb
index bb051281013..58e70bc9d04 100644
--- a/app/controllers/blob_controller.rb
+++ b/app/controllers/blob_controller.rb
@@ -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?
@@ -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
diff --git a/app/controllers/tree_controller.rb b/app/controllers/tree_controller.rb
index 15bbb1a3c77..e0dd8f8beaf 100644
--- a/app/controllers/tree_controller.rb
+++ b/app/controllers/tree_controller.rb
@@ -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
diff --git a/app/views/tree/show.html.haml b/app/views/tree/show.html.haml
index 181be6426d4..d95f90e0b54 100644
--- a/app/views/tree/show.html.haml
+++ b/app/views/tree/show.html.haml
@@ -1,5 +1,5 @@
= 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() {
diff --git a/app/views/tree/show.js.haml b/app/views/tree/show.js.haml
index 3d0215ff51f..174e3e03a52 100644
--- a/app/views/tree/show.js.haml
+++ b/app/views/tree/show.js.haml
@@ -1,6 +1,6 @@
: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}");
diff --git a/lib/ref_extractor.rb b/lib/ref_extractor.rb
index d7d446b1e62..b9c0291761d 100644
--- a/lib/ref_extractor.rb
+++ b/lib/ref_extractor.rb
@@ -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