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
05f17e4d
Commit
05f17e4d
authored
Jan 30, 2018
by
Ahmad Sherif
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove repo reloading logic from Repository#find_branch
Gitlab::Git::Repository#find_branch has a similar logic. Fixes #42609
parent
6f32fa66
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
28 additions
and
23 deletions
+28
-23
repository.rb
app/models/repository.rb
+1
-9
repository_spec.rb
spec/lib/gitlab/git/repository_spec.rb
+19
-6
repository_spec.rb
spec/models/repository_spec.rb
+8
-8
No files found.
app/models/repository.rb
View file @
05f17e4d
...
...
@@ -173,15 +173,7 @@ class Repository
end
def
find_branch
(
name
,
fresh_repo:
true
)
# Since the Repository object may have in-memory index changes, invalidating the memoized Repository object may
# cause unintended side effects. Because finding a branch is a read-only operation, we can safely instantiate
# a new repo here to ensure a consistent state to avoid a libgit2 bug where concurrent access (e.g. via git gc)
# 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
=
fresh_repo
?
initialize_raw_repository
:
raw_repository
raw_repo
.
find_branch
(
name
)
raw_repository
.
find_branch
(
name
,
fresh_repo
)
end
def
find_tag
(
name
)
...
...
spec/lib/gitlab/git/repository_spec.rb
View file @
05f17e4d
...
...
@@ -1196,14 +1196,27 @@ describe Gitlab::Git::Repository, seed_helper: true do
context
'when Gitaly find_branch feature is disabled'
,
:skip_gitaly_mock
do
it_behaves_like
'finding a branch'
it
'should reload Rugged::Repository and return master'
do
expect
(
Rugged
::
Repository
).
to
receive
(
:new
).
twice
.
and_call_original
context
'force_reload is true'
do
it
'should reload Rugged::Repository'
do
expect
(
Rugged
::
Repository
).
to
receive
(
:new
).
twice
.
and_call_original
repository
.
find_branch
(
'master'
)
branch
=
repository
.
find_branch
(
'master'
,
force_reload:
true
)
repository
.
find_branch
(
'master'
)
branch
=
repository
.
find_branch
(
'master'
,
force_reload:
true
)
expect
(
branch
).
to
be_a_kind_of
(
Gitlab
::
Git
::
Branch
)
expect
(
branch
.
name
).
to
eq
(
'master'
)
expect
(
branch
).
to
be_a_kind_of
(
Gitlab
::
Git
::
Branch
)
expect
(
branch
.
name
).
to
eq
(
'master'
)
end
end
context
'force_reload is false'
do
it
'should not reload Rugged::Repository'
do
expect
(
Rugged
::
Repository
).
to
receive
(
:new
).
once
.
and_call_original
branch
=
repository
.
find_branch
(
'master'
,
force_reload:
false
)
expect
(
branch
).
to
be_a_kind_of
(
Gitlab
::
Git
::
Branch
)
expect
(
branch
.
name
).
to
eq
(
'master'
)
end
end
end
end
...
...
spec/models/repository_spec.rb
View file @
05f17e4d
...
...
@@ -960,19 +960,19 @@ describe Repository do
end
describe
'#find_branch'
do
it
'loads a branch with a fresh repo'
do
expect
(
Gitlab
::
Git
::
Repository
).
to
receive
(
:new
).
twice
.
and_call_original
context
'fresh_repo is true'
do
it
'delegates the call to raw_repository'
do
expect
(
repository
.
raw_repository
).
to
receive
(
:find_branch
).
with
(
'master'
,
true
)
2
.
times
do
expect
(
repository
.
find_branch
(
'feature'
)).
not_to
be_nil
repository
.
find_branch
(
'master'
,
fresh_repo:
true
)
end
end
it
'loads a branch with a cached repo'
do
expect
(
Gitlab
::
Git
::
Repository
).
to
receive
(
:new
).
once
.
and_call_original
context
'fresh_repo is false'
do
it
'delegates the call to raw_repository'
do
expect
(
repository
.
raw_repository
).
to
receive
(
:find_branch
).
with
(
'master'
,
false
)
2
.
times
do
expect
(
repository
.
find_branch
(
'feature'
,
fresh_repo:
false
)).
not_to
be_nil
repository
.
find_branch
(
'master'
,
fresh_repo:
false
)
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