Fix 404 error while displaying json files.
It uses params[:id] instead of request.fullpath. It should fix #3132.
This commit is contained in:
parent
f7ca6c5079
commit
a1fe375e44
5 changed files with 6 additions and 66 deletions
|
@ -7,8 +7,6 @@ class BlameController < ProjectResourceController
|
|||
before_filter :authorize_code_access!
|
||||
before_filter :require_non_empty_project
|
||||
|
||||
before_filter :assign_ref_vars
|
||||
|
||||
def show
|
||||
@repo = @project.repo
|
||||
@blame = Grit::Blob.blame(@repo, @commit.id, @path)
|
||||
|
|
|
@ -7,8 +7,6 @@ class BlobController < ProjectResourceController
|
|||
before_filter :authorize_code_access!
|
||||
before_filter :require_non_empty_project
|
||||
|
||||
before_filter :assign_ref_vars
|
||||
|
||||
def show
|
||||
if @tree.is_blob?
|
||||
send_data(
|
||||
|
|
|
@ -7,7 +7,6 @@ class TreeController < ProjectResourceController
|
|||
before_filter :authorize_code_access!
|
||||
before_filter :require_non_empty_project
|
||||
|
||||
before_filter :assign_ref_vars
|
||||
before_filter :edit_requirements, only: [:edit, :update]
|
||||
|
||||
def show
|
||||
|
|
|
@ -8,7 +8,7 @@ module ExtractsPath
|
|||
|
||||
included do
|
||||
if respond_to?(:before_filter)
|
||||
before_filter :assign_ref_vars, only: [:show]
|
||||
before_filter :assign_ref_vars
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -33,7 +33,7 @@ module ExtractsPath
|
|||
# extract_ref("v2.0.0/README.md")
|
||||
# # => ['v2.0.0', 'README.md']
|
||||
#
|
||||
# extract_ref('/gitlab/vagrant/tree/master/app/models/project.rb')
|
||||
# extract_ref('master/app/models/project.rb')
|
||||
# # => ['master', 'app/models/project.rb']
|
||||
#
|
||||
# extract_ref('issues/1234/app/models/project.rb')
|
||||
|
@ -45,22 +45,12 @@ module ExtractsPath
|
|||
#
|
||||
# Returns an Array where the first value is the tree-ish and the second is the
|
||||
# path
|
||||
def extract_ref(input)
|
||||
def extract_ref(id)
|
||||
pair = ['', '']
|
||||
|
||||
return pair unless @project
|
||||
|
||||
# Remove relative_url_root from path
|
||||
input.gsub!(/^#{Gitlab.config.gitlab.relative_url_root}/, "")
|
||||
# Remove project, actions and all other staff from path
|
||||
input.gsub!(/^\/#{Regexp.escape(@project.path_with_namespace)}/, "")
|
||||
input.gsub!(/^\/(tree|commits|blame|blob|refs|graph)\//, "") # remove actions
|
||||
input.gsub!(/\?.*$/, "") # remove stamps suffix
|
||||
input.gsub!(/.atom$/, "") # remove rss feed
|
||||
input.gsub!(/.json$/, "") # remove json suffix
|
||||
input.gsub!(/\/edit$/, "") # remove edit route part
|
||||
|
||||
if input.match(/^([[:alnum:]]{40})(.+)/)
|
||||
if id.match(/^([[:alnum:]]{40})(.+)/)
|
||||
# If the ref appears to be a SHA, we're done, just split the string
|
||||
pair = $~.captures
|
||||
else
|
||||
|
@ -68,7 +58,6 @@ module ExtractsPath
|
|||
# branches and tags
|
||||
|
||||
# Append a trailing slash if we only get a ref and no file path
|
||||
id = input
|
||||
id += '/' unless id.ends_with?('/')
|
||||
|
||||
valid_refs = @project.repository.ref_names
|
||||
|
@ -105,11 +94,9 @@ module ExtractsPath
|
|||
# Automatically renders `not_found!` if a valid tree path could not be
|
||||
# resolved (e.g., when a user inserts an invalid path or ref).
|
||||
def assign_ref_vars
|
||||
path = CGI::unescape(request.fullpath.dup)
|
||||
@id = params[:id]
|
||||
|
||||
@ref, @path = extract_ref(path)
|
||||
|
||||
@id = File.join(@ref, @path)
|
||||
@ref, @path = extract_ref(@id)
|
||||
|
||||
# It is used "@project.repository.commits(@ref, @path, 1, 0)",
|
||||
# because "@project.repository.commit(@ref)" returns wrong commit when @ref is tag name.
|
||||
|
|
|
@ -54,47 +54,5 @@ describe ExtractsPath do
|
|||
extract_ref('stable/CHANGELOG').should == ['stable', 'CHANGELOG']
|
||||
end
|
||||
end
|
||||
|
||||
context "with a fullpath" do
|
||||
it "extracts a valid branch" do
|
||||
extract_ref('/gitlab/gitlab-ci/tree/foo/bar/baz/CHANGELOG').should == ['foo/bar/baz', 'CHANGELOG']
|
||||
end
|
||||
|
||||
it "extracts a valid tag" do
|
||||
extract_ref('/gitlab/gitlab-ci/tree/v2.0.0/CHANGELOG').should == ['v2.0.0', 'CHANGELOG']
|
||||
end
|
||||
|
||||
it "extracts a valid commit SHA" do
|
||||
extract_ref('/gitlab/gitlab-ci/tree/f4b14494ef6abf3d144c28e4af0c20143383e062/CHANGELOG').should ==
|
||||
['f4b14494ef6abf3d144c28e4af0c20143383e062', 'CHANGELOG']
|
||||
end
|
||||
|
||||
it "extracts a timestamp" do
|
||||
extract_ref('/gitlab/gitlab-ci/tree/v2.0.0/CHANGELOG?_=12354435').should == ['v2.0.0', 'CHANGELOG']
|
||||
end
|
||||
end
|
||||
|
||||
context "with a fullpath and a relative_url_root" do
|
||||
before do
|
||||
Gitlab.config.gitlab.stub(relative_url_root: '/relative')
|
||||
end
|
||||
|
||||
it "extracts a valid branch with relative_url_root" do
|
||||
extract_ref('/relative/gitlab/gitlab-ci/tree/foo/bar/baz/CHANGELOG').should == ['foo/bar/baz', 'CHANGELOG']
|
||||
end
|
||||
|
||||
it "extracts a valid tag" do
|
||||
extract_ref('/relative/gitlab/gitlab-ci/tree/v2.0.0/CHANGELOG').should == ['v2.0.0', 'CHANGELOG']
|
||||
end
|
||||
|
||||
it "extracts a valid commit SHA" do
|
||||
extract_ref('/relative/gitlab/gitlab-ci/tree/f4b14494ef6abf3d144c28e4af0c20143383e062/CHANGELOG').should ==
|
||||
['f4b14494ef6abf3d144c28e4af0c20143383e062', 'CHANGELOG']
|
||||
end
|
||||
|
||||
it "extracts a timestamp" do
|
||||
extract_ref('/relative/gitlab/gitlab-ci/tree/v2.0.0/CHANGELOG?_=12354435').should == ['v2.0.0', 'CHANGELOG']
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue