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
9d3ee1ff
Commit
9d3ee1ff
authored
Aug 29, 2017
by
Lin Jen-Shin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Further break with_repo_branch_commit into parts
So it's more clear what could happen. Also add more tests about the behaviour.
parent
e6630d7f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
59 additions
and
20 deletions
+59
-20
repository.rb
app/models/repository.rb
+24
-19
repository_spec.rb
spec/models/repository_spec.rb
+35
-1
No files found.
app/models/repository.rb
View file @
9d3ee1ff
...
@@ -1000,29 +1000,22 @@ class Repository
...
@@ -1000,29 +1000,22 @@ class Repository
end
end
def
with_repo_branch_commit
(
start_repository
,
start_branch_name
)
def
with_repo_branch_commit
(
start_repository
,
start_branch_name
)
tmp_ref
=
nil
return
yield
nil
if
start_repository
.
empty_repo?
return
yield
nil
if
start_repository
.
empty_repo?
branch_commit
=
if
start_repository
==
self
if
start_repository
==
self
yield
commit
(
start_branch_name
)
commit
(
start_branch_name
)
else
sha
=
start_repository
.
commit
(
start_branch_name
).
sha
if
branch_commit
=
commit
(
sha
)
yield
branch_commit
else
else
sha
=
start_repository
.
find_branch
(
start_branch_name
).
target
with_repo_tmp_commit
(
commit
(
sha
)
||
start_repository
,
start_branch_name
,
sha
)
do
|
tmp_commit
|
begin
yield
tmp_commit
tmp_ref
=
fetch_ref
(
end
start_repository
.
path_to_repo
,
"
#{
Gitlab
::
Git
::
BRANCH_REF_PREFIX
}#{
start_branch_name
}
"
,
"refs/tmp/
#{
SecureRandom
.
hex
}
/head"
)
commit
(
start_repository
.
commit
(
start_branch_name
).
sha
)
end
end
end
end
yield
branch_commit
ensure
rugged
.
references
.
delete
(
tmp_ref
)
if
tmp_ref
end
end
def
add_remote
(
name
,
url
)
def
add_remote
(
name
,
url
)
...
@@ -1231,4 +1224,16 @@ class Repository
...
@@ -1231,4 +1224,16 @@ class Repository
.
commits_by_message
(
query
,
revision:
ref
,
path:
path
,
limit:
limit
,
offset:
offset
)
.
commits_by_message
(
query
,
revision:
ref
,
path:
path
,
limit:
limit
,
offset:
offset
)
.
map
{
|
c
|
commit
(
c
)
}
.
map
{
|
c
|
commit
(
c
)
}
end
end
def
with_repo_tmp_commit
(
start_repository
,
start_branch_name
,
sha
)
tmp_ref
=
fetch_ref
(
start_repository
.
path_to_repo
,
"
#{
Gitlab
::
Git
::
BRANCH_REF_PREFIX
}#{
start_branch_name
}
"
,
"refs/tmp/
#{
SecureRandom
.
hex
}
/head"
)
yield
commit
(
sha
)
ensure
rugged
.
references
.
delete
(
tmp_ref
)
if
tmp_ref
end
end
end
spec/models/repository_spec.rb
View file @
9d3ee1ff
...
@@ -923,13 +923,16 @@ describe Repository, models: true do
...
@@ -923,13 +923,16 @@ describe Repository, models: true do
describe
'#update_branch_with_hooks'
do
describe
'#update_branch_with_hooks'
do
let
(
:old_rev
)
{
'0b4bc9a49b562e85de7cc9e834518ea6828729b9'
}
# git rev-parse feature
let
(
:old_rev
)
{
'0b4bc9a49b562e85de7cc9e834518ea6828729b9'
}
# git rev-parse feature
let
(
:new_rev
)
{
'a74ae73c1ccde9b974a70e82b901588071dc142a'
}
# commit whose parent is old_rev
let
(
:new_rev
)
{
'a74ae73c1ccde9b974a70e82b901588071dc142a'
}
# commit whose parent is old_rev
let
(
:updating_ref
)
{
'refs/heads/feature'
}
let
(
:target_project
)
{
project
}
let
(
:target_repository
)
{
target_project
.
repository
}
context
'when pre hooks were successful'
do
context
'when pre hooks were successful'
do
before
do
before
do
service
=
Gitlab
::
Git
::
HooksService
.
new
service
=
Gitlab
::
Git
::
HooksService
.
new
expect
(
Gitlab
::
Git
::
HooksService
).
to
receive
(
:new
).
and_return
(
service
)
expect
(
Gitlab
::
Git
::
HooksService
).
to
receive
(
:new
).
and_return
(
service
)
expect
(
service
).
to
receive
(
:execute
)
expect
(
service
).
to
receive
(
:execute
)
.
with
(
committer
,
repository
,
old_rev
,
new_rev
,
'refs/heads/feature'
)
.
with
(
committer
,
target_repository
,
old_rev
,
new_rev
,
updating_ref
)
.
and_yield
(
service
).
and_return
(
true
)
.
and_yield
(
service
).
and_return
(
true
)
end
end
...
@@ -960,6 +963,37 @@ describe Repository, models: true do
...
@@ -960,6 +963,37 @@ describe Repository, models: true do
expect
(
repository
.
find_branch
(
'feature'
).
dereferenced_target
.
id
).
to
eq
(
new_rev
)
expect
(
repository
.
find_branch
(
'feature'
).
dereferenced_target
.
id
).
to
eq
(
new_rev
)
end
end
end
end
context
'when target project does not have the commit'
do
let
(
:target_project
)
{
create
(
:project
,
:empty_repo
)
}
let
(
:old_rev
)
{
Gitlab
::
Git
::
BLANK_SHA
}
let
(
:new_rev
)
{
project
.
commit
(
'feature'
).
sha
}
let
(
:updating_ref
)
{
'refs/heads/master'
}
it
'fetch_ref and create the branch'
do
expect
(
target_project
.
repository
).
to
receive
(
:fetch_ref
)
.
and_call_original
GitOperationService
.
new
(
committer
,
target_repository
)
.
with_branch
(
'master'
,
start_project:
project
,
start_branch_name:
'feature'
)
{
new_rev
}
expect
(
target_repository
.
branch_names
).
to
contain_exactly
(
'master'
)
end
end
context
'when target project already has the commit'
do
let
(
:target_project
)
{
create
(
:project
,
:repository
)
}
it
'does not fetch_ref and just pass the commit'
do
expect
(
target_repository
).
not_to
receive
(
:fetch_ref
)
GitOperationService
.
new
(
committer
,
target_repository
)
.
with_branch
(
'feature'
,
start_project:
project
)
{
new_rev
}
end
end
end
end
context
'when temporary ref failed to be created from other project'
do
context
'when temporary ref failed to be created from other project'
do
...
...
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