Skip to content

Commit e89bfe7

Browse files
committed
[FIXED JENKINS-18165]
AbstractProject->GitHubRepositoryName[] conversion is useful outside trigger As indicated by the pull request jenkinsci#27, it is useful to be able to figure out a list of repositories associated with the project even in the absence of the trigger setting. So I moved out this code into GitHubRepositoryName. This eliminated the need for the GitHubCommitNotifier to require a GitHubPushTrigger, which is the motivation for the pull request jenkinsci#27.
1 parent 5ca76ad commit e89bfe7

6 files changed

Lines changed: 67 additions & 45 deletions

File tree

src/main/java/com/cloudbees/jenkins/Cleaner.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public class Cleaner extends PeriodicWork {
3434
/**
3535
* Called when a {@link GitHubPushTrigger} is about to be removed.
3636
*/
37-
synchronized void onStop(GitHubPushTrigger trigger) {
38-
couldHaveBeenRemoved.addAll(trigger.getGitHubRepositories());
37+
synchronized void onStop(AbstractProject<?,?> job) {
38+
couldHaveBeenRemoved.addAll(GitHubRepositoryName.from(job));
3939
}
4040

4141
@Override
@@ -55,7 +55,7 @@ protected void doRun() throws Exception {
5555
for (AbstractProject<?,?> job : Hudson.getInstance().getItems(AbstractProject.class)) {
5656
GitHubPushTrigger trigger = job.getTrigger(GitHubPushTrigger.class);
5757
if (trigger!=null) {
58-
names.removeAll(trigger.getGitHubRepositories());
58+
names.removeAll(GitHubRepositoryName.from(job));
5959
}
6060
}
6161

src/main/java/com/cloudbees/jenkins/GitHubCommitNotifier.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListen
5252
BuildData buildData = build.getAction(BuildData.class);
5353
String sha1 = ObjectId.toString(buildData.getLastBuiltRevision().getSha1());
5454

55-
GitHubTrigger trigger = build.getProject().getTrigger(GitHubPushTrigger.class);
56-
for (GitHubRepositoryName gitHubRepositoryName : trigger.getGitHubRepositories()) {
55+
for (GitHubRepositoryName gitHubRepositoryName : GitHubRepositoryName.from(build.getProject())) {
5756
for (GHRepository repository : gitHubRepositoryName.resolve()) {
5857
GHCommitState state;
5958
String msg;

src/main/java/com/cloudbees/jenkins/GitHubPushTrigger.java

Lines changed: 5 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import hudson.model.Item;
1010
import hudson.model.AbstractProject;
1111
import hudson.model.Project;
12-
import hudson.plugins.git.GitSCM;
13-
import hudson.scm.SCM;
1412
import hudson.triggers.Trigger;
1513
import hudson.triggers.TriggerDescriptor;
1614
import hudson.util.SequentialExecutionQueue;
@@ -36,9 +34,6 @@
3634
import net.sf.json.JSONObject;
3735

3836
import org.apache.commons.jelly.XMLOutput;
39-
import org.eclipse.jgit.transport.RemoteConfig;
40-
import org.eclipse.jgit.transport.URIish;
41-
import org.jenkinsci.plugins.multiplescms.MultiSCM;
4237
import org.kohsuke.github.GHException;
4338
import org.kohsuke.github.GHRepository;
4439
import org.kohsuke.stapler.DataBoundConstructor;
@@ -128,48 +123,19 @@ public File getLogFile() {
128123
}
129124

130125
/**
131-
* Does this project read from a repository of the given user name and the
132-
* given repository name?
126+
* @deprecated
127+
* Use {@link GitHubRepositoryName#from(AbstractProject)}
133128
*/
134129
public Set<GitHubRepositoryName> getGitHubRepositories() {
135-
Set<GitHubRepositoryName> r = new HashSet<GitHubRepositoryName>();
136-
if (Hudson.getInstance().getPlugin("multiple-scms") != null
137-
&& job.getScm() instanceof MultiSCM) {
138-
MultiSCM multiSCM = (MultiSCM) job.getScm();
139-
List<SCM> scmList = multiSCM.getConfiguredSCMs();
140-
for (SCM scm : scmList) {
141-
addRepositories(r, scm);
142-
}
143-
} else {
144-
addRepositories(r, job.getScm());
145-
}
146-
return r;
147-
}
148-
149-
/**
150-
* @since 1.1
151-
*/
152-
protected void addRepositories(Set<GitHubRepositoryName> r, SCM scm) {
153-
if (scm instanceof GitSCM) {
154-
GitSCM git = (GitSCM) scm;
155-
for (RemoteConfig rc : git.getRepositories()) {
156-
for (URIish uri : rc.getURIs()) {
157-
String url = uri.toString();
158-
GitHubRepositoryName repo = GitHubRepositoryName.create(url);
159-
if (repo != null) {
160-
r.add(repo);
161-
}
162-
}
163-
}
164-
}
130+
return new HashSet<GitHubRepositoryName>(GitHubRepositoryName.from(job));
165131
}
166132

167133
@Override
168134
public void start(AbstractProject<?,?> project, boolean newInstance) {
169135
super.start(project, newInstance);
170136
if (newInstance && getDescriptor().isManageHook()) {
171137
// make sure we have hooks installed. do this lazily to avoid blocking the UI thread.
172-
final Set<GitHubRepositoryName> names = getGitHubRepositories();
138+
final Collection<GitHubRepositoryName> names = GitHubRepositoryName.from(job);
173139

174140
getDescriptor().queue.execute(new Runnable() {
175141
public void run() {
@@ -205,7 +171,7 @@ public void stop() {
205171
if (getDescriptor().isManageHook()) {
206172
Cleaner cleaner = Cleaner.get();
207173
if (cleaner != null) {
208-
cleaner.onStop(this);
174+
cleaner.onStop(job);
209175
}
210176
}
211177
}

src/main/java/com/cloudbees/jenkins/GitHubRepositoryName.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
package com.cloudbees.jenkins;
22

3+
import hudson.model.AbstractProject;
4+
import hudson.model.Hudson;
5+
import hudson.plugins.git.GitSCM;
6+
import hudson.scm.SCM;
37
import hudson.util.AdaptedIterator;
48
import hudson.util.Iterators.FilterIterator;
9+
import jenkins.model.Jenkins;
10+
import org.eclipse.jgit.transport.RemoteConfig;
11+
import org.eclipse.jgit.transport.URIish;
12+
import org.jenkinsci.plugins.multiplescms.MultiSCM;
513
import org.kohsuke.github.GHCommitPointer;
614
import org.kohsuke.github.GHOrganization;
715
import org.kohsuke.github.GHPerson;
@@ -12,7 +20,11 @@
1220
import java.net.MalformedURLException;
1321
import java.net.URL;
1422
import java.util.Arrays;
23+
import java.util.Collection;
24+
import java.util.HashSet;
1525
import java.util.Iterator;
26+
import java.util.List;
27+
import java.util.Set;
1628
import java.util.logging.Level;
1729
import java.util.logging.Logger;
1830
import java.util.regex.Matcher;
@@ -172,5 +184,44 @@ public String toString() {
172184
return "GitHubRepository[host="+host+",username="+userName+",repository="+repositoryName+"]";
173185
}
174186

187+
/**
188+
* Does this project read from a repository of the given user name and the
189+
* given repository name?
190+
*
191+
* If so, return those.
192+
*/
193+
public static Collection<GitHubRepositoryName> from(AbstractProject<?, ?> job) {
194+
Set<GitHubRepositoryName> r = new HashSet<GitHubRepositoryName>();
195+
if (Jenkins.getInstance().getPlugin("multiple-scms") != null
196+
&& job.getScm() instanceof MultiSCM) {
197+
MultiSCM multiSCM = (MultiSCM) job.getScm();
198+
List<SCM> scmList = multiSCM.getConfiguredSCMs();
199+
for (SCM scm : scmList) {
200+
addRepositories(r, scm);
201+
}
202+
} else {
203+
addRepositories(r, job.getScm());
204+
}
205+
return r;
206+
}
207+
208+
/**
209+
* @since 1.1
210+
*/
211+
private static void addRepositories(Set<GitHubRepositoryName> r, SCM scm) {
212+
if (scm instanceof GitSCM) {
213+
GitSCM git = (GitSCM) scm;
214+
for (RemoteConfig rc : git.getRepositories()) {
215+
for (URIish uri : rc.getURIs()) {
216+
String url = uri.toString();
217+
GitHubRepositoryName repo = GitHubRepositoryName.create(url);
218+
if (repo != null) {
219+
r.add(repo);
220+
}
221+
}
222+
}
223+
}
224+
}
225+
175226
private static final Logger LOGGER = Logger.getLogger(GitHubRepositoryName.class.getName());
176227
}

src/main/java/com/cloudbees/jenkins/GitHubTrigger.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.cloudbees.jenkins;
22

3+
import hudson.model.AbstractProject;
4+
35
import java.util.Set;
46

57
/**
@@ -12,5 +14,9 @@ public interface GitHubTrigger {
1214
@Deprecated
1315
public void onPost();
1416
public void onPost(String triggeredByUser);
17+
/**
18+
* @deprecated
19+
* Use {@link GitHubRepositoryName#from(AbstractProject)}
20+
*/
1521
public Set<GitHubRepositoryName> getGitHubRepositories();
1622
}

src/main/java/com/cloudbees/jenkins/GitHubWebHook.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ public void processGitHubPayload(String payload, Class<? extends Trigger<?>> tri
174174
GitHubTrigger trigger = (GitHubTrigger) job.getTrigger(triggerClass);
175175
if (trigger!=null) {
176176
LOGGER.fine("Considering to poke "+job.getFullDisplayName());
177-
if (trigger.getGitHubRepositories().contains(changedRepository)) {
177+
if (GitHubRepositoryName.from(job).contains(changedRepository)) {
178178
LOGGER.info("Poked "+job.getFullDisplayName());
179179
trigger.onPost(pusherName);
180180
} else

0 commit comments

Comments
 (0)