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
1
Merge Requests
1
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
nexedi
gitlab-ce
Commits
d8cd11d3
Commit
d8cd11d3
authored
Mar 22, 2019
by
Nick Thomas
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rename GitPushService -> Git::BranchPushService
parent
80ea525a
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
312 additions
and
317 deletions
+312
-317
app/services/after_branch_delete_service.rb
app/services/after_branch_delete_service.rb
+1
-4
app/services/git/branch_push_service.rb
app/services/git/branch_push_service.rb
+246
-0
app/services/git_push_service.rb
app/services/git_push_service.rb
+0
-245
app/workers/create_gpg_signature_worker.rb
app/workers/create_gpg_signature_worker.rb
+2
-2
app/workers/post_receive.rb
app/workers/post_receive.rb
+1
-1
ee/app/services/ee/git/branch_push_service.rb
ee/app/services/ee/git/branch_push_service.rb
+31
-0
ee/app/services/ee/git_push_service.rb
ee/app/services/ee/git_push_service.rb
+0
-29
ee/spec/services/ee/git/branch_push_service_spec.rb
ee/spec/services/ee/git/branch_push_service_spec.rb
+19
-1
ee/spec/workers/post_receive_spec.rb
ee/spec/workers/post_receive_spec.rb
+1
-1
spec/features/projects/environments/environment_spec.rb
spec/features/projects/environments/environment_spec.rb
+1
-1
spec/services/git/branch_push_service_spec.rb
spec/services/git/branch_push_service_spec.rb
+2
-25
spec/support/helpers/cycle_analytics_helpers.rb
spec/support/helpers/cycle_analytics_helpers.rb
+1
-1
spec/workers/post_receive_spec.rb
spec/workers/post_receive_spec.rb
+7
-7
No files found.
app/services/after_branch_delete_service.rb
View file @
d8cd11d3
# frozen_string_literal: true
# frozen_string_literal: true
##
# Branch can be deleted either by DeleteBranchService or by Git::BranchPushService.
# Branch can be deleted either by DeleteBranchService
# or by GitPushService.
#
class
AfterBranchDeleteService
<
BaseService
class
AfterBranchDeleteService
<
BaseService
attr_reader
:branch_name
attr_reader
:branch_name
...
...
app/services/git/branch_push_service.rb
0 → 100644
View file @
d8cd11d3
# frozen_string_literal: true
module
Git
class
BranchPushService
<
BaseService
attr_accessor
:push_data
,
:push_commits
include
Gitlab
::
Access
include
Gitlab
::
Utils
::
StrongMemoize
# The N most recent commits to process in a single push payload.
PROCESS_COMMIT_LIMIT
=
100
# This method will be called after each git update
# and only if the provided user and project are present in GitLab.
#
# All callbacks for post receive action should be placed here.
#
# Next, this method:
# 1. Creates the push event
# 2. Updates merge requests
# 3. Recognizes cross-references from commit messages
# 4. Executes the project's webhooks
# 5. Executes the project's services
# 6. Checks if the project's main language has changed
#
def
execute
update_commits
execute_related_hooks
perform_housekeeping
update_remote_mirrors
update_caches
update_signatures
end
def
update_commits
project
.
repository
.
after_create
if
project
.
empty_repo?
project
.
repository
.
after_push_commit
(
branch_name
)
if
push_remove_branch?
project
.
repository
.
after_remove_branch
@push_commits
=
[]
elsif
push_to_new_branch?
project
.
repository
.
after_create_branch
# Re-find the pushed commits.
if
default_branch?
# Initial push to the default branch. Take the full history of that branch as "newly pushed".
process_default_branch
else
# Use the pushed commits that aren't reachable by the default branch
# as a heuristic. This may include more commits than are actually pushed, but
# that shouldn't matter because we check for existing cross-references later.
@push_commits
=
project
.
repository
.
commits_between
(
project
.
default_branch
,
params
[
:newrev
])
# don't process commits for the initial push to the default branch
process_commit_messages
end
elsif
push_to_existing_branch?
# Collect data for this git push
@push_commits
=
project
.
repository
.
commits_between
(
params
[
:oldrev
],
params
[
:newrev
])
process_commit_messages
# Update the bare repositories info/attributes file using the contents of the default branches
# .gitattributes file
update_gitattributes
if
default_branch?
end
end
def
update_gitattributes
project
.
repository
.
copy_gitattributes
(
params
[
:ref
])
end
def
update_caches
if
default_branch?
if
push_to_new_branch?
# If this is the initial push into the default branch, the file type caches
# will already be reset as a result of `Project#change_head`.
types
=
[]
else
paths
=
Set
.
new
last_pushed_commits
.
each
do
|
commit
|
commit
.
raw_deltas
.
each
do
|
diff
|
paths
<<
diff
.
new_path
end
end
types
=
Gitlab
::
FileDetector
.
types_in_paths
(
paths
.
to_a
)
end
DetectRepositoryLanguagesWorker
.
perform_async
(
@project
.
id
,
current_user
.
id
)
else
types
=
[]
end
ProjectCacheWorker
.
perform_async
(
project
.
id
,
types
,
[
:commit_count
,
:repository_size
])
end
# rubocop: disable CodeReuse/ActiveRecord
def
update_signatures
commit_shas
=
last_pushed_commits
.
map
(
&
:sha
)
return
if
commit_shas
.
empty?
shas_with_cached_signatures
=
GpgSignature
.
where
(
commit_sha:
commit_shas
).
pluck
(
:commit_sha
)
commit_shas
-=
shas_with_cached_signatures
return
if
commit_shas
.
empty?
commit_shas
=
Gitlab
::
Git
::
Commit
.
shas_with_signatures
(
project
.
repository
,
commit_shas
)
CreateGpgSignatureWorker
.
perform_async
(
commit_shas
,
project
.
id
)
end
# rubocop: enable CodeReuse/ActiveRecord
# Schedules processing of commit messages.
def
process_commit_messages
default
=
default_branch?
last_pushed_commits
.
each
do
|
commit
|
if
commit
.
matches_cross_reference_regex?
ProcessCommitWorker
.
perform_async
(
project
.
id
,
current_user
.
id
,
commit
.
to_hash
,
default
)
end
end
end
def
update_remote_mirrors
return
unless
project
.
has_remote_mirror?
project
.
mark_stuck_remote_mirrors_as_failed!
project
.
update_remote_mirrors
end
def
execute_related_hooks
# Update merge requests that may be affected by this push. A new branch
# could cause the last commit of a merge request to change.
#
UpdateMergeRequestsWorker
.
perform_async
(
project
.
id
,
current_user
.
id
,
params
[
:oldrev
],
params
[
:newrev
],
params
[
:ref
])
EventCreateService
.
new
.
push
(
project
,
current_user
,
build_push_data
)
Ci
::
CreatePipelineService
.
new
(
project
,
current_user
,
build_push_data
).
execute
(
:push
,
pipeline_options
)
project
.
execute_hooks
(
build_push_data
.
dup
,
:push_hooks
)
project
.
execute_services
(
build_push_data
.
dup
,
:push_hooks
)
if
push_remove_branch?
AfterBranchDeleteService
.
new
(
project
,
current_user
)
.
execute
(
branch_name
)
end
end
def
perform_housekeeping
housekeeping
=
Projects
::
HousekeepingService
.
new
(
project
)
housekeeping
.
increment!
housekeeping
.
execute
if
housekeeping
.
needed?
rescue
Projects
::
HousekeepingService
::
LeaseTaken
end
def
process_default_branch
offset
=
[
push_commits_count_for_ref
-
PROCESS_COMMIT_LIMIT
,
0
].
max
@push_commits
=
project
.
repository
.
commits
(
params
[
:newrev
],
offset:
offset
,
limit:
PROCESS_COMMIT_LIMIT
)
project
.
after_create_default_branch
end
def
build_push_data
@push_data
||=
Gitlab
::
DataBuilder
::
Push
.
build
(
project
,
current_user
,
params
[
:oldrev
],
params
[
:newrev
],
params
[
:ref
],
@push_commits
,
commits_count:
commits_count
,
push_options:
params
[
:push_options
]
||
[]
)
end
def
push_to_existing_branch?
# Return if this is not a push to a branch (e.g. new commits)
branch_ref?
&&
!
Gitlab
::
Git
.
blank_ref?
(
params
[
:oldrev
])
end
def
push_to_new_branch?
strong_memoize
(
:push_to_new_branch
)
do
branch_ref?
&&
Gitlab
::
Git
.
blank_ref?
(
params
[
:oldrev
])
end
end
def
push_remove_branch?
strong_memoize
(
:push_remove_branch
)
do
branch_ref?
&&
Gitlab
::
Git
.
blank_ref?
(
params
[
:newrev
])
end
end
def
default_branch?
branch_ref?
&&
(
branch_name
==
project
.
default_branch
||
project
.
default_branch
.
nil?
)
end
def
commit_user
(
commit
)
commit
.
author
||
current_user
end
def
branch_name
strong_memoize
(
:branch_name
)
do
Gitlab
::
Git
.
ref_name
(
params
[
:ref
])
end
end
def
branch_ref?
strong_memoize
(
:branch_ref
)
do
Gitlab
::
Git
.
branch_ref?
(
params
[
:ref
])
end
end
def
commits_count
return
push_commits_count_for_ref
if
default_branch?
&&
push_to_new_branch?
Array
(
@push_commits
).
size
end
def
push_commits_count_for_ref
strong_memoize
(
:push_commits_count_for_ref
)
do
project
.
repository
.
commit_count_for_ref
(
params
[
:ref
])
end
end
def
last_pushed_commits
@last_pushed_commits
||=
@push_commits
.
last
(
PROCESS_COMMIT_LIMIT
)
end
private
def
pipeline_options
{}
# to be overridden in EE
end
end
end
Git
::
BranchPushService
.
prepend
(
EE
::
Git
::
BranchPushService
)
app/services/git_push_service.rb
deleted
100644 → 0
View file @
80ea525a
# frozen_string_literal: true
class
GitPushService
<
BaseService
attr_accessor
:push_data
,
:push_commits
include
Gitlab
::
Access
include
Gitlab
::
Utils
::
StrongMemoize
# The N most recent commits to process in a single push payload.
PROCESS_COMMIT_LIMIT
=
100
# This method will be called after each git update
# and only if the provided user and project are present in GitLab.
#
# All callbacks for post receive action should be placed here.
#
# Next, this method:
# 1. Creates the push event
# 2. Updates merge requests
# 3. Recognizes cross-references from commit messages
# 4. Executes the project's webhooks
# 5. Executes the project's services
# 6. Checks if the project's main language has changed
#
def
execute
update_commits
execute_related_hooks
perform_housekeeping
update_remote_mirrors
update_caches
update_signatures
end
protected
def
update_commits
project
.
repository
.
after_create
if
project
.
empty_repo?
project
.
repository
.
after_push_commit
(
branch_name
)
if
push_remove_branch?
project
.
repository
.
after_remove_branch
@push_commits
=
[]
elsif
push_to_new_branch?
project
.
repository
.
after_create_branch
# Re-find the pushed commits.
if
default_branch?
# Initial push to the default branch. Take the full history of that branch as "newly pushed".
process_default_branch
else
# Use the pushed commits that aren't reachable by the default branch
# as a heuristic. This may include more commits than are actually pushed, but
# that shouldn't matter because we check for existing cross-references later.
@push_commits
=
project
.
repository
.
commits_between
(
project
.
default_branch
,
params
[
:newrev
])
# don't process commits for the initial push to the default branch
process_commit_messages
end
elsif
push_to_existing_branch?
# Collect data for this git push
@push_commits
=
project
.
repository
.
commits_between
(
params
[
:oldrev
],
params
[
:newrev
])
process_commit_messages
# Update the bare repositories info/attributes file using the contents of the default branches
# .gitattributes file
update_gitattributes
if
default_branch?
end
end
def
update_gitattributes
project
.
repository
.
copy_gitattributes
(
params
[
:ref
])
end
def
update_caches
if
default_branch?
if
push_to_new_branch?
# If this is the initial push into the default branch, the file type caches
# will already be reset as a result of `Project#change_head`.
types
=
[]
else
paths
=
Set
.
new
last_pushed_commits
.
each
do
|
commit
|
commit
.
raw_deltas
.
each
do
|
diff
|
paths
<<
diff
.
new_path
end
end
types
=
Gitlab
::
FileDetector
.
types_in_paths
(
paths
.
to_a
)
end
DetectRepositoryLanguagesWorker
.
perform_async
(
@project
.
id
,
current_user
.
id
)
else
types
=
[]
end
ProjectCacheWorker
.
perform_async
(
project
.
id
,
types
,
[
:commit_count
,
:repository_size
])
end
# rubocop: disable CodeReuse/ActiveRecord
def
update_signatures
commit_shas
=
last_pushed_commits
.
map
(
&
:sha
)
return
if
commit_shas
.
empty?
shas_with_cached_signatures
=
GpgSignature
.
where
(
commit_sha:
commit_shas
).
pluck
(
:commit_sha
)
commit_shas
-=
shas_with_cached_signatures
return
if
commit_shas
.
empty?
commit_shas
=
Gitlab
::
Git
::
Commit
.
shas_with_signatures
(
project
.
repository
,
commit_shas
)
CreateGpgSignatureWorker
.
perform_async
(
commit_shas
,
project
.
id
)
end
# rubocop: enable CodeReuse/ActiveRecord
# Schedules processing of commit messages.
def
process_commit_messages
default
=
default_branch?
last_pushed_commits
.
each
do
|
commit
|
if
commit
.
matches_cross_reference_regex?
ProcessCommitWorker
.
perform_async
(
project
.
id
,
current_user
.
id
,
commit
.
to_hash
,
default
)
end
end
end
def
update_remote_mirrors
return
unless
project
.
has_remote_mirror?
project
.
mark_stuck_remote_mirrors_as_failed!
project
.
update_remote_mirrors
end
def
execute_related_hooks
# Update merge requests that may be affected by this push. A new branch
# could cause the last commit of a merge request to change.
#
UpdateMergeRequestsWorker
.
perform_async
(
project
.
id
,
current_user
.
id
,
params
[
:oldrev
],
params
[
:newrev
],
params
[
:ref
])
EventCreateService
.
new
.
push
(
project
,
current_user
,
build_push_data
)
Ci
::
CreatePipelineService
.
new
(
project
,
current_user
,
build_push_data
).
execute
(
:push
,
pipeline_options
)
project
.
execute_hooks
(
build_push_data
.
dup
,
:push_hooks
)
project
.
execute_services
(
build_push_data
.
dup
,
:push_hooks
)
if
push_remove_branch?
AfterBranchDeleteService
.
new
(
project
,
current_user
)
.
execute
(
branch_name
)
end
end
def
perform_housekeeping
housekeeping
=
Projects
::
HousekeepingService
.
new
(
project
)
housekeeping
.
increment!
housekeeping
.
execute
if
housekeeping
.
needed?
rescue
Projects
::
HousekeepingService
::
LeaseTaken
end
def
process_default_branch
offset
=
[
push_commits_count_for_ref
-
PROCESS_COMMIT_LIMIT
,
0
].
max
@push_commits
=
project
.
repository
.
commits
(
params
[
:newrev
],
offset:
offset
,
limit:
PROCESS_COMMIT_LIMIT
)
project
.
after_create_default_branch
end
def
build_push_data
@push_data
||=
Gitlab
::
DataBuilder
::
Push
.
build
(
project
,
current_user
,
params
[
:oldrev
],
params
[
:newrev
],
params
[
:ref
],
@push_commits
,
commits_count:
commits_count
,
push_options:
params
[
:push_options
]
||
[])
end
def
push_to_existing_branch?
# Return if this is not a push to a branch (e.g. new commits)
branch_ref?
&&
!
Gitlab
::
Git
.
blank_ref?
(
params
[
:oldrev
])
end
def
push_to_new_branch?
strong_memoize
(
:push_to_new_branch
)
do
branch_ref?
&&
Gitlab
::
Git
.
blank_ref?
(
params
[
:oldrev
])
end
end
def
push_remove_branch?
strong_memoize
(
:push_remove_branch
)
do
branch_ref?
&&
Gitlab
::
Git
.
blank_ref?
(
params
[
:newrev
])
end
end
def
default_branch?
branch_ref?
&&
(
branch_name
==
project
.
default_branch
||
project
.
default_branch
.
nil?
)
end
def
commit_user
(
commit
)
commit
.
author
||
current_user
end
def
branch_name
strong_memoize
(
:branch_name
)
do
Gitlab
::
Git
.
ref_name
(
params
[
:ref
])
end
end
def
branch_ref?
strong_memoize
(
:branch_ref
)
do
Gitlab
::
Git
.
branch_ref?
(
params
[
:ref
])
end
end
def
commits_count
return
push_commits_count_for_ref
if
default_branch?
&&
push_to_new_branch?
Array
(
@push_commits
).
size
end
def
push_commits_count_for_ref
strong_memoize
(
:push_commits_count_for_ref
)
do
project
.
repository
.
commit_count_for_ref
(
params
[
:ref
])
end
end
def
last_pushed_commits
@last_pushed_commits
||=
@push_commits
.
last
(
PROCESS_COMMIT_LIMIT
)
end
private
def
pipeline_options
{}
# to be overridden in EE
end
end
GitPushService
.
prepend
(
EE
::
GitPushService
)
app/workers/create_gpg_signature_worker.rb
View file @
d8cd11d3
...
@@ -5,8 +5,8 @@ class CreateGpgSignatureWorker
...
@@ -5,8 +5,8 @@ class CreateGpgSignatureWorker
# rubocop: disable CodeReuse/ActiveRecord
# rubocop: disable CodeReuse/ActiveRecord
def
perform
(
commit_shas
,
project_id
)
def
perform
(
commit_shas
,
project_id
)
# Older versions of Git
PushService may push a single commit ID on the stack.
# Older versions of Git
::BranchPushService may push a single commit ID on
# We need this to be backwards compatible.
#
the stack.
We need this to be backwards compatible.
commit_shas
=
Array
(
commit_shas
)
commit_shas
=
Array
(
commit_shas
)
return
if
commit_shas
.
empty?
return
if
commit_shas
.
empty?
...
...
app/workers/post_receive.rb
View file @
d8cd11d3
...
@@ -46,7 +46,7 @@ class PostReceive
...
@@ -46,7 +46,7 @@ class PostReceive
ref:
ref
,
ref:
ref
,
push_options:
post_received
.
push_options
).
execute
push_options:
post_received
.
push_options
).
execute
elsif
Gitlab
::
Git
.
branch_ref?
(
ref
)
elsif
Gitlab
::
Git
.
branch_ref?
(
ref
)
GitPushService
.
new
(
Git
::
Branch
PushService
.
new
(
post_received
.
project
,
post_received
.
project
,
@user
,
@user
,
oldrev:
oldrev
,
oldrev:
oldrev
,
...
...
ee/app/services/ee/git/branch_push_service.rb
0 → 100644
View file @
d8cd11d3
# frozen_string_literal: true
module
EE
module
Git
module
BranchPushService
extend
::
Gitlab
::
Utils
::
Override
protected
override
:execute_related_hooks
def
execute_related_hooks
if
::
Gitlab
::
CurrentSettings
.
elasticsearch_indexing?
&&
default_branch?
&&
should_index_commits?
::
ElasticCommitIndexerWorker
.
perform_async
(
project
.
id
,
params
[
:oldrev
],
params
[
:newrev
])
end
super
end
private
def
should_index_commits?
::
Gitlab
::
Redis
::
SharedState
.
with
{
|
redis
|
!
redis
.
sismember
(
:elastic_projects_indexing
,
project
.
id
)
}
end
override
:pipeline_options
def
pipeline_options
{
mirror_update:
project
.
mirror?
&&
project
.
repository
.
up_to_date_with_upstream?
(
branch_name
)
}
end
end
end
end
ee/app/services/ee/git_push_service.rb
deleted
100644 → 0
View file @
80ea525a
# frozen_string_literal: true
module
EE
module
GitPushService
extend
::
Gitlab
::
Utils
::
Override
protected
override
:execute_related_hooks
def
execute_related_hooks
if
::
Gitlab
::
CurrentSettings
.
elasticsearch_indexing?
&&
default_branch?
&&
should_index_commits?
::
ElasticCommitIndexerWorker
.
perform_async
(
project
.
id
,
params
[
:oldrev
],
params
[
:newrev
])
end
super
end
private
def
should_index_commits?
::
Gitlab
::
Redis
::
SharedState
.
with
{
|
redis
|
!
redis
.
sismember
(
:elastic_projects_indexing
,
project
.
id
)
}
end
override
:pipeline_options
def
pipeline_options
{
mirror_update:
project
.
mirror?
&&
project
.
repository
.
up_to_date_with_upstream?
(
branch_name
)
}
end
end
end
ee/spec/services/ee/git_push_service_spec.rb
→
ee/spec/services/ee/git
/branch
_push_service_spec.rb
View file @
d8cd11d3
require
'spec_helper'
require
'spec_helper'
describe
GitPushService
do
describe
Git
::
Branch
PushService
do
include
RepoHelpers
include
RepoHelpers
set
(
:user
)
{
create
(
:user
)
}
set
(
:user
)
{
create
(
:user
)
}
...
@@ -53,6 +53,24 @@ describe GitPushService do
...
@@ -53,6 +53,24 @@ describe GitPushService do
subject
.
execute
subject
.
execute
end
end
it
"does not trigger indexer when push to non-default branch"
do
expect_any_instance_of
(
Gitlab
::
Elastic
::
Indexer
).
not_to
receive
(
:run
)
execute_service
(
project
,
user
,
oldrev
,
newrev
,
'refs/heads/other'
)
end
it
"triggers indexer when push to default branch"
do
expect_any_instance_of
(
Gitlab
::
Elastic
::
Indexer
).
to
receive
(
:run
)
execute_service
(
project
,
user
,
oldrev
,
newrev
,
ref
)
end
end
end
end
end
def
execute_service
(
project
,
user
,
oldrev
,
newrev
,
ref
)
service
=
described_class
.
new
(
project
,
user
,
oldrev:
oldrev
,
newrev:
newrev
,
ref:
ref
)
service
.
execute
service
end
end
end
ee/spec/workers/post_receive_spec.rb
View file @
d8cd11d3
...
@@ -23,7 +23,7 @@ describe PostReceive do
...
@@ -23,7 +23,7 @@ describe PostReceive do
# silence hooks so we can isolate
# silence hooks so we can isolate
allow_any_instance_of
(
Key
).
to
receive
(
:post_create_hook
).
and_return
(
true
)
allow_any_instance_of
(
Key
).
to
receive
(
:post_create_hook
).
and_return
(
true
)
allow_any_instance_of
(
Git
::
TagPushService
).
to
receive
(
:execute
).
and_return
(
true
)
allow_any_instance_of
(
Git
::
TagPushService
).
to
receive
(
:execute
).
and_return
(
true
)
allow_any_instance_of
(
GitPushService
).
to
receive
(
:execute
).
and_return
(
true
)
allow_any_instance_of
(
Git
::
Branch
PushService
).
to
receive
(
:execute
).
and_return
(
true
)
end
end
it
'calls Geo::RepositoryUpdatedService when running on a Geo primary node'
do
it
'calls Geo::RepositoryUpdatedService when running on a Geo primary node'
do
...
...
spec/features/projects/environments/environment_spec.rb
View file @
d8cd11d3
...
@@ -319,7 +319,7 @@ describe 'Environment' do
...
@@ -319,7 +319,7 @@ describe 'Environment' do
yield
yield
GitPushService
.
new
(
project
,
user
,
params
).
execute
Git
::
Branch
PushService
.
new
(
project
,
user
,
params
).
execute
end
end
end
end
...
...
spec/services/git_push_service_spec.rb
→
spec/services/git
/branch
_push_service_spec.rb
View file @
d8cd11d3
require
'spec_helper'
require
'spec_helper'
describe
Git
PushServic
e
do
describe
Git
::
BranchPushService
,
services:
tru
e
do
include
RepoHelpers
include
RepoHelpers
set
(
:user
)
{
create
(
:user
)
}
set
(
:user
)
{
create
(
:user
)
}
...
@@ -203,28 +203,6 @@ describe GitPushService do
...
@@ -203,28 +203,6 @@ describe GitPushService do
end
end
end
end
describe
"ES indexing"
do
before
do
stub_ee_application_setting
(
elasticsearch_search:
true
,
elasticsearch_indexing:
true
)
end
after
do
stub_ee_application_setting
(
elasticsearch_search:
false
,
elasticsearch_indexing:
false
)
end
it
"does not trigger indexer when push to non-default branch"
do
expect_any_instance_of
(
Gitlab
::
Elastic
::
Indexer
).
not_to
receive
(
:run
)
execute_service
(
project
,
user
,
oldrev
,
newrev
,
'refs/heads/other'
)
end
it
"triggers indexer when push to default branch"
do
expect_any_instance_of
(
Gitlab
::
Elastic
::
Indexer
).
to
receive
(
:run
)
execute_service
(
project
,
user
,
oldrev
,
newrev
,
ref
)
end
end
describe
"Push Event"
do
describe
"Push Event"
do
context
"with an existing branch"
do
context
"with an existing branch"
do
let!
(
:push_data
)
{
push_data_from_service
(
project
,
user
,
oldrev
,
newrev
,
ref
)
}
let!
(
:push_data
)
{
push_data_from_service
(
project
,
user
,
oldrev
,
newrev
,
ref
)
}
...
@@ -346,8 +324,7 @@ describe GitPushService do
...
@@ -346,8 +324,7 @@ describe GitPushService do
it
"when pushing a branch for the first time with an existing branch permission configured"
do
it
"when pushing a branch for the first time with an existing branch permission configured"
do
stub_application_setting
(
default_branch_protection:
Gitlab
::
Access
::
PROTECTION_DEV_CAN_PUSH
)
stub_application_setting
(
default_branch_protection:
Gitlab
::
Access
::
PROTECTION_DEV_CAN_PUSH
)
create
(
:protected_branch
,
:no_one_can_push
,
:developers_can_merge
,
create
(
:protected_branch
,
:no_one_can_push
,
:developers_can_merge
,
project:
project
,
name:
'master'
)
project:
project
,
name:
'master'
)
expect
(
project
).
to
receive
(
:execute_hooks
)
expect
(
project
).
to
receive
(
:execute_hooks
)
expect
(
project
.
default_branch
).
to
eq
(
"master"
)
expect
(
project
.
default_branch
).
to
eq
(
"master"
)
expect_any_instance_of
(
ProtectedBranches
::
CreateService
).
not_to
receive
(
:execute
)
expect_any_instance_of
(
ProtectedBranches
::
CreateService
).
not_to
receive
(
:execute
)
...
...
spec/support/helpers/cycle_analytics_helpers.rb
View file @
d8cd11d3
...
@@ -23,7 +23,7 @@ module CycleAnalyticsHelpers
...
@@ -23,7 +23,7 @@ module CycleAnalyticsHelpers
return
if
skip_push_handler
return
if
skip_push_handler
GitPushService
.
new
(
project
,
Git
::
Branch
PushService
.
new
(
project
,
user
,
user
,
oldrev:
oldrev
,
oldrev:
oldrev
,
newrev:
commit_shas
.
last
,
newrev:
commit_shas
.
last
,
...
...
spec/workers/post_receive_spec.rb
View file @
d8cd11d3
...
@@ -33,7 +33,7 @@ describe PostReceive do
...
@@ -33,7 +33,7 @@ describe PostReceive do
describe
"#process_project_changes"
do
describe
"#process_project_changes"
do
context
'empty changes'
do
context
'empty changes'
do
it
"does not call any PushService but runs after project hooks"
do
it
"does not call any PushService but runs after project hooks"
do
expect
(
GitPushService
).
not_to
receive
(
:new
)
expect
(
Git
::
Branch
PushService
).
not_to
receive
(
:new
)
expect
(
Git
::
TagPushService
).
not_to
receive
(
:new
)
expect
(
Git
::
TagPushService
).
not_to
receive
(
:new
)
expect_next_instance_of
(
SystemHooksService
)
{
|
service
|
expect
(
service
).
to
receive
(
:execute_hooks
)
}
expect_next_instance_of
(
SystemHooksService
)
{
|
service
|
expect
(
service
).
to
receive
(
:execute_hooks
)
}
...
@@ -45,7 +45,7 @@ describe PostReceive do
...
@@ -45,7 +45,7 @@ describe PostReceive do
let!
(
:key_id
)
{
""
}
let!
(
:key_id
)
{
""
}
it
'returns false'
do
it
'returns false'
do
expect
(
GitPushService
).
not_to
receive
(
:new
)
expect
(
Git
::
Branch
PushService
).
not_to
receive
(
:new
)
expect
(
Git
::
TagPushService
).
not_to
receive
(
:new
)
expect
(
Git
::
TagPushService
).
not_to
receive
(
:new
)
expect
(
described_class
.
new
.
perform
(
gl_repository
,
key_id
,
base64_changes
)).
to
be
false
expect
(
described_class
.
new
.
perform
(
gl_repository
,
key_id
,
base64_changes
)).
to
be
false
...
@@ -60,8 +60,8 @@ describe PostReceive do
...
@@ -60,8 +60,8 @@ describe PostReceive do
context
"branches"
do
context
"branches"
do
let
(
:changes
)
{
"123456 789012 refs/heads/tést"
}
let
(
:changes
)
{
"123456 789012 refs/heads/tést"
}
it
"calls GitPushService"
do
it
"calls Git
::Branch
PushService"
do
expect_any_instance_of
(
GitPushService
).
to
receive
(
:execute
).
and_return
(
true
)
expect_any_instance_of
(
Git
::
Branch
PushService
).
to
receive
(
:execute
).
and_return
(
true
)
expect_any_instance_of
(
Git
::
TagPushService
).
not_to
receive
(
:execute
)
expect_any_instance_of
(
Git
::
TagPushService
).
not_to
receive
(
:execute
)
described_class
.
new
.
perform
(
gl_repository
,
key_id
,
base64_changes
)
described_class
.
new
.
perform
(
gl_repository
,
key_id
,
base64_changes
)
end
end
...
@@ -71,7 +71,7 @@ describe PostReceive do
...
@@ -71,7 +71,7 @@ describe PostReceive do
let
(
:changes
)
{
"123456 789012 refs/tags/tag"
}
let
(
:changes
)
{
"123456 789012 refs/tags/tag"
}
it
"calls Git::TagPushService"
do
it
"calls Git::TagPushService"
do
expect_any_instance_of
(
GitPushService
).
not_to
receive
(
:execute
)
expect_any_instance_of
(
Git
::
Branch
PushService
).
not_to
receive
(
:execute
)
expect_any_instance_of
(
Git
::
TagPushService
).
to
receive
(
:execute
).
and_return
(
true
)
expect_any_instance_of
(
Git
::
TagPushService
).
to
receive
(
:execute
).
and_return
(
true
)
described_class
.
new
.
perform
(
gl_repository
,
key_id
,
base64_changes
)
described_class
.
new
.
perform
(
gl_repository
,
key_id
,
base64_changes
)
end
end
...
@@ -81,7 +81,7 @@ describe PostReceive do
...
@@ -81,7 +81,7 @@ describe PostReceive do
let
(
:changes
)
{
"123456 789012 refs/merge-requests/123"
}
let
(
:changes
)
{
"123456 789012 refs/merge-requests/123"
}
it
"does not call any of the services"
do
it
"does not call any of the services"
do
expect_any_instance_of
(
GitPushService
).
not_to
receive
(
:execute
)
expect_any_instance_of
(
Git
::
Branch
PushService
).
not_to
receive
(
:execute
)
expect_any_instance_of
(
Git
::
TagPushService
).
not_to
receive
(
:execute
)
expect_any_instance_of
(
Git
::
TagPushService
).
not_to
receive
(
:execute
)
described_class
.
new
.
perform
(
gl_repository
,
key_id
,
base64_changes
)
described_class
.
new
.
perform
(
gl_repository
,
key_id
,
base64_changes
)
end
end
...
@@ -125,7 +125,7 @@ describe PostReceive do
...
@@ -125,7 +125,7 @@ describe PostReceive do
allow_any_instance_of
(
Gitlab
::
DataBuilder
::
Repository
).
to
receive
(
:update
).
and_return
(
fake_hook_data
)
allow_any_instance_of
(
Gitlab
::
DataBuilder
::
Repository
).
to
receive
(
:update
).
and_return
(
fake_hook_data
)
# silence hooks so we can isolate
# silence hooks so we can isolate
allow_any_instance_of
(
Key
).
to
receive
(
:post_create_hook
).
and_return
(
true
)
allow_any_instance_of
(
Key
).
to
receive
(
:post_create_hook
).
and_return
(
true
)
allow_any_instance_of
(
GitPushService
).
to
receive
(
:execute
).
and_return
(
true
)
allow_any_instance_of
(
Git
::
Branch
PushService
).
to
receive
(
:execute
).
and_return
(
true
)
end
end
it
'calls SystemHooksService'
do
it
'calls SystemHooksService'
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