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
Tatuya Kamada
gitlab-ce
Commits
ebdfda69
Commit
ebdfda69
authored
Apr 05, 2017
by
Robert Speicher
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'gitaly-refs' into 'master'
Implement Gitaly refs client See merge request !9291
parents
fec40d78
56cf0274
Changes
25
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
280 additions
and
87 deletions
+280
-87
app/models/repository.rb
app/models/repository.rb
+7
-10
changelogs/unreleased/gitaly-refs.yml
changelogs/unreleased/gitaly-refs.yml
+4
-0
db/migrate/20140502125220_migrate_repo_size.rb
db/migrate/20140502125220_migrate_repo_size.rb
+2
-3
lib/api/internal.rb
lib/api/internal.rb
+4
-1
lib/gitlab/git.rb
lib/gitlab/git.rb
+2
-0
lib/gitlab/git/repository.rb
lib/gitlab/git/repository.rb
+38
-6
lib/gitlab/gitaly_client/notifications.rb
lib/gitlab/gitaly_client/notifications.rb
+4
-9
lib/gitlab/gitaly_client/ref.rb
lib/gitlab/gitaly_client/ref.rb
+35
-0
lib/gitlab/gitaly_client/util.rb
lib/gitlab/gitaly_client/util.rb
+13
-0
spec/lib/gitlab/git/attributes_spec.rb
spec/lib/gitlab/git/attributes_spec.rb
+2
-2
spec/lib/gitlab/git/blame_spec.rb
spec/lib/gitlab/git/blame_spec.rb
+1
-1
spec/lib/gitlab/git/blob_spec.rb
spec/lib/gitlab/git/blob_spec.rb
+1
-1
spec/lib/gitlab/git/branch_spec.rb
spec/lib/gitlab/git/branch_spec.rb
+1
-1
spec/lib/gitlab/git/commit_spec.rb
spec/lib/gitlab/git/commit_spec.rb
+4
-4
spec/lib/gitlab/git/compare_spec.rb
spec/lib/gitlab/git/compare_spec.rb
+1
-1
spec/lib/gitlab/git/diff_spec.rb
spec/lib/gitlab/git/diff_spec.rb
+1
-1
spec/lib/gitlab/git/encoding_helper_spec.rb
spec/lib/gitlab/git/encoding_helper_spec.rb
+1
-1
spec/lib/gitlab/git/index_spec.rb
spec/lib/gitlab/git/index_spec.rb
+1
-1
spec/lib/gitlab/git/repository_spec.rb
spec/lib/gitlab/git/repository_spec.rb
+87
-24
spec/lib/gitlab/git/tag_spec.rb
spec/lib/gitlab/git/tag_spec.rb
+1
-1
spec/lib/gitlab/git/tree_spec.rb
spec/lib/gitlab/git/tree_spec.rb
+1
-1
spec/lib/gitlab/gitaly_client/notifications_spec.rb
spec/lib/gitlab/gitaly_client/notifications_spec.rb
+6
-3
spec/lib/gitlab/gitaly_client/ref_spec.rb
spec/lib/gitlab/gitaly_client/ref_spec.rb
+41
-0
spec/support/matchers/gitaly_matchers.rb
spec/support/matchers/gitaly_matchers.rb
+1
-1
spec/support/seed_helper.rb
spec/support/seed_helper.rb
+21
-15
No files found.
app/models/repository.rb
View file @
ebdfda69
...
...
@@ -59,7 +59,7 @@ class Repository
def
raw_repository
return
nil
unless
path_with_namespace
@raw_repository
||=
Gitlab
::
Git
::
Repository
.
new
(
path_to_repo
)
@raw_repository
||=
initialize_raw_repository
end
# Return absolute path to repository
...
...
@@ -146,12 +146,7 @@ class Repository
# may cause the branch to "disappear" erroneously or have the wrong SHA.
#
# See: https://github.com/libgit2/libgit2/issues/1534 and https://gitlab.com/gitlab-org/gitlab-ce/issues/15392
raw_repo
=
if
fresh_repo
Gitlab
::
Git
::
Repository
.
new
(
path_to_repo
)
else
raw_repository
end
raw_repo
=
fresh_repo
?
initialize_raw_repository
:
raw_repository
raw_repo
.
find_branch
(
name
)
end
...
...
@@ -505,9 +500,7 @@ class Repository
end
end
def
branch_names
branches
.
map
(
&
:name
)
end
delegate
:branch_names
,
to: :raw_repository
cache_method
:branch_names
,
fallback:
[]
delegate
:tag_names
,
to: :raw_repository
...
...
@@ -1168,4 +1161,8 @@ class Repository
def
repository_storage_path
@project
.
repository_storage_path
end
def
initialize_raw_repository
Gitlab
::
Git
::
Repository
.
new
(
project
.
repository_storage
,
path_with_namespace
+
'.git'
)
end
end
changelogs/unreleased/gitaly-refs.yml
0 → 100644
View file @
ebdfda69
---
title
:
Incorporate Gitaly client for refs service
merge_request
:
9291
author
:
db/migrate/20140502125220_migrate_repo_size.rb
View file @
ebdfda69
...
...
@@ -8,11 +8,10 @@ class MigrateRepoSize < ActiveRecord::Migration
project_data
.
each
do
|
project
|
id
=
project
[
'id'
]
namespace_path
=
project
[
'namespace_path'
]
||
''
repos_path
=
Gitlab
.
config
.
gitlab_shell
[
'repos_path'
]
||
Gitlab
.
config
.
repositories
.
storages
.
default
[
'path'
]
path
=
File
.
join
(
repos_path
,
namespace_path
,
project
[
'project_path'
]
+
'.git'
)
path
=
File
.
join
(
namespace_path
,
project
[
'project_path'
]
+
'.git'
)
begin
repo
=
Gitlab
::
Git
::
Repository
.
new
(
path
)
repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
path
)
if
repo
.
empty?
print
'-'
else
...
...
lib/api/internal.rb
View file @
ebdfda69
...
...
@@ -138,8 +138,11 @@ module API
return
unless
Gitlab
::
GitalyClient
.
enabled?
relative_path
=
Gitlab
::
RepoPath
.
strip_storage_path
(
params
[
:repo_path
])
project
=
Project
.
find_by_full_path
(
relative_path
.
sub
(
/\.(git|wiki)\z/
,
''
))
begin
Gitlab
::
GitalyClient
::
Notifications
.
new
(
p
arams
[
:repo_path
]
).
post_receive
Gitlab
::
GitalyClient
::
Notifications
.
new
(
p
roject
.
repository_storage
,
relative_path
).
post_receive
rescue
GRPC
::
Unavailable
=>
e
render_api_error
(
e
,
500
)
end
...
...
lib/gitlab/git.rb
View file @
ebdfda69
...
...
@@ -4,6 +4,8 @@ module Gitlab
TAG_REF_PREFIX
=
"refs/tags/"
.
freeze
BRANCH_REF_PREFIX
=
"refs/heads/"
.
freeze
CommandError
=
Class
.
new
(
StandardError
)
class
<<
self
def
ref_name
(
ref
)
ref
.
sub
(
/\Arefs\/(tags|heads)\//
,
''
)
...
...
lib/gitlab/git/repository.rb
View file @
ebdfda69
...
...
@@ -25,9 +25,13 @@ module Gitlab
# 'path' must be the path to a _bare_ git repository, e.g.
# /path/to/my-repo.git
def
initialize
(
path
)
@path
=
path
@name
=
path
.
split
(
"/"
).
last
def
initialize
(
repository_storage
,
relative_path
)
@repository_storage
=
repository_storage
@relative_path
=
relative_path
storage_path
=
Gitlab
.
config
.
repositories
.
storages
[
@repository_storage
][
'path'
]
@path
=
File
.
join
(
storage_path
,
@relative_path
)
@name
=
@relative_path
.
split
(
"/"
).
last
@attributes
=
Gitlab
::
Git
::
Attributes
.
new
(
path
)
end
...
...
@@ -37,7 +41,15 @@ module Gitlab
# Default branch in the repository
def
root_ref
@root_ref
||=
discover_default_branch
@root_ref
||=
Gitlab
::
GitalyClient
.
migrate
(
:root_ref
)
do
|
is_enabled
|
if
is_enabled
gitaly_ref_client
.
default_branch_name
else
discover_default_branch
end
end
rescue
GRPC
::
BadStatus
=>
e
raise
CommandError
.
new
(
e
)
end
# Alias to old method for compatibility
...
...
@@ -54,7 +66,15 @@ module Gitlab
# Returns an Array of branch names
# sorted by name ASC
def
branch_names
branches
.
map
(
&
:name
)
Gitlab
::
GitalyClient
.
migrate
(
:branch_names
)
do
|
is_enabled
|
if
is_enabled
gitaly_ref_client
.
branch_names
else
branches
.
map
(
&
:name
)
end
end
rescue
GRPC
::
BadStatus
=>
e
raise
CommandError
.
new
(
e
)
end
# Returns an Array of Branches
...
...
@@ -107,7 +127,15 @@ module Gitlab
# Returns an Array of tag names
def
tag_names
rugged
.
tags
.
map
{
|
t
|
t
.
name
}
Gitlab
::
GitalyClient
.
migrate
(
:tag_names
)
do
|
is_enabled
|
if
is_enabled
gitaly_ref_client
.
tag_names
else
rugged
.
tags
.
map
{
|
t
|
t
.
name
}
end
end
rescue
GRPC
::
BadStatus
=>
e
raise
CommandError
.
new
(
e
)
end
# Returns an Array of Tags
...
...
@@ -1202,6 +1230,10 @@ module Gitlab
diff
.
find_similar!
(
break_rewrites:
break_rewrites
)
diff
.
each_patch
end
def
gitaly_ref_client
@gitaly_ref_client
||=
Gitlab
::
GitalyClient
::
Ref
.
new
(
@repository_storage
,
@relative_path
)
end
end
end
end
lib/gitlab/gitaly_client/notifications.rb
View file @
ebdfda69
...
...
@@ -3,18 +3,13 @@ module Gitlab
class
Notifications
attr_accessor
:stub
def
initialize
(
repo_path
)
full_path
=
Gitlab
::
RepoPath
.
strip_storage_path
(
repo_path
).
sub
(
/\.git\z/
,
''
).
sub
(
/\.wiki\z/
,
''
)
@project
=
Project
.
find_by_full_path
(
full_path
)
channel
=
GitalyClient
.
get_channel
(
@project
.
repository_storage
)
@stub
=
Gitaly
::
Notifications
::
Stub
.
new
(
nil
,
nil
,
channel_override:
channel
)
def
initialize
(
repository_storage
,
relative_path
)
@channel
,
@repository
=
Util
.
process_path
(
repository_storage
,
relative_path
)
@stub
=
Gitaly
::
Notifications
::
Stub
.
new
(
nil
,
nil
,
channel_override:
@channel
)
end
def
post_receive
repository
=
Gitaly
::
Repository
.
new
(
path:
@project
.
repository
.
path_to_repo
)
request
=
Gitaly
::
PostReceiveRequest
.
new
(
repository:
repository
)
request
=
Gitaly
::
PostReceiveRequest
.
new
(
repository:
@repository
)
@stub
.
post_receive
(
request
)
end
end
...
...
lib/gitlab/gitaly_client/ref.rb
0 → 100644
View file @
ebdfda69
module
Gitlab
module
GitalyClient
class
Ref
attr_accessor
:stub
def
initialize
(
repository_storage
,
relative_path
)
@channel
,
@repository
=
Util
.
process_path
(
repository_storage
,
relative_path
)
@stub
=
Gitaly
::
Ref
::
Stub
.
new
(
nil
,
nil
,
channel_override:
@channel
)
end
def
default_branch_name
request
=
Gitaly
::
FindDefaultBranchNameRequest
.
new
(
repository:
@repository
)
stub
.
find_default_branch_name
(
request
).
name
.
gsub
(
/^refs\/heads\//
,
''
)
end
def
branch_names
request
=
Gitaly
::
FindAllBranchNamesRequest
.
new
(
repository:
@repository
)
consume_refs_response
(
stub
.
find_all_branch_names
(
request
),
prefix:
'refs/heads/'
)
end
def
tag_names
request
=
Gitaly
::
FindAllTagNamesRequest
.
new
(
repository:
@repository
)
consume_refs_response
(
stub
.
find_all_tag_names
(
request
),
prefix:
'refs/tags/'
)
end
private
def
consume_refs_response
(
response
,
prefix
:)
response
.
flat_map
do
|
r
|
r
.
names
.
map
{
|
name
|
name
.
sub
(
/\A
#{
Regexp
.
escape
(
prefix
)
}
/
,
''
)
}
end
end
end
end
end
lib/gitlab/gitaly_client/util.rb
0 → 100644
View file @
ebdfda69
module
Gitlab
module
GitalyClient
module
Util
def
self
.
process_path
(
repository_storage
,
relative_path
)
channel
=
GitalyClient
.
get_channel
(
repository_storage
)
storage_path
=
Gitlab
.
config
.
repositories
.
storages
[
repository_storage
][
'path'
]
repository
=
Gitaly
::
Repository
.
new
(
path:
File
.
join
(
storage_path
,
relative_path
))
[
channel
,
repository
]
end
end
end
end
spec/lib/gitlab/git/attributes_spec.rb
View file @
ebdfda69
...
...
@@ -2,7 +2,7 @@ require 'spec_helper'
describe
Gitlab
::
Git
::
Attributes
,
seed_helper:
true
do
let
(
:path
)
do
File
.
join
(
SEED_
REPOSITORY
_PATH
,
'with-git-attributes.git'
)
File
.
join
(
SEED_
STORAGE
_PATH
,
'with-git-attributes.git'
)
end
subject
{
described_class
.
new
(
path
)
}
...
...
@@ -141,7 +141,7 @@ describe Gitlab::Git::Attributes, seed_helper: true do
end
it
'does not yield when the attributes file has an unsupported encoding'
do
path
=
File
.
join
(
SEED_
REPOSITORY
_PATH
,
'with-invalid-git-attributes.git'
)
path
=
File
.
join
(
SEED_
STORAGE
_PATH
,
'with-invalid-git-attributes.git'
)
attrs
=
described_class
.
new
(
path
)
expect
{
|
b
|
attrs
.
each_line
(
&
b
)
}.
not_to
yield_control
...
...
spec/lib/gitlab/git/blame_spec.rb
View file @
ebdfda69
...
...
@@ -2,7 +2,7 @@
require
"spec_helper"
describe
Gitlab
::
Git
::
Blame
,
seed_helper:
true
do
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
)
}
let
(
:blame
)
do
Gitlab
::
Git
::
Blame
.
new
(
repository
,
SeedRepo
::
Commit
::
ID
,
"CONTRIBUTING.md"
)
end
...
...
spec/lib/gitlab/git/blob_spec.rb
View file @
ebdfda69
...
...
@@ -3,7 +3,7 @@
require
"spec_helper"
describe
Gitlab
::
Git
::
Blob
,
seed_helper:
true
do
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
)
}
describe
'initialize'
do
let
(
:blob
)
{
Gitlab
::
Git
::
Blob
.
new
(
name:
'test'
)
}
...
...
spec/lib/gitlab/git/branch_spec.rb
View file @
ebdfda69
require
"spec_helper"
describe
Gitlab
::
Git
::
Branch
,
seed_helper:
true
do
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
)
}
subject
{
repository
.
branches
}
...
...
spec/lib/gitlab/git/commit_spec.rb
View file @
ebdfda69
require
"spec_helper"
describe
Gitlab
::
Git
::
Commit
,
seed_helper:
true
do
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
)
}
let
(
:commit
)
{
Gitlab
::
Git
::
Commit
.
find
(
repository
,
SeedRepo
::
Commit
::
ID
)
}
let
(
:rugged_commit
)
do
repository
.
rugged
.
lookup
(
SeedRepo
::
Commit
::
ID
)
...
...
@@ -9,7 +9,7 @@ describe Gitlab::Git::Commit, seed_helper: true do
describe
"Commit info"
do
before
do
repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
).
rugged
repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
).
rugged
@committer
=
{
email:
'mike@smith.com'
,
...
...
@@ -59,7 +59,7 @@ describe Gitlab::Git::Commit, seed_helper: true do
after
do
# Erase the new commit so other tests get the original repo
repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
).
rugged
repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
).
rugged
repo
.
references
.
update
(
"refs/heads/master"
,
SeedRepo
::
LastCommit
::
ID
)
end
end
...
...
@@ -95,7 +95,7 @@ describe Gitlab::Git::Commit, seed_helper: true do
end
context
'with broken repo'
do
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_BROKEN_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_BROKEN_REPO_PATH
)
}
it
'returns nil'
do
expect
(
Gitlab
::
Git
::
Commit
.
find
(
repository
,
SeedRepo
::
Commit
::
ID
)).
to
be_nil
...
...
spec/lib/gitlab/git/compare_spec.rb
View file @
ebdfda69
require
"spec_helper"
describe
Gitlab
::
Git
::
Compare
,
seed_helper:
true
do
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
)
}
let
(
:compare
)
{
Gitlab
::
Git
::
Compare
.
new
(
repository
,
SeedRepo
::
BigCommit
::
ID
,
SeedRepo
::
Commit
::
ID
,
false
)
}
let
(
:compare_straight
)
{
Gitlab
::
Git
::
Compare
.
new
(
repository
,
SeedRepo
::
BigCommit
::
ID
,
SeedRepo
::
Commit
::
ID
,
true
)
}
...
...
spec/lib/gitlab/git/diff_spec.rb
View file @
ebdfda69
require
"spec_helper"
describe
Gitlab
::
Git
::
Diff
,
seed_helper:
true
do
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
)
}
before
do
@raw_diff_hash
=
{
...
...
spec/lib/gitlab/git/encoding_helper_spec.rb
View file @
ebdfda69
...
...
@@ -2,7 +2,7 @@ require "spec_helper"
describe
Gitlab
::
Git
::
EncodingHelper
do
let
(
:ext_class
)
{
Class
.
new
{
extend
Gitlab
::
Git
::
EncodingHelper
}
}
let
(
:binary_string
)
{
File
.
join
(
SEED_
REPOSITORY
_PATH
,
'gitlab_logo.png'
)
}
let
(
:binary_string
)
{
File
.
join
(
SEED_
STORAGE
_PATH
,
'gitlab_logo.png'
)
}
describe
'#encode!'
do
[
...
...
spec/lib/gitlab/git/index_spec.rb
View file @
ebdfda69
require
'spec_helper'
describe
Gitlab
::
Git
::
Index
,
seed_helper:
true
do
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
)
}
let
(
:index
)
{
described_class
.
new
(
repository
)
}
before
do
...
...
spec/lib/gitlab/git/repository_spec.rb
View file @
ebdfda69
...
...
@@ -3,7 +3,7 @@ require "spec_helper"
describe
Gitlab
::
Git
::
Repository
,
seed_helper:
true
do
include
Gitlab
::
Git
::
EncodingHelper
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
)
}
describe
"Respond to"
do
subject
{
repository
}
...
...
@@ -14,6 +14,32 @@ describe Gitlab::Git::Repository, seed_helper: true do
it
{
is_expected
.
to
respond_to
(
:tags
)
}
end
describe
'#root_ref'
do
context
'with gitaly disabled'
do
before
{
allow
(
Gitlab
::
GitalyClient
).
to
receive
(
:feature_enabled?
).
and_return
(
false
)
}
it
'calls #discover_default_branch'
do
expect
(
repository
).
to
receive
(
:discover_default_branch
)
repository
.
root_ref
end
end
context
'with gitaly enabled'
do
before
{
stub_gitaly
}
it
'gets the branch name from GitalyClient'
do
expect_any_instance_of
(
Gitlab
::
GitalyClient
::
Ref
).
to
receive
(
:default_branch_name
)
repository
.
root_ref
end
it
'wraps GRPC exceptions'
do
expect_any_instance_of
(
Gitlab
::
GitalyClient
::
Ref
).
to
receive
(
:default_branch_name
).
and_raise
(
GRPC
::
Unknown
)
expect
{
repository
.
root_ref
}.
to
raise_error
(
Gitlab
::
Git
::
CommandError
)
end
end
end
describe
"#discover_default_branch"
do
let
(
:master
)
{
'master'
}
let
(
:feature
)
{
'feature'
}
...
...
@@ -55,6 +81,21 @@ describe Gitlab::Git::Repository, seed_helper: true do
end
it
{
is_expected
.
to
include
(
"master"
)
}
it
{
is_expected
.
not_to
include
(
"branch-from-space"
)
}
context
'with gitaly enabled'
do
before
{
stub_gitaly
}
it
'gets the branch names from GitalyClient'
do
expect_any_instance_of
(
Gitlab
::
GitalyClient
::
Ref
).
to
receive
(
:branch_names
)
subject
end
it
'wraps GRPC exceptions'
do
expect_any_instance_of
(
Gitlab
::
GitalyClient
::
Ref
).
to
receive
(
:branch_names
).
and_raise
(
GRPC
::
Unknown
)
expect
{
subject
}.
to
raise_error
(
Gitlab
::
Git
::
CommandError
)
end
end
end
describe
'#tag_names'
do
...
...
@@ -71,6 +112,21 @@ describe Gitlab::Git::Repository, seed_helper: true do
end
it
{
is_expected
.
to
include
(
"v1.0.0"
)
}
it
{
is_expected
.
not_to
include
(
"v5.0.0"
)
}
context
'with gitaly enabled'
do
before
{
stub_gitaly
}
it
'gets the tag names from GitalyClient'
do
expect_any_instance_of
(
Gitlab
::
GitalyClient
::
Ref
).
to
receive
(
:tag_names
)
subject
end
it
'wraps GRPC exceptions'
do
expect_any_instance_of
(
Gitlab
::
GitalyClient
::
Ref
).
to
receive
(
:tag_names
).
and_raise
(
GRPC
::
Unknown
)
expect
{
subject
}.
to
raise_error
(
Gitlab
::
Git
::
CommandError
)
end
end
end
shared_examples
'archive check'
do
|
extenstion
|
...
...
@@ -221,7 +277,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
end
context
'#submodules'
do
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
)
}
context
'where repo has submodules'
do
let
(
:submodules
)
{
repository
.
submodules
(
'master'
)
}
...
...
@@ -290,9 +346,9 @@ describe Gitlab::Git::Repository, seed_helper: true do
end
describe
"#reset"
do
change_path
=
File
.
join
(
TEST_NORMAL_REPO_PATH
,
"CHANGELOG"
)
untracked_path
=
File
.
join
(
TEST_NORMAL_REPO_PATH
,
"UNTRACKED"
)
tracked_path
=
File
.
join
(
TEST_NORMAL_REPO_PATH
,
"files"
,
"ruby"
,
"popen.rb"
)
change_path
=
File
.
join
(
SEED_STORAGE_PATH
,
TEST_NORMAL_REPO_PATH
,
"CHANGELOG"
)
untracked_path
=
File
.
join
(
SEED_STORAGE_PATH
,
TEST_NORMAL_REPO_PATH
,
"UNTRACKED"
)
tracked_path
=
File
.
join
(
SEED_STORAGE_PATH
,
TEST_NORMAL_REPO_PATH
,
"files"
,
"ruby"
,
"popen.rb"
)
change_text
=
"New changelog text"
untracked_text
=
"This file is untracked"
...
...
@@ -311,7 +367,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
f
.
write
(
untracked_text
)
end
@normal_repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_NORMAL_REPO_PATH
)
@normal_repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_NORMAL_REPO_PATH
)
@normal_repo
.
reset
(
"HEAD"
,
:hard
)
end
...
...
@@ -354,7 +410,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
context
"-b"
do
before
(
:all
)
do
@normal_repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_NORMAL_REPO_PATH
)
@normal_repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_NORMAL_REPO_PATH
)
@normal_repo
.
checkout
(
new_branch
,
{
b:
true
},
"origin/feature"
)
end
...
...
@@ -382,7 +438,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
context
"without -b"
do
context
"and specifying a nonexistent branch"
do
it
"should not do anything"
do
normal_repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_NORMAL_REPO_PATH
)
normal_repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_NORMAL_REPO_PATH
)
expect
{
normal_repo
.
checkout
(
new_branch
)
}.
to
raise_error
(
Rugged
::
ReferenceError
)
expect
(
normal_repo
.
rugged
.
branches
[
new_branch
]).
to
be_nil
...
...
@@ -402,7 +458,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
context
"and with a valid branch"
do
before
(
:all
)
do
@normal_repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_NORMAL_REPO_PATH
)
@normal_repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_NORMAL_REPO_PATH
)
@normal_repo
.
rugged
.
branches
.
create
(
"feature"
,
"origin/feature"
)
@normal_repo
.
checkout
(
"feature"
)
end
...
...
@@ -414,13 +470,13 @@ describe Gitlab::Git::Repository, seed_helper: true do
end
it
"should update the working directory"
do
File
.
open
(
File
.
join
(
TEST_NORMAL_REPO_PATH
,
".gitignore"
),
"r"
)
do
|
f
|
File
.
open
(
File
.
join
(
SEED_STORAGE_PATH
,
TEST_NORMAL_REPO_PATH
,
".gitignore"
),
"r"
)
do
|
f
|
expect
(
f
.
read
.
each_line
.
to_a
).
not_to
include
(
".DS_Store
\n
"
)
end
end
after
(
:all
)
do
FileUtils
.
rm_rf
(
TEST_NORMAL_REPO_PATH
)
FileUtils
.
rm_rf
(
SEED_STORAGE_PATH
,
TEST_NORMAL_REPO_PATH
)
ensure_seeds
end
end
...
...
@@ -429,7 +485,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
describe
"#delete_branch"
do
before
(
:all
)
do
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_MUTABLE_REPO_PATH
)
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_MUTABLE_REPO_PATH
)
@repo
.
delete_branch
(
"feature"
)
end
...
...
@@ -449,7 +505,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
describe
"#create_branch"
do
before
(
:all
)
do
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_MUTABLE_REPO_PATH
)
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_MUTABLE_REPO_PATH
)
end
it
"should create a new branch"
do
...
...
@@ -496,7 +552,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
describe
"#remote_delete"
do
before
(
:all
)
do
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_MUTABLE_REPO_PATH
)
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_MUTABLE_REPO_PATH
)
@repo
.
remote_delete
(
"expendable"
)
end
...
...
@@ -512,7 +568,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
describe
"#remote_add"
do
before
(
:all
)
do
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_MUTABLE_REPO_PATH
)
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_MUTABLE_REPO_PATH
)
@repo
.
remote_add
(
"new_remote"
,
SeedHelper
::
GITLAB_GIT_TEST_REPO_URL
)
end
...
...
@@ -528,7 +584,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
describe
"#remote_update"
do
before
(
:all
)
do
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_MUTABLE_REPO_PATH
)
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_MUTABLE_REPO_PATH
)
@repo
.
remote_update
(
"expendable"
,
url:
TEST_NORMAL_REPO_PATH
)
end
...
...
@@ -551,7 +607,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
before
(
:context
)
do
# Add new commits so that there's a renamed file in the commit history
repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
).
rugged
repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
).
rugged
commit_with_old_name
=
new_commit_edit_old_file
(
repo
)
rename_commit
=
new_commit_move_file
(
repo
)
...
...
@@ -560,7 +616,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
after
(
:context
)
do
# Erase our commits so other tests get the original repo
repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
).
rugged
repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
).
rugged
repo
.
references
.
update
(
"refs/heads/master"
,
SeedRepo
::
LastCommit
::
ID
)
end
...
...
@@ -885,7 +941,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
describe
'#autocrlf'
do
before
(
:all
)
do
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_MUTABLE_REPO_PATH
)
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_MUTABLE_REPO_PATH
)
@repo
.
rugged
.
config
[
'core.autocrlf'
]
=
true
end
...
...
@@ -900,14 +956,14 @@ describe Gitlab::Git::Repository, seed_helper: true do
describe
'#autocrlf='
do
before
(
:all
)
do
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_MUTABLE_REPO_PATH
)
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_MUTABLE_REPO_PATH
)
@repo
.
rugged
.
config
[
'core.autocrlf'
]
=
false
end
it
'should set the autocrlf option to the provided option'
do
@repo
.
autocrlf
=
:input
File
.
open
(
File
.
join
(
TEST_MUTABLE_REPO_PATH
,
'.git'
,
'config'
))
do
|
config_file
|
File
.
open
(
File
.
join
(
SEED_STORAGE_PATH
,
TEST_MUTABLE_REPO_PATH
,
'.git'
,
'config'
))
do
|
config_file
|
expect
(
config_file
.
read
).
to
match
(
'autocrlf = input'
)
end
end
...
...
@@ -999,7 +1055,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
end
describe
"#copy_gitattributes"
do
let
(
:attributes_path
)
{
File
.
join
(
TEST_REPO_PATH
,
'info/attributes'
)
}
let
(
:attributes_path
)
{
File
.
join
(
SEED_STORAGE_PATH
,
TEST_REPO_PATH
,
'info/attributes'
)
}
it
"raises an error with invalid ref"
do
expect
{
repository
.
copy_gitattributes
(
"invalid"
)
}.
to
raise_error
(
Gitlab
::
Git
::
Repository
::
InvalidRef
)
...
...
@@ -1075,7 +1131,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
end
describe
'#diffable'
do
info_dir_path
=
attributes_path
=
File
.
join
(
TEST_REPO_PATH
,
'info'
)
info_dir_path
=
attributes_path
=
File
.
join
(
SEED_STORAGE_PATH
,
TEST_REPO_PATH
,
'info'
)
attributes_path
=
File
.
join
(
info_dir_path
,
'attributes'
)
before
(
:all
)
do
...
...
@@ -1143,7 +1199,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
describe
'#local_branches'
do
before
(
:all
)
do
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
TEST_MUTABLE_REPO_PATH
)
@repo
=
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_MUTABLE_REPO_PATH
)
end
after
(
:all
)
do
...
...
@@ -1235,4 +1291,11 @@ describe Gitlab::Git::Repository, seed_helper: true do
sha
=
Rugged
::
Commit
.
create
(
repo
,
options
)
repo
.
lookup
(
sha
)
end
def
stub_gitaly
allow
(
Gitlab
::
GitalyClient
).
to
receive
(
:feature_enabled?
).
and_return
(
true
)
stub
=
double
(
:stub
)
allow
(
Gitaly
::
Ref
::
Stub
).
to
receive
(
:new
).
and_return
(
stub
)
end
end
spec/lib/gitlab/git/tag_spec.rb
View file @
ebdfda69
require
"spec_helper"
describe
Gitlab
::
Git
::
Tag
,
seed_helper:
true
do
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
)
}
describe
'first tag'
do
let
(
:tag
)
{
repository
.
tags
.
first
}
...
...
spec/lib/gitlab/git/tree_spec.rb
View file @
ebdfda69
...
...
@@ -2,7 +2,7 @@ require "spec_helper"
describe
Gitlab
::
Git
::
Tree
,
seed_helper:
true
do
context
:repo
do
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
TEST_REPO_PATH
)
}
let
(
:repository
)
{
Gitlab
::
Git
::
Repository
.
new
(
'default'
,
TEST_REPO_PATH
)
}
let
(
:tree
)
{
Gitlab
::
Git
::
Tree
.
where
(
repository
,
SeedRepo
::
Commit
::
ID
)
}
it
{
expect
(
tree
).
to
be_kind_of
Array
}
...
...
spec/lib/gitlab/gitaly_client/notifications_spec.rb
View file @
ebdfda69
...
...
@@ -2,12 +2,15 @@ require 'spec_helper'
describe
Gitlab
::
GitalyClient
::
Notifications
do
describe
'#post_receive'
do
let
(
:project
)
{
create
(
:empty_project
)
}
let
(
:repo_path
)
{
project
.
repository
.
path_to_repo
}
subject
{
described_class
.
new
(
project
.
repository_storage
,
project
.
full_path
+
'.git'
)
}
it
'sends a post_receive message'
do
repo_path
=
create
(
:empty_project
).
repository
.
path_to_repo
expect_any_instance_of
(
Gitaly
::
Notifications
::
Stub
).
to
receive
(
:post_receive
).
with
(
post_receive
_request_with_repo_path
(
repo_path
))
to
receive
(
:post_receive
).
with
(
gitaly
_request_with_repo_path
(
repo_path
))
described_class
.
new
(
repo_path
)
.
post_receive
subject
.
post_receive
end
end
end
spec/lib/gitlab/gitaly_client/ref_spec.rb
0 → 100644
View file @
ebdfda69
require
'spec_helper'
describe
Gitlab
::
GitalyClient
::
Ref
do
let
(
:project
)
{
create
(
:empty_project
)
}
let
(
:repo_path
)
{
project
.
repository
.
path_to_repo
}
let
(
:client
)
{
Gitlab
::
GitalyClient
::
Ref
.
new
(
project
.
repository_storage
,
project
.
full_path
+
'.git'
)
}
before
do
allow
(
Gitlab
.
config
.
gitaly
).
to
receive
(
:enabled
).
and_return
(
true
)
end
describe
'#branch_names'
do
it
'sends a find_all_branch_names message'
do
expect_any_instance_of
(
Gitaly
::
Ref
::
Stub
).
to
receive
(
:find_all_branch_names
).
with
(
gitaly_request_with_repo_path
(
repo_path
)).
and_return
([])
client
.
branch_names
end
end
describe
'#tag_names'
do
it
'sends a find_all_tag_names message'
do
expect_any_instance_of
(
Gitaly
::
Ref
::
Stub
).
to
receive
(
:find_all_tag_names
).
with
(
gitaly_request_with_repo_path
(
repo_path
)).
and_return
([])
client
.
tag_names
end
end
describe
'#default_branch_name'
do
it
'sends a find_default_branch_name message'
do
expect_any_instance_of
(
Gitaly
::
Ref
::
Stub
).
to
receive
(
:find_default_branch_name
).
with
(
gitaly_request_with_repo_path
(
repo_path
)).
and_return
(
double
(
name:
'foo'
))
client
.
default_branch_name
end
end
end
spec/support/matchers/gitaly_matchers.rb
View file @
ebdfda69
RSpec
::
Matchers
.
define
:
post_receive
_request_with_repo_path
do
|
path
|
RSpec
::
Matchers
.
define
:
gitaly
_request_with_repo_path
do
|
path
|
match
{
|
actual
|
actual
.
repository
.
path
==
path
}
end
spec/support/seed_helper.rb
View file @
ebdfda69
require_relative
'test_env'
# This file is specific to specs in spec/lib/gitlab/git/
SEED_
REPOSITORY_PATH
=
File
.
expand_path
(
'../../tmp/repositories'
,
__dir__
)
TEST_REPO_PATH
=
File
.
join
(
SEED_REPOSITORY_PATH
,
'gitlab-git-test.git'
)
TEST_NORMAL_REPO_PATH
=
File
.
join
(
SEED_REPOSITORY_PATH
,
"not-bare-repo.git"
)
TEST_MUTABLE_REPO_PATH
=
File
.
join
(
SEED_REPOSITORY_PATH
,
"mutable-repo.git"
)
TEST_BROKEN_REPO_PATH
=
File
.
join
(
SEED_REPOSITORY_PATH
,
"broken-repo.git"
)
SEED_
STORAGE_PATH
=
TestEnv
.
repos_path
TEST_REPO_PATH
=
'gitlab-git-test.git'
.
freeze
TEST_NORMAL_REPO_PATH
=
'not-bare-repo.git'
.
freeze
TEST_MUTABLE_REPO_PATH
=
'mutable-repo.git'
.
freeze
TEST_BROKEN_REPO_PATH
=
'broken-repo.git'
.
freeze
module
SeedHelper
GITLAB_GIT_TEST_REPO_URL
=
ENV
.
fetch
(
'GITLAB_GIT_TEST_REPO_URL'
,
'https://gitlab.com/gitlab-org/gitlab-git-test.git'
).
freeze
def
ensure_seeds
if
File
.
exist?
(
SEED_
REPOSITORY
_PATH
)
FileUtils
.
rm_r
(
SEED_
REPOSITORY
_PATH
)
if
File
.
exist?
(
SEED_
STORAGE
_PATH
)
FileUtils
.
rm_r
(
SEED_
STORAGE
_PATH
)
end
FileUtils
.
mkdir_p
(
SEED_
REPOSITORY
_PATH
)
FileUtils
.
mkdir_p
(
SEED_
STORAGE
_PATH
)
create_bare_seeds
create_normal_seeds
...
...
@@ -26,41 +28,45 @@ module SeedHelper
def
create_bare_seeds
system
(
git_env
,
*
%W(
#{
Gitlab
.
config
.
git
.
bin_path
}
clone --bare
#{
GITLAB_GIT_TEST_REPO_URL
}
)
,
chdir:
SEED_
REPOSITORY
_PATH
,
chdir:
SEED_
STORAGE
_PATH
,
out:
'/dev/null'
,
err:
'/dev/null'
)
end
def
create_normal_seeds
system
(
git_env
,
*
%W(
#{
Gitlab
.
config
.
git
.
bin_path
}
clone
#{
TEST_REPO_PATH
}
#{
TEST_NORMAL_REPO_PATH
}
)
,
chdir:
SEED_STORAGE_PATH
,
out:
'/dev/null'
,
err:
'/dev/null'
)
end
def
create_mutable_seeds
system
(
git_env
,
*
%W(
#{
Gitlab
.
config
.
git
.
bin_path
}
clone
#{
TEST_REPO_PATH
}
#{
TEST_MUTABLE_REPO_PATH
}
)
,
chdir:
SEED_STORAGE_PATH
,
out:
'/dev/null'
,
err:
'/dev/null'
)
system
(
git_env
,
*
%w(git branch -t feature origin/feature)
,
chdir:
TEST_MUTABLE_REPO_PATH
,
out:
'/dev/null'
,
err:
'/dev/null'
)
mutable_repo_full_path
=
File
.
join
(
SEED_STORAGE_PATH
,
TEST_MUTABLE_REPO_PATH
)
system
(
git_env
,
*
%W(
#{
Gitlab
.
config
.
git
.
bin_path
}
branch -t feature origin/feature)
,
chdir:
mutable_repo_full_path
,
out:
'/dev/null'
,
err:
'/dev/null'
)
system
(
git_env
,
*
%W(
#{
Gitlab
.
config
.
git
.
bin_path
}
remote add expendable
#{
GITLAB_GIT_TEST_REPO_URL
}
)
,
chdir:
TEST_MUTABLE_REPO_PATH
,
out:
'/dev/null'
,
err:
'/dev/null'
)
chdir:
mutable_repo_full_path
,
out:
'/dev/null'
,
err:
'/dev/null'
)
end
def
create_broken_seeds
system
(
git_env
,
*
%W(
#{
Gitlab
.
config
.
git
.
bin_path
}
clone --bare
#{
TEST_REPO_PATH
}
#{
TEST_BROKEN_REPO_PATH
}
)
,
chdir:
SEED_STORAGE_PATH
,
out:
'/dev/null'
,
err:
'/dev/null'
)
refs_path
=
File
.
join
(
TEST_BROKEN_REPO_PATH
,
'refs'
)
refs_path
=
File
.
join
(
SEED_STORAGE_PATH
,
TEST_BROKEN_REPO_PATH
,
'refs'
)
FileUtils
.
rm_r
(
refs_path
)
end
def
create_git_attributes
dir
=
File
.
join
(
SEED_
REPOSITORY
_PATH
,
'with-git-attributes.git'
,
'info'
)
dir
=
File
.
join
(
SEED_
STORAGE
_PATH
,
'with-git-attributes.git'
,
'info'
)
FileUtils
.
mkdir_p
(
dir
)
...
...
@@ -85,7 +91,7 @@ bla/bla.txt
end
def
create_invalid_git_attributes
dir
=
File
.
join
(
SEED_
REPOSITORY
_PATH
,
'with-invalid-git-attributes.git'
,
'info'
)
dir
=
File
.
join
(
SEED_
STORAGE
_PATH
,
'with-invalid-git-attributes.git'
,
'info'
)
FileUtils
.
mkdir_p
(
dir
)
...
...
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