Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
gitlab-ce
Commits
e33cbb9b
Commit
e33cbb9b
authored
Sep 17, 2012
by
Robert Speicher
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add TreeController and spec
parent
884eb732
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
100 additions
and
3 deletions
+100
-3
app/controllers/tree_controller.rb
app/controllers/tree_controller.rb
+49
-0
app/models/tree.rb
app/models/tree.rb
+7
-3
spec/controllers/tree_controller_spec.rb
spec/controllers/tree_controller_spec.rb
+43
-0
spec/spec_helper.rb
spec/spec_helper.rb
+1
-0
No files found.
app/controllers/tree_controller.rb
0 → 100644
View file @
e33cbb9b
# Controller for viewing a repository's file structure
class
TreeController
<
ApplicationController
# Thrown when given an invalid path
class
InvalidPathError
<
StandardError
;
end
include
RefExtractor
layout
"project"
before_filter
:project
# Authorize
before_filter
:add_project_abilities
before_filter
:authorize_read_project!
before_filter
:authorize_code_access!
before_filter
:require_non_empty_project
before_filter
:define_tree_vars
def
show
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
app/models/tree.rb
View file @
e33cbb9b
class
Tree
class
Tree
include
Linguist
::
BlobHelper
include
Linguist
::
BlobHelper
attr_accessor
:path
,
:tree
,
:project
,
:ref
attr_accessor
:path
,
:tree
,
:project
,
:ref
delegate
:contents
,
delegate
:contents
,
...
@@ -14,8 +14,8 @@ class Tree
...
@@ -14,8 +14,8 @@ class Tree
to: :tree
to: :tree
def
initialize
(
raw_tree
,
project
,
ref
=
nil
,
path
=
nil
)
def
initialize
(
raw_tree
,
project
,
ref
=
nil
,
path
=
nil
)
@project
,
@ref
,
@path
=
project
,
ref
,
path
,
@project
,
@ref
,
@path
=
project
,
ref
,
path
@tree
=
if
path
@tree
=
if
path
.
present?
raw_tree
/
path
.
dup
.
force_encoding
(
'ascii-8bit'
)
raw_tree
/
path
.
dup
.
force_encoding
(
'ascii-8bit'
)
else
else
raw_tree
raw_tree
...
@@ -26,6 +26,10 @@ class Tree
...
@@ -26,6 +26,10 @@ class Tree
tree
.
is_a?
(
Grit
::
Blob
)
tree
.
is_a?
(
Grit
::
Blob
)
end
end
def
invalid?
tree
.
nil?
end
def
empty?
def
empty?
data
.
blank?
data
.
blank?
end
end
...
...
spec/controllers/tree_controller_spec.rb
0 → 100644
View file @
e33cbb9b
require
'spec_helper'
describe
TreeController
do
let
(
:project
)
{
create
(
:project
)
}
let
(
:user
)
{
create
(
:user
)
}
before
do
sign_in
(
user
)
project
.
add_access
(
user
,
:read
,
:admin
)
project
.
stub
(
:branches
).
and_return
([
'master'
,
'foo/bar/baz'
])
project
.
stub
(
:tags
).
and_return
([
'v1.0.0'
,
'v2.0.0'
])
controller
.
instance_variable_set
(
:@project
,
project
)
end
describe
"GET show"
do
# Make sure any errors accessing the tree in our views bubble up to this spec
render_views
before
{
get
:show
,
project_id:
project
.
code
,
id:
id
}
context
"valid branch, no path"
do
let
(
:id
)
{
'master'
}
it
{
should
respond_with
(
:success
)
}
end
context
"valid branch, valid path"
do
let
(
:id
)
{
'master/README.md'
}
it
{
should
respond_with
(
:success
)
}
end
context
"valid branch, invalid path"
do
let
(
:id
)
{
'master/invalid-path.rb'
}
it
{
should
respond_with
(
:not_found
)
}
end
context
"invalid branch, valid path"
do
let
(
:id
)
{
'invalid-branch/README.md'
}
it
{
should
respond_with
(
:not_found
)
}
end
end
end
spec/spec_helper.rb
View file @
e33cbb9b
...
@@ -28,6 +28,7 @@ RSpec.configure do |config|
...
@@ -28,6 +28,7 @@ RSpec.configure do |config|
config
.
include
LoginHelpers
,
type: :request
config
.
include
LoginHelpers
,
type: :request
config
.
include
GitoliteStub
config
.
include
GitoliteStub
config
.
include
FactoryGirl
::
Syntax
::
Methods
config
.
include
FactoryGirl
::
Syntax
::
Methods
config
.
include
Devise
::
TestHelpers
,
type: :controller
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# examples within a transaction, remove the following line or assign false
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment