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
Boxiang Sun
gitlab-ce
Commits
39753bfb
Commit
39753bfb
authored
Mar 30, 2017
by
Ahmad Sherif
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add feature flags for enabling (Upload|Receive)Pack for Gitaly
Closes gitaly#168
parent
2fceb437
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
66 additions
and
10 deletions
+66
-10
app/controllers/projects/git_http_controller.rb
app/controllers/projects/git_http_controller.rb
+1
-1
lib/gitlab/workhorse.rb
lib/gitlab/workhorse.rb
+14
-2
spec/lib/gitlab/workhorse_spec.rb
spec/lib/gitlab/workhorse_spec.rb
+51
-7
No files found.
app/controllers/projects/git_http_controller.rb
View file @
39753bfb
...
@@ -57,7 +57,7 @@ class Projects::GitHttpController < Projects::GitHttpClientController
...
@@ -57,7 +57,7 @@ class Projects::GitHttpController < Projects::GitHttpClientController
def
render_ok
def
render_ok
set_workhorse_internal_api_content_type
set_workhorse_internal_api_content_type
render
json:
Gitlab
::
Workhorse
.
git_http_ok
(
repository
,
user
)
render
json:
Gitlab
::
Workhorse
.
git_http_ok
(
repository
,
user
,
action_name
)
end
end
def
render_http_not_allowed
def
render_http_not_allowed
...
...
lib/gitlab/workhorse.rb
View file @
39753bfb
...
@@ -16,7 +16,7 @@ module Gitlab
...
@@ -16,7 +16,7 @@ module Gitlab
SECRET_LENGTH
=
32
SECRET_LENGTH
=
32
class
<<
self
class
<<
self
def
git_http_ok
(
repository
,
user
)
def
git_http_ok
(
repository
,
user
,
action
)
repo_path
=
repository
.
path_to_repo
repo_path
=
repository
.
path_to_repo
params
=
{
params
=
{
GL_ID
:
Gitlab
::
GlId
.
gl_id
(
user
),
GL_ID
:
Gitlab
::
GlId
.
gl_id
(
user
),
...
@@ -26,13 +26,25 @@ module Gitlab
...
@@ -26,13 +26,25 @@ module Gitlab
if
Gitlab
.
config
.
gitaly
.
enabled
if
Gitlab
.
config
.
gitaly
.
enabled
storage
=
repository
.
project
.
repository_storage
storage
=
repository
.
project
.
repository_storage
address
=
Gitlab
::
GitalyClient
.
get_address
(
storage
)
address
=
Gitlab
::
GitalyClient
.
get_address
(
storage
)
params
[
:GitalySocketPath
]
=
URI
(
address
).
path
# TODO: use GitalyClient code to assemble the Repository message
# TODO: use GitalyClient code to assemble the Repository message
params
[
:Repository
]
=
Gitaly
::
Repository
.
new
(
params
[
:Repository
]
=
Gitaly
::
Repository
.
new
(
path:
repo_path
,
path:
repo_path
,
storage_name:
storage
,
storage_name:
storage
,
relative_path:
Gitlab
::
RepoPath
.
strip_storage_path
(
repo_path
),
relative_path:
Gitlab
::
RepoPath
.
strip_storage_path
(
repo_path
),
).
to_h
).
to_h
feature_enabled
=
case
action
.
to_s
when
'git_receive_pack'
Gitlab
::
GitalyClient
.
feature_enabled?
(
:post_receive_pack
)
when
'git_upload_pack'
Gitlab
::
GitalyClient
.
feature_enabled?
(
:post_upload_pack
)
when
'info_refs'
true
else
raise
"Unsupported action:
#{
action
}
"
end
params
[
:GitalySocketPath
]
=
URI
(
address
).
path
if
feature_enabled
end
end
params
params
...
...
spec/lib/gitlab/workhorse_spec.rb
View file @
39753bfb
...
@@ -180,24 +180,68 @@ describe Gitlab::Workhorse, lib: true do
...
@@ -180,24 +180,68 @@ describe Gitlab::Workhorse, lib: true do
describe
'.git_http_ok'
do
describe
'.git_http_ok'
do
let
(
:user
)
{
create
(
:user
)
}
let
(
:user
)
{
create
(
:user
)
}
let
(
:repo_path
)
{
repository
.
path_to_repo
}
let
(
:repo_path
)
{
repository
.
path_to_repo
}
let
(
:action
)
{
'info_refs'
}
subject
{
described_class
.
git_http_ok
(
repository
,
user
)
}
subject
{
described_class
.
git_http_ok
(
repository
,
user
,
action
)
}
it
{
expect
(
subject
).
to
eq
({
GL_ID
:
"user-
#{
user
.
id
}
"
,
RepoPath
:
repo_path
})
}
it
{
expect
(
subject
).
to
include
({
GL_ID
:
"user-
#{
user
.
id
}
"
,
RepoPath
:
repo_path
})
}
context
'when Gitaly is enabled'
do
context
'when Gitaly is enabled'
do
let
(
:gitaly_params
)
do
{
GitalySocketPath
:
URI
(
Gitlab
::
GitalyClient
.
get_address
(
'default'
)).
path
,
}
end
before
do
before
do
allow
(
Gitlab
.
config
.
gitaly
).
to
receive
(
:enabled
).
and_return
(
true
)
allow
(
Gitlab
.
config
.
gitaly
).
to
receive
(
:enabled
).
and_return
(
true
)
end
end
it
'includes Gitaly params in the returned value'
do
it
'includes a Repository param'
do
gitaly_socket_path
=
URI
(
Gitlab
::
GitalyClient
.
get_address
(
'default'
)).
path
repo_param
=
{
Repository
:
{
expect
(
subject
).
to
include
({
GitalySocketPath
:
gitaly_socket_path
})
expect
(
subject
[
:Repository
]).
to
include
({
path:
repo_path
,
path:
repo_path
,
storage_name:
'default'
,
storage_name:
'default'
,
relative_path:
project
.
full_path
+
'.git'
,
relative_path:
project
.
full_path
+
'.git'
,
})
}
}
expect
(
subject
).
to
include
(
repo_param
)
end
{
git_receive_pack: :post_receive_pack
,
git_upload_pack: :post_upload_pack
}.
each
do
|
action_name
,
feature_flag
|
context
"when
#{
action_name
}
action is passed"
do
let
(
:action
)
{
action_name
}
context
'when action is enabled by feature flag'
do
it
'includes Gitaly params in the returned value'
do
allow
(
Gitlab
::
GitalyClient
).
to
receive
(
:feature_enabled?
).
with
(
feature_flag
).
and_return
(
true
)
expect
(
subject
).
to
include
(
gitaly_params
)
end
end
context
'when action is not enabled by feature flag'
do
it
'does not include Gitaly params in the returned value'
do
allow
(
Gitlab
::
GitalyClient
).
to
receive
(
:feature_enabled?
).
with
(
feature_flag
).
and_return
(
false
)
expect
(
subject
).
not_to
include
(
gitaly_params
)
end
end
end
end
context
"when info_refs action is passed"
do
let
(
:action
)
{
'info_refs'
}
it
{
expect
(
subject
).
to
include
(
gitaly_params
)
}
end
context
'when action passed is not supported by Gitaly'
do
let
(
:action
)
{
'download'
}
it
{
expect
{
subject
}.
to
raise_exception
(
'Unsupported action: download'
)
}
end
end
end
end
end
end
...
...
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