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
4f17c6b7
Commit
4f17c6b7
authored
Aug 10, 2017
by
Oswaldo Ferreira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Track enqueued and ongoing MRs
parent
d7f61bae
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
44 additions
and
29 deletions
+44
-29
merge_requests_controller.rb
app/controllers/projects/merge_requests_controller.rb
+2
-2
merge_request.rb
app/models/merge_request.rb
+9
-3
merge_service.rb
app/services/merge_requests/merge_service.rb
+3
-0
merge_when_pipeline_succeeds_service.rb
...es/merge_requests/merge_when_pipeline_succeeds_service.rb
+1
-1
update_service.rb
app/services/merge_requests/update_service.rb
+1
-1
merge_worker.rb
app/workers/merge_worker.rb
+0
-2
merge_request_spec.rb
spec/models/merge_request_spec.rb
+19
-20
merge_service_spec.rb
spec/services/merge_requests/merge_service_spec.rb
+9
-0
No files found.
app/controllers/projects/merge_requests_controller.rb
View file @
4f17c6b7
...
...
@@ -318,14 +318,14 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo
elsif
@merge_request
.
head_pipeline
.
success?
# This can be triggered when a user clicks the auto merge button while
# the tests finish at about the same time
MergeWorker
.
perform_async
(
@merge_request
.
id
,
current_user
.
id
,
params
)
@merge_request
.
async_merge
(
current_user
.
id
,
params
)
:success
else
:failed
end
else
MergeWorker
.
perform_async
(
@merge_request
.
id
,
current_user
.
id
,
params
)
@merge_request
.
async_merge
(
current_user
.
id
,
params
)
:success
end
...
...
app/models/merge_request.rb
View file @
4f17c6b7
...
...
@@ -241,6 +241,14 @@ class MergeRequest < ActiveRecord::Base
end
end
# Calls `MergeWorker` to proceed with the merge process and
# updates `merge_jid` with the MergeWorker#jid.
# This helps tracking enqueued and ongoing merge jobs.
def
async_merge
(
user_id
,
params
)
jid
=
MergeWorker
.
perform_async
(
id
,
user_id
,
params
)
update_column
(
:merge_jid
,
jid
)
end
def
first_commit
merge_request_diff
?
merge_request_diff
.
first_commit
:
compare_commits
.
first
end
...
...
@@ -384,9 +392,7 @@ class MergeRequest < ActiveRecord::Base
end
def
merge_ongoing?
return
false
unless
merge_jid
Gitlab
::
SidekiqStatus
.
num_running
([
merge_jid
])
>
0
merge_jid
&&
!
merged?
end
def
closed_without_fork?
...
...
app/services/merge_requests/merge_service.rb
View file @
4f17c6b7
...
...
@@ -31,6 +31,9 @@ module MergeRequests
end
rescue
MergeError
=>
e
log_merge_error
(
e
.
message
,
save_message_on_model:
true
)
ensure
# Make sure to clean up merge_jid in the end of the merge process.
merge_request
.
update_column
(
:merge_jid
,
nil
)
end
private
...
...
app/services/merge_requests/merge_when_pipeline_succeeds_service.rb
View file @
4f17c6b7
...
...
@@ -30,7 +30,7 @@ module MergeRequests
next
end
MergeWorker
.
perform_async
(
merge_request
.
id
,
merge_request
.
merge_user_id
,
merge_request
.
merge_params
)
merge_request
.
async_merge
(
merge_request
.
merge_user_id
,
merge_request
.
merge_params
)
end
end
...
...
app/services/merge_requests/update_service.rb
View file @
4f17c6b7
...
...
@@ -83,7 +83,7 @@ module MergeRequests
if
merge_request
.
head_pipeline
&&
merge_request
.
head_pipeline
.
active?
MergeRequests
::
MergeWhenPipelineSucceedsService
.
new
(
project
,
current_user
).
execute
(
merge_request
)
else
MergeWorker
.
perform_async
(
merge_request
.
id
,
current_user
.
id
,
{})
merge_request
.
async_merge
(
current_user
.
id
,
{})
end
end
...
...
app/workers/merge_worker.rb
View file @
4f17c6b7
...
...
@@ -7,8 +7,6 @@ class MergeWorker
current_user
=
User
.
find
(
current_user_id
)
merge_request
=
MergeRequest
.
find
(
merge_request_id
)
merge_request
.
update_column
(
:merge_jid
,
jid
)
MergeRequests
::
MergeService
.
new
(
merge_request
.
target_project
,
current_user
,
params
)
.
execute
(
merge_request
)
end
...
...
spec/models/merge_request_spec.rb
View file @
4f17c6b7
...
...
@@ -931,6 +931,23 @@ describe MergeRequest do
end
end
describe
'#async_merge'
do
it
'enqueues MergeWorker job and updates merge_jid'
do
merge_request
=
create
(
:merge_request
)
user_id
=
double
(
:user_id
)
params
=
double
(
:params
)
merge_jid
=
'hash-123'
expect
(
MergeWorker
).
to
receive
(
:perform_async
).
with
(
merge_request
.
id
,
user_id
,
params
)
do
merge_jid
end
merge_request
.
async_merge
(
user_id
,
params
)
expect
(
merge_request
.
reload
.
merge_jid
).
to
eq
(
merge_jid
)
end
end
describe
'#check_if_can_be_merged'
do
let
(
:project
)
{
create
(
:project
,
only_allow_merge_if_pipeline_succeeds:
true
)
}
...
...
@@ -1370,29 +1387,11 @@ describe MergeRequest do
end
describe
'#merge_ongoing?'
do
it
'returns true when merge process is ongoing for merge_jid'
do
merge_request
=
create
(
:merge_request
,
merge_jid:
'foo'
)
allow
(
Gitlab
::
SidekiqStatus
).
to
receive
(
:num_running
).
with
([
'foo'
]).
and_return
(
1
)
it
'returns true when merge_id is present and MR is not merged'
do
merge_request
=
build_stubbed
(
:merge_request
,
state: :open
,
merge_jid:
'foo'
)
expect
(
merge_request
.
merge_ongoing?
).
to
be
(
true
)
end
it
'returns false when no merge process running for merge_jid'
do
merge_request
=
build
(
:merge_request
,
merge_jid:
'foo'
)
allow
(
Gitlab
::
SidekiqStatus
).
to
receive
(
:num_running
).
with
([
'foo'
]).
and_return
(
0
)
expect
(
merge_request
.
merge_ongoing?
).
to
be
(
false
)
end
it
'returns false when merge_jid is nil'
do
merge_request
=
build
(
:merge_request
,
merge_jid:
nil
)
expect
(
Gitlab
::
SidekiqStatus
).
not_to
receive
(
:num_running
)
expect
(
merge_request
.
merge_ongoing?
).
to
be
(
false
)
end
end
describe
"#closed_without_fork?"
do
...
...
spec/services/merge_requests/merge_service_spec.rb
View file @
4f17c6b7
...
...
@@ -12,6 +12,15 @@ describe MergeRequests::MergeService do
end
describe
'#execute'
do
it
'cleans up merge_jid from MergeRequest'
do
merge_request
.
update_column
(
:merge_jid
,
'hash-123'
)
service
=
described_class
.
new
(
project
,
user
,
commit_message:
'Awesome message'
)
service
.
execute
(
merge_request
)
expect
(
merge_request
.
reload
.
merge_jid
).
to
be_nil
end
context
'valid params'
do
let
(
:service
)
{
described_class
.
new
(
project
,
user
,
commit_message:
'Awesome message'
)
}
...
...
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