Commit cfcf24dce53d79c950de12eca0353b890ad95508
1 parent
25951b91
Exists in
master
and in
4 other branches
Execute project hooks when issue or merge request created
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Showing
4 changed files
with
31 additions
and
33 deletions
Show diff stats
app/observers/issue_observer.rb
1 | class IssueObserver < BaseObserver | 1 | class IssueObserver < BaseObserver |
2 | def after_create(issue) | 2 | def after_create(issue) |
3 | notification.new_issue(issue, current_user) | 3 | notification.new_issue(issue, current_user) |
4 | - | ||
5 | issue.create_cross_references!(issue.project, current_user) | 4 | issue.create_cross_references!(issue.project, current_user) |
5 | + execute_hooks(issue) | ||
6 | end | 6 | end |
7 | 7 | ||
8 | def after_close(issue, transition) | 8 | def after_close(issue, transition) |
9 | notification.close_issue(issue, current_user) | 9 | notification.close_issue(issue, current_user) |
10 | - | ||
11 | create_note(issue) | 10 | create_note(issue) |
11 | + execute_hooks(issue) | ||
12 | end | 12 | end |
13 | 13 | ||
14 | def after_reopen(issue, transition) | 14 | def after_reopen(issue, transition) |
@@ -29,4 +29,8 @@ class IssueObserver < BaseObserver | @@ -29,4 +29,8 @@ class IssueObserver < BaseObserver | ||
29 | def create_note(issue) | 29 | def create_note(issue) |
30 | Note.create_status_change_note(issue, issue.project, current_user, issue.state, current_commit) | 30 | Note.create_status_change_note(issue, issue.project, current_user, issue.state, current_commit) |
31 | end | 31 | end |
32 | + | ||
33 | + def execute_hooks(issue) | ||
34 | + issue.project.execute_hooks(issue.to_hook_data, :issue_hooks) | ||
35 | + end | ||
32 | end | 36 | end |
app/observers/merge_request_observer.rb
@@ -7,15 +7,15 @@ class MergeRequestObserver < ActivityObserver | @@ -7,15 +7,15 @@ class MergeRequestObserver < ActivityObserver | ||
7 | end | 7 | end |
8 | 8 | ||
9 | notification.new_merge_request(merge_request, current_user) | 9 | notification.new_merge_request(merge_request, current_user) |
10 | - | ||
11 | merge_request.create_cross_references!(merge_request.project, current_user) | 10 | merge_request.create_cross_references!(merge_request.project, current_user) |
11 | + execute_hooks(merge_request) | ||
12 | end | 12 | end |
13 | 13 | ||
14 | def after_close(merge_request, transition) | 14 | def after_close(merge_request, transition) |
15 | create_event(merge_request, Event::CLOSED) | 15 | create_event(merge_request, Event::CLOSED) |
16 | - Note.create_status_change_note(merge_request, merge_request.target_project, current_user, merge_request.state, nil) | ||
17 | - | ||
18 | notification.close_mr(merge_request, current_user) | 16 | notification.close_mr(merge_request, current_user) |
17 | + create_note(merge_request) | ||
18 | + execute_hooks(merge_request) | ||
19 | end | 19 | end |
20 | 20 | ||
21 | def after_merge(merge_request, transition) | 21 | def after_merge(merge_request, transition) |
@@ -31,11 +31,13 @@ class MergeRequestObserver < ActivityObserver | @@ -31,11 +31,13 @@ class MergeRequestObserver < ActivityObserver | ||
31 | action: Event::MERGED, | 31 | action: Event::MERGED, |
32 | author_id: merge_request.author_id_of_changes | 32 | author_id: merge_request.author_id_of_changes |
33 | ) | 33 | ) |
34 | + | ||
35 | + execute_hooks(merge_request) | ||
34 | end | 36 | end |
35 | 37 | ||
36 | def after_reopen(merge_request, transition) | 38 | def after_reopen(merge_request, transition) |
37 | create_event(merge_request, Event::REOPENED) | 39 | create_event(merge_request, Event::REOPENED) |
38 | - Note.create_status_change_note(merge_request, merge_request.target_project, current_user, merge_request.state, nil) | 40 | + create_note(merge_request) |
39 | end | 41 | end |
40 | 42 | ||
41 | def after_update(merge_request) | 43 | def after_update(merge_request) |
@@ -53,4 +55,15 @@ class MergeRequestObserver < ActivityObserver | @@ -53,4 +55,15 @@ class MergeRequestObserver < ActivityObserver | ||
53 | author_id: current_user.id | 55 | author_id: current_user.id |
54 | ) | 56 | ) |
55 | end | 57 | end |
58 | + | ||
59 | + private | ||
60 | + | ||
61 | + # Create merge request note with service comment like 'Status changed to closed' | ||
62 | + def create_note(merge_request) | ||
63 | + Note.create_status_change_note(merge_request, merge_request.target_project, current_user, merge_request.state, nil) | ||
64 | + end | ||
65 | + | ||
66 | + def execute_hooks(merge_request) | ||
67 | + merge_request.project.execute_hooks(merge_request.to_hook_data, :merge_request_hooks) | ||
68 | + end | ||
56 | end | 69 | end |
app/services/git_push_service.rb
@@ -32,7 +32,7 @@ class GitPushService | @@ -32,7 +32,7 @@ class GitPushService | ||
32 | end | 32 | end |
33 | 33 | ||
34 | if push_to_branch?(ref) | 34 | if push_to_branch?(ref) |
35 | - project.execute_hooks(@push_data.dup) | 35 | + project.execute_hooks(@push_data.dup, :push_hooks) |
36 | project.execute_services(@push_data.dup) | 36 | project.execute_services(@push_data.dup) |
37 | end | 37 | end |
38 | 38 |
spec/services/git_push_service_spec.rb
@@ -74,38 +74,19 @@ describe GitPushService do | @@ -74,38 +74,19 @@ describe GitPushService do | ||
74 | end | 74 | end |
75 | 75 | ||
76 | describe "Web Hooks" do | 76 | describe "Web Hooks" do |
77 | - context "with web hooks" do | ||
78 | - before do | ||
79 | - @project_hook = create(:project_hook) | ||
80 | - @project_hook_2 = create(:project_hook) | ||
81 | - project.hooks << [@project_hook, @project_hook_2] | ||
82 | - | ||
83 | - stub_request(:post, @project_hook.url) | ||
84 | - stub_request(:post, @project_hook_2.url) | ||
85 | - end | ||
86 | - | ||
87 | - it "executes multiple web hook" do | ||
88 | - @project_hook.should_receive(:async_execute).once | ||
89 | - @project_hook_2.should_receive(:async_execute).once | ||
90 | - | ||
91 | - service.execute(project, user, @oldrev, @newrev, @ref) | ||
92 | - end | ||
93 | - end | ||
94 | - | ||
95 | context "execute web hooks" do | 77 | context "execute web hooks" do |
96 | - before do | ||
97 | - @project_hook = create(:project_hook) | ||
98 | - project.hooks << [@project_hook] | ||
99 | - stub_request(:post, @project_hook.url) | ||
100 | - end | ||
101 | - | ||
102 | it "when pushing a branch for the first time" do | 78 | it "when pushing a branch for the first time" do |
103 | - @project_hook.should_receive(:async_execute) | 79 | + project.should_receive(:execute_hooks) |
104 | service.execute(project, user, @blankrev, 'newrev', 'refs/heads/master') | 80 | service.execute(project, user, @blankrev, 'newrev', 'refs/heads/master') |
105 | end | 81 | end |
106 | 82 | ||
83 | + it "when pushing new commits to existing branch" do | ||
84 | + project.should_receive(:execute_hooks) | ||
85 | + service.execute(project, user, 'oldrev', 'newrev', 'refs/heads/master') | ||
86 | + end | ||
87 | + | ||
107 | it "when pushing tags" do | 88 | it "when pushing tags" do |
108 | - @project_hook.should_not_receive(:async_execute) | 89 | + project.should_not_receive(:execute_hooks) |
109 | service.execute(project, user, 'newrev', 'newrev', 'refs/tags/v1.0.0') | 90 | service.execute(project, user, 'newrev', 'newrev', 'refs/tags/v1.0.0') |
110 | end | 91 | end |
111 | end | 92 | end |