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
Jérome Perrin
gitlab-ce
Commits
4378f56c
Commit
4378f56c
authored
Oct 05, 2017
by
Ahmad Sherif
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Pass git object dir attributes as relative paths to Gitaly
Fixes gitaly#629
parent
143ace07
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
70 additions
and
30 deletions
+70
-30
GITALY_SERVER_VERSION
GITALY_SERVER_VERSION
+1
-1
GITLAB_SHELL_VERSION
GITLAB_SHELL_VERSION
+1
-2
lib/gitlab/git/env.rb
lib/gitlab/git/env.rb
+4
-2
lib/gitlab/git/repository.rb
lib/gitlab/git/repository.rb
+13
-1
lib/gitlab/gitaly_client/util.rb
lib/gitlab/gitaly_client/util.rb
+8
-2
spec/lib/gitlab/git/repository_spec.rb
spec/lib/gitlab/git/repository_spec.rb
+39
-18
spec/lib/gitlab/gitaly_client/util_spec.rb
spec/lib/gitlab/gitaly_client/util_spec.rb
+4
-4
No files found.
GITALY_SERVER_VERSION
View file @
4378f56c
0.4
5.1
0.4
6.0
GITLAB_SHELL_VERSION
View file @
4378f56c
5.9.3
5.9.4
lib/gitlab/git/env.rb
View file @
4378f56c
...
@@ -11,9 +11,11 @@ module Gitlab
...
@@ -11,9 +11,11 @@ module Gitlab
#
#
# This class is thread-safe via RequestStore.
# This class is thread-safe via RequestStore.
class
Env
class
Env
WHITELISTED_
GIT_
VARIABLES
=
%w[
WHITELISTED_VARIABLES
=
%w[
GIT_OBJECT_DIRECTORY
GIT_OBJECT_DIRECTORY
GIT_OBJECT_DIRECTORY_RELATIVE
GIT_ALTERNATE_OBJECT_DIRECTORIES
GIT_ALTERNATE_OBJECT_DIRECTORIES
GIT_ALTERNATE_OBJECT_DIRECTORIES_RELATIVE
]
.
freeze
]
.
freeze
def
self
.
set
(
env
)
def
self
.
set
(
env
)
...
@@ -33,7 +35,7 @@ module Gitlab
...
@@ -33,7 +35,7 @@ module Gitlab
end
end
def
self
.
whitelist_git_env
(
env
)
def
self
.
whitelist_git_env
(
env
)
env
.
select
{
|
key
,
_
|
WHITELISTED_
GIT_
VARIABLES
.
include?
(
key
.
to_s
)
}.
with_indifferent_access
env
.
select
{
|
key
,
_
|
WHITELISTED_VARIABLES
.
include?
(
key
.
to_s
)
}.
with_indifferent_access
end
end
end
end
end
end
...
...
lib/gitlab/git/repository.rb
View file @
4378f56c
...
@@ -12,6 +12,10 @@ module Gitlab
...
@@ -12,6 +12,10 @@ module Gitlab
GIT_OBJECT_DIRECTORY
GIT_OBJECT_DIRECTORY
GIT_ALTERNATE_OBJECT_DIRECTORIES
GIT_ALTERNATE_OBJECT_DIRECTORIES
]
.
freeze
]
.
freeze
ALLOWED_OBJECT_RELATIVE_DIRECTORIES_VARIABLES
=
%w[
GIT_OBJECT_DIRECTORY_RELATIVE
GIT_ALTERNATE_OBJECT_DIRECTORIES_RELATIVE
]
.
freeze
SEARCH_CONTEXT_LINES
=
3
SEARCH_CONTEXT_LINES
=
3
NoRepository
=
Class
.
new
(
StandardError
)
NoRepository
=
Class
.
new
(
StandardError
)
...
@@ -1220,7 +1224,15 @@ module Gitlab
...
@@ -1220,7 +1224,15 @@ module Gitlab
end
end
def
alternate_object_directories
def
alternate_object_directories
Gitlab
::
Git
::
Env
.
all
.
values_at
(
*
ALLOWED_OBJECT_DIRECTORIES_VARIABLES
).
compact
relative_paths
=
Gitlab
::
Git
::
Env
.
all
.
values_at
(
*
ALLOWED_OBJECT_RELATIVE_DIRECTORIES_VARIABLES
).
flatten
.
compact
if
relative_paths
.
any?
relative_paths
.
map
{
|
d
|
File
.
join
(
path
,
d
)
}
else
Gitlab
::
Git
::
Env
.
all
.
values_at
(
*
ALLOWED_OBJECT_DIRECTORIES_VARIABLES
)
.
compact
.
flat_map
{
|
d
|
d
.
split
(
File
::
PATH_SEPARATOR
)
}
end
end
end
# Get the content of a blob for a given commit. If the blob is a commit
# Get the content of a blob for a given commit. If the blob is a commit
...
...
lib/gitlab/gitaly_client/util.rb
View file @
4378f56c
...
@@ -3,12 +3,18 @@ module Gitlab
...
@@ -3,12 +3,18 @@ module Gitlab
module
Util
module
Util
class
<<
self
class
<<
self
def
repository
(
repository_storage
,
relative_path
,
gl_repository
)
def
repository
(
repository_storage
,
relative_path
,
gl_repository
)
git_object_directory
=
Gitlab
::
Git
::
Env
[
'GIT_OBJECT_DIRECTORY_RELATIVE'
].
presence
||
Gitlab
::
Git
::
Env
[
'GIT_OBJECT_DIRECTORY'
].
presence
git_alternate_object_directories
=
Array
.
wrap
(
Gitlab
::
Git
::
Env
[
'GIT_ALTERNATE_OBJECT_DIRECTORIES_RELATIVE'
]).
presence
||
Array
.
wrap
(
Gitlab
::
Git
::
Env
[
'GIT_ALTERNATE_OBJECT_DIRECTORIES'
]).
flat_map
{
|
d
|
d
.
split
(
File
::
PATH_SEPARATOR
)
}
Gitaly
::
Repository
.
new
(
Gitaly
::
Repository
.
new
(
storage_name:
repository_storage
,
storage_name:
repository_storage
,
relative_path:
relative_path
,
relative_path:
relative_path
,
gl_repository:
gl_repository
,
gl_repository:
gl_repository
,
git_object_directory:
Gitlab
::
Git
::
Env
[
'GIT_OBJECT_DIRECTORY'
]
.
to_s
,
git_object_directory:
git_object_directory
.
to_s
,
git_alternate_object_directories:
Array
.
wrap
(
Gitlab
::
Git
::
Env
[
'GIT_ALTERNATE_OBJECT_DIRECTORIES'
])
git_alternate_object_directories:
git_alternate_object_directories
)
)
end
end
...
...
spec/lib/gitlab/git/repository_spec.rb
View file @
4378f56c
...
@@ -68,31 +68,52 @@ describe Gitlab::Git::Repository, seed_helper: true do
...
@@ -68,31 +68,52 @@ describe Gitlab::Git::Repository, seed_helper: true do
expect
{
broken_repo
.
rugged
}.
to
raise_error
(
Gitlab
::
Git
::
Repository
::
NoRepository
)
expect
{
broken_repo
.
rugged
}.
to
raise_error
(
Gitlab
::
Git
::
Repository
::
NoRepository
)
end
end
context
'with no Git env stored'
do
describe
'alternates keyword argument'
do
before
do
context
'with no Git env stored'
do
expect
(
Gitlab
::
Git
::
Env
).
to
receive
(
:all
).
and_return
({})
before
do
end
allow
(
Gitlab
::
Git
::
Env
).
to
receive
(
:all
).
and_return
({})
end
it
"whitelist some variables and pass them via the alternates keyword argument
"
do
it
"is passed an empty array
"
do
expect
(
Rugged
::
Repository
).
to
receive
(
:new
).
with
(
repository
.
path
,
alternates:
[])
expect
(
Rugged
::
Repository
).
to
receive
(
:new
).
with
(
repository
.
path
,
alternates:
[])
repository
.
rugged
repository
.
rugged
end
end
end
end
context
'with some Git env stored'
do
context
'with absolute and relative Git object dir envvars stored'
do
before
do
before
do
expect
(
Gitlab
::
Git
::
Env
).
to
receive
(
:all
).
and_return
({
allow
(
Gitlab
::
Git
::
Env
).
to
receive
(
:all
).
and_return
({
'GIT_OBJECT_DIRECTORY'
=>
'foo'
,
'GIT_OBJECT_DIRECTORY_RELATIVE'
=>
'./objects/foo'
,
'GIT_ALTERNATE_OBJECT_DIRECTORIES'
=>
'bar'
,
'GIT_ALTERNATE_OBJECT_DIRECTORIES_RELATIVE'
=>
[
'./objects/bar'
,
'./objects/baz'
],
'GIT_OTHER'
=>
'another_env'
'GIT_OBJECT_DIRECTORY'
=>
'ignored'
,
})
'GIT_ALTERNATE_OBJECT_DIRECTORIES'
=>
'ignored:ignored'
,
'GIT_OTHER'
=>
'another_env'
})
end
it
"is passed the relative object dir envvars after being converted to absolute ones"
do
alternates
=
%w[foo bar baz]
.
map
{
|
d
|
File
.
join
(
repository
.
path
,
'./objects'
,
d
)
}
expect
(
Rugged
::
Repository
).
to
receive
(
:new
).
with
(
repository
.
path
,
alternates:
alternates
)
repository
.
rugged
end
end
end
it
"whitelist some variables and pass them via the alternates keyword argument"
do
context
'with only absolute Git object dir envvars stored'
do
expect
(
Rugged
::
Repository
).
to
receive
(
:new
).
with
(
repository
.
path
,
alternates:
%w[foo bar]
)
before
do
allow
(
Gitlab
::
Git
::
Env
).
to
receive
(
:all
).
and_return
({
'GIT_OBJECT_DIRECTORY'
=>
'foo'
,
'GIT_ALTERNATE_OBJECT_DIRECTORIES'
=>
'bar:baz'
,
'GIT_OTHER'
=>
'another_env'
})
end
repository
.
rugged
it
"is passed the absolute object dir envvars as is"
do
expect
(
Rugged
::
Repository
).
to
receive
(
:new
).
with
(
repository
.
path
,
alternates:
%w[foo bar baz]
)
repository
.
rugged
end
end
end
end
end
end
end
...
...
spec/lib/gitlab/gitaly_client/util_spec.rb
View file @
4378f56c
...
@@ -6,16 +6,16 @@ describe Gitlab::GitalyClient::Util do
...
@@ -6,16 +6,16 @@ describe Gitlab::GitalyClient::Util do
let
(
:relative_path
)
{
'my/repo.git'
}
let
(
:relative_path
)
{
'my/repo.git'
}
let
(
:gl_repository
)
{
'project-1'
}
let
(
:gl_repository
)
{
'project-1'
}
let
(
:git_object_directory
)
{
'.git/objects'
}
let
(
:git_object_directory
)
{
'.git/objects'
}
let
(
:git_alternate_object_directory
)
{
'/dir/one:/dir/two'
}
let
(
:git_alternate_object_directory
)
{
[
'/dir/one'
,
'/dir/two'
]
}
subject
do
subject
do
described_class
.
repository
(
repository_storage
,
relative_path
,
gl_repository
)
described_class
.
repository
(
repository_storage
,
relative_path
,
gl_repository
)
end
end
it
'creates a Gitaly::Repository with the given data'
do
it
'creates a Gitaly::Repository with the given data'
do
expect
(
Gitlab
::
Git
::
Env
).
to
receive
(
:[]
).
with
(
'GIT_OBJECT_DIRECTORY
'
)
allow
(
Gitlab
::
Git
::
Env
).
to
receive
(
:[]
).
with
(
'GIT_OBJECT_DIRECTORY_RELATIVE
'
)
.
and_return
(
git_object_directory
)
.
and_return
(
git_object_directory
)
expect
(
Gitlab
::
Git
::
Env
).
to
receive
(
:[]
).
with
(
'GIT_ALTERNATE_OBJECT_DIRECTORIES
'
)
allow
(
Gitlab
::
Git
::
Env
).
to
receive
(
:[]
).
with
(
'GIT_ALTERNATE_OBJECT_DIRECTORIES_RELATIVE
'
)
.
and_return
(
git_alternate_object_directory
)
.
and_return
(
git_alternate_object_directory
)
expect
(
subject
).
to
be_a
(
Gitaly
::
Repository
)
expect
(
subject
).
to
be_a
(
Gitaly
::
Repository
)
...
@@ -23,7 +23,7 @@ describe Gitlab::GitalyClient::Util do
...
@@ -23,7 +23,7 @@ describe Gitlab::GitalyClient::Util do
expect
(
subject
.
relative_path
).
to
eq
(
relative_path
)
expect
(
subject
.
relative_path
).
to
eq
(
relative_path
)
expect
(
subject
.
gl_repository
).
to
eq
(
gl_repository
)
expect
(
subject
.
gl_repository
).
to
eq
(
gl_repository
)
expect
(
subject
.
git_object_directory
).
to
eq
(
git_object_directory
)
expect
(
subject
.
git_object_directory
).
to
eq
(
git_object_directory
)
expect
(
subject
.
git_alternate_object_directories
).
to
eq
(
[
git_alternate_object_directory
]
)
expect
(
subject
.
git_alternate_object_directories
).
to
eq
(
git_alternate_object_directory
)
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