3838
3939@ Named
4040public class TeamcityPullrequestEventListener {
41+
4142 private final TeamcityConnectionSettings connectionSettings ;
4243 private final SettingsService settingsService ;
4344 private final TeamcityConnector connector ;
4445 private final PullRequestService pullRequestService ;
45-
46+
4647 @ Inject
4748 public TeamcityPullrequestEventListener (
4849 final TeamcityConnectionSettings connectionSettings ,
@@ -51,34 +52,43 @@ public TeamcityPullrequestEventListener(
5152 this .connectionSettings = connectionSettings ;
5253 this .settingsService = settingsService ;
5354 this .pullRequestService = pullRequestService ;
54- this .connector = new TeamcityConnector (new HttpConnector ());
55+ this .connector = new TeamcityConnector (new HttpConnector ());
5556 }
56-
57+
5758 @ EventListener
5859 public void onPullRequestOpenedEvent (final PullRequestOpenedEvent event ) throws IOException , JSONException {
59- final PullRequest pr = event .getPullRequest ();
60+ final PullRequest pr = event .getPullRequest ();
6061 final Repository repo = pr .getFromRef ().getRepository ();
61- final Settings settings = this .settingsService .getSettings (repo );
62- try {
63- TriggerBuildFromPullRequest (pr , false );
64- } catch (final Exception ex ) {
65- TeamcityLogger .logMessage (settings , "PullRequest Opened Event Failed: " + ex .getMessage ());
66- }
62+ final Settings settings = this .settingsService .getSettings (repo );
63+
64+ Runnable r = () -> {
65+ try {
66+ TriggerBuildFromPullRequest (pr , false );
67+ } catch (final IOException | JSONException ex ) {
68+ TeamcityLogger .logMessage (settings , "PullRequest Opened Event Failed: " + ex .getMessage ());
69+ }
70+ };
71+
72+ new Thread (r ).start ();
6773 }
68-
74+
6975 @ EventListener
7076 public void onPullRequestParticipantsUpdatedEvent (final PullRequestParticipantsUpdatedEvent event ) throws IOException , JSONException {
7177 final PullRequest pr = event .getPullRequest ();
72- final Set <PullRequestParticipant > reviewers = pr .getReviewers ();
78+ final Set <PullRequestParticipant > reviewers = pr .getReviewers ();
7379 final Repository repo = pr .getFromRef ().getRepository ();
7480 final Settings settings = this .settingsService .getSettings (repo );
75- if (event .getAddedParticipants ().size () > 0 && reviewers .size () > 0 ) {
81+ if (event .getAddedParticipants ().size () > 0 && reviewers .size () > 0 ) {
7682 // trigger only when number of participations is 2 or higher (author + reviewer)
77- try {
78- TriggerBuildFromPullRequest (event .getPullRequest (), true );
79- } catch (final Exception ex ) {
80- TeamcityLogger .logMessage (settings , "PullRequest Reviwer update event failed: " + ex .getMessage ());
81- }
83+ Runnable r = () -> {
84+ try {
85+ TriggerBuildFromPullRequest (event .getPullRequest (), true );
86+ } catch (final IOException | JSONException ex ) {
87+ TeamcityLogger .logMessage (settings , "PullRequest Reviwer update event failed: " + ex .getMessage ());
88+ }
89+ };
90+
91+ new Thread (r ).start ();
8292 }
8393 }
8494
@@ -93,14 +103,19 @@ public void onPullRequestRescoped(final PullRequestRescopedEvent event) throws I
93103
94104 final PullRequest pr = event .getPullRequest ();
95105 final Repository repo = pr .getFromRef ().getRepository ();
96- final Settings settings = this .settingsService .getSettings (repo );
97- try {
98- TriggerBuildFromPullRequest (pr , false );
99- } catch (final Exception ex ) {
100- TeamcityLogger .logMessage (settings , "PullRequest Rescoped Event Failed: " + ex .getMessage ());
101- }
106+ final Settings settings = this .settingsService .getSettings (repo );
107+
108+ Runnable r = () -> {
109+ try {
110+ TriggerBuildFromPullRequest (pr , false );
111+ } catch (final IOException | JSONException ex ) {
112+ TeamcityLogger .logMessage (settings , "PullRequest Rescoped Event Failed: " + ex .getMessage ());
113+ }
114+ };
115+
116+ new Thread (r ).start ();
102117 }
103-
118+
104119 private void TriggerBuildFromPullRequest (final PullRequest pr , Boolean UpdatedReviewers ) throws IOException , JSONException {
105120 final Repository repo = pr .getFromRef ().getRepository ();
106121 final Settings settings = this .settingsService .getSettings (repo );
@@ -120,33 +135,32 @@ private void TriggerBuildFromPullRequest(final PullRequest pr, Boolean UpdatedRe
120135 }
121136
122137 Set triggeredBuilds = new HashSet ();
123-
138+
124139 final ArrayList <String > changes = ChangesetService .GetChangedFiles (pr , pullRequestService );
125140 final Trigger [] configurations = Trigger .GetBuildConfigurationsFromBranch (repositoryTriggersJson , branch );
126141 for (final Trigger buildConfig : configurations ) {
127142
128-
129143 if (buildConfig .isTriggerOnPullRequest ()) {
130- if (UpdatedReviewers && buildConfig .isTriggerWhenNoReviewers ()) {
144+ if (UpdatedReviewers && buildConfig .isTriggerWhenNoReviewers ()) {
131145 TeamcityLogger .logMessage (settings , "Skip For Update Reviewers: " + buildConfig .getBranchConfig ());
132146 // we dont want to build when reviewers were updated and we allow to trigger when no reviwers are defined
133147 continue ;
134148 }
135-
149+
136150 if (!areParticipants && !buildConfig .isTriggerWhenNoReviewers ()) {
137151 // we dont want to build if there are no participants
138152 TeamcityLogger .logMessage (settings , "Skip: " + buildConfig .getBranchConfig ());
139153 continue ;
140154 }
141-
155+
142156 if (triggeredBuilds .contains (buildConfig .getTarget ())) {
143157 continue ;
144158 }
145-
159+
146160 if (!ExclusionTriggers .ShouldTriggerOnListOfFiles (buildConfig .gettriggerInclusion (), buildConfig .gettriggerExclusion (), changes )) {
147161 continue ;
148162 }
149-
163+
150164 TeamcityLogger .logMessage (settings , "Trigger BuildId: " + buildConfig .getTarget ());
151165 try {
152166 if (this .connector .IsInQueue (conf , buildConfig .getTarget (), buildConfig .getBranchConfig (), settings )) {
@@ -185,7 +199,7 @@ private void TriggerBuildFromPullRequest(final PullRequest pr, Boolean UpdatedRe
185199 this .connector .ReQueueBuild (conf , id , settings , false );
186200 }
187201 }
188-
202+
189203 // at this point all builds were finished, so we need to trigger
190204 this .connector .QueueBuild (
191205 conf ,
0 commit comments