Skip to content

Commit 52ac6aa

Browse files
Fix post receive url with empty post and triggers
1 parent a11040c commit 52ac6aa

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

Diff for: app/services/redmine_hooks/call_webservices.rb

+14-5
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ def post_receive_url
2929
end
3030

3131
def needs_push?
32-
return true if post_receive_url.mode == :post
3332
return false if payloads.empty?
3433
return true unless use_triggers?
3534
return false if post_receive_url.triggers.empty?
@@ -52,13 +51,21 @@ def skip_message
5251
"This url doesn't need to be notified"
5352
end
5453

54+
def with_empty_payload?
55+
post_receive_url.mode == :post
56+
end
57+
58+
def empty_payload
59+
{ empty: true }
60+
end
61+
5562
private
5663

5764
def set_payloads_to_send
58-
@payloads_to_send = if post_receive_url.mode == :post
59-
{}
60-
elsif use_triggers?
65+
@payloads_to_send = if use_triggers?
6166
extract_payloads
67+
elsif with_empty_payload?
68+
empty_payload
6269
else
6370
payloads
6471
end
@@ -68,7 +75,9 @@ def extract_payloads
6875
new_payloads = []
6976
payloads.each do |payload|
7077
data = RedmineGitHosting::Utils::Git.parse_refspec payload[:ref]
71-
new_payloads << payload if data[:type] == 'heads' && post_receive_url.triggers.include?(data[:name])
78+
next unless data[:type] == 'heads' && post_receive_url.triggers.include?(data[:name])
79+
80+
new_payloads << (with_empty_payload? ? empty_payload : payload)
7281
end
7382
new_payloads
7483
end

Diff for: spec/services/redmine_hooks/call_webservices_spec.rb

+9-3
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,19 @@ def build_web_hook(payload, **opts)
3838

3939
context 'when triggers is set to master' do
4040
it 'should return the master payload' do
41-
web_hook = build_web_hook global_payload, use_triggers: true, triggers: ['master']
41+
web_hook = build_web_hook global_payload, use_triggers: true, mode: :github, triggers: ['master']
4242
expect(web_hook.needs_push?).to be true
43+
expect(web_hook.with_empty_payload?).to be false
4344
expect(web_hook.payloads_to_send).to eq master_payload
4445
end
45-
end
4646

47-
context 'when triggers is set to master' do
47+
it 'should return the empty payload if mode is post' do
48+
web_hook = build_web_hook global_payload, use_triggers: true, mode: :post, triggers: ['master']
49+
expect(web_hook.needs_push?).to be true
50+
expect(web_hook.with_empty_payload?).to be true
51+
expect(web_hook.payloads_to_send).to eq [web_hook.empty_payload]
52+
end
53+
4854
it 'should not be found in branches payload and return false' do
4955
web_hook = build_web_hook branches_payload, use_triggers: true, triggers: ['master']
5056
expect(web_hook.needs_push?).to be false

0 commit comments

Comments
 (0)