BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
9ff44c29
Commit
9ff44c29
authored
Dec 26, 2017
by
Alejandro Rodríguez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Incorporate RemoteService.FetchInternalRemote Gitaly RPC
parent
fb583c4b
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
66 additions
and
30 deletions
+66
-30
GITALY_SERVER_VERSION
GITALY_SERVER_VERSION
+1
-1
repository.rb
lib/gitlab/git/repository.rb
+13
-13
remote_service.rb
lib/gitlab/gitaly_client/remote_service.rb
+13
-0
repository_spec.rb
spec/lib/gitlab/git/repository_spec.rb
+26
-16
remote_service_spec.rb
spec/lib/gitlab/gitaly_client/remote_service_spec.rb
+13
-0
No files found.
GITALY_SERVER_VERSION
View file @
9ff44c29
0.6
5
.0
0.6
6
.0
lib/gitlab/git/repository.rb
View file @
9ff44c29
...
...
@@ -1154,23 +1154,13 @@ module Gitlab
end
def
fetch_repository_as_mirror
(
repository
)
remote_name
=
"tmp-
#{
SecureRandom
.
hex
}
"
# Notice that this feature flag is not for `fetch_repository_as_mirror`
# as a whole but for the fetching mechanism (file path or gitaly-ssh).
url
,
env
=
gitaly_migrate
(
:fetch_internal
)
do
|
is_enabled
|
gitaly_migrate
(
:remote_fetch_internal_remote
)
do
|
is_enabled
|
if
is_enabled
repository
=
RemoteRepository
.
new
(
repository
)
unless
repository
.
is_a?
(
RemoteRepository
)
[
GITALY_INTERNAL_URL
,
repository
.
fetch_env
]
gitaly_remote_client
.
fetch_internal_remote
(
repository
)
else
[
repository
.
path
,
nil
]
rugged_fetch_repository_as_mirror
(
repository
)
end
end
add_remote
(
remote_name
,
url
,
mirror_refmap: :all_refs
)
fetch_remote
(
remote_name
,
env:
env
)
ensure
remove_remote
(
remote_name
)
end
def
blob_at
(
sha
,
path
)
...
...
@@ -1940,6 +1930,16 @@ module Gitlab
false
end
def
rugged_fetch_repository_as_mirror
(
repository
)
remote_name
=
"tmp-
#{
SecureRandom
.
hex
}
"
repository
=
RemoteRepository
.
new
(
repository
)
unless
repository
.
is_a?
(
RemoteRepository
)
add_remote
(
remote_name
,
GITALY_INTERNAL_URL
,
mirror_refmap: :all_refs
)
fetch_remote
(
remote_name
,
env:
repository
.
fetch_env
)
ensure
remove_remote
(
remote_name
)
end
def
fetch_remote
(
remote_name
=
'origin'
,
env:
nil
)
run_git
([
'fetch'
,
remote_name
],
env:
env
).
last
.
zero?
end
...
...
lib/gitlab/gitaly_client/remote_service.rb
View file @
9ff44c29
...
...
@@ -23,6 +23,19 @@ module Gitlab
response
.
result
end
def
fetch_internal_remote
(
repository
)
request
=
Gitaly
::
FetchInternalRemoteRequest
.
new
(
repository:
@gitaly_repo
,
remote_repository:
repository
.
gitaly_repository
)
response
=
GitalyClient
.
call
(
@storage
,
:remote_service
,
:fetch_internal_remote
,
request
,
remote_storage:
repository
.
storage
)
response
.
result
end
end
end
end
spec/lib/gitlab/git/repository_spec.rb
View file @
9ff44c29
...
...
@@ -648,29 +648,39 @@ describe Gitlab::Git::Repository, seed_helper: true do
Gitlab
::
Shell
.
new
.
remove_repository
(
TestEnv
.
repos_path
,
'my_project'
)
end
it
'fetches a repository as a mirror remote'
do
subject
shared_examples
'repository mirror fecthing'
do
it
'fetches a repository as a mirror remote'
do
subject
expect
(
refs
(
new_repository
.
path
)).
to
eq
(
refs
(
repository
.
path
))
end
expect
(
refs
(
new_repository
.
path
)).
to
eq
(
refs
(
repository
.
path
))
end
context
'with keep-around refs'
do
let
(
:sha
)
{
SeedRepo
::
Commit
::
ID
}
let
(
:keep_around_ref
)
{
"refs/keep-around/
#{
sha
}
"
}
let
(
:tmp_ref
)
{
"refs/tmp/
#{
SecureRandom
.
hex
}
"
}
context
'with keep-around refs'
do
let
(
:sha
)
{
SeedRepo
::
Commit
::
ID
}
let
(
:keep_around_ref
)
{
"refs/keep-around/
#{
sha
}
"
}
let
(
:tmp_ref
)
{
"refs/tmp/
#{
SecureRandom
.
hex
}
"
}
before
do
repository
.
rugged
.
references
.
create
(
keep_around_ref
,
sha
,
force:
true
)
repository
.
rugged
.
references
.
create
(
tmp_ref
,
sha
,
force:
true
)
end
before
do
repository
.
rugged
.
references
.
create
(
keep_around_ref
,
sha
,
force:
true
)
repository
.
rugged
.
references
.
create
(
tmp_ref
,
sha
,
force:
true
)
end
it
'includes the temporary and keep-around refs'
do
subject
it
'includes the temporary and keep-around refs'
do
subject
expect
(
refs
(
new_repository
.
path
)).
to
include
(
keep_around_ref
)
expect
(
refs
(
new_repository
.
path
)).
to
include
(
tmp_ref
)
expect
(
refs
(
new_repository
.
path
)).
to
include
(
keep_around_ref
)
expect
(
refs
(
new_repository
.
path
)).
to
include
(
tmp_ref
)
end
end
end
context
'with gitaly enabled'
do
it_behaves_like
'repository mirror fecthing'
end
context
'with gitaly enabled'
,
:skip_gitaly_mock
do
it_behaves_like
'repository mirror fecthing'
end
end
describe
'#remote_tags'
do
...
...
spec/lib/gitlab/gitaly_client/remote_service_spec.rb
View file @
9ff44c29
...
...
@@ -31,4 +31,17 @@ describe Gitlab::GitalyClient::RemoteService do
expect
(
client
.
remove_remote
(
remote_name
)).
to
be
(
true
)
end
end
describe
'#fetch_internal_remote'
do
let
(
:remote_repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_MUTABLE_REPO_PATH
,
''
)
}
it
'sends an fetch_internal_remote message and returns the result value'
do
expect_any_instance_of
(
Gitaly
::
RemoteService
::
Stub
)
.
to
receive
(
:fetch_internal_remote
)
.
with
(
gitaly_request_with_path
(
storage_name
,
relative_path
),
kind_of
(
Hash
))
.
and_return
(
double
(
result:
true
))
expect
(
client
.
fetch_internal_remote
(
remote_repository
)).
to
be
(
true
)
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