Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into filter-drafts-trait
Browse files Browse the repository at this point in the history
  • Loading branch information
cwholmes committed Jun 5, 2021
2 parents 79aab84 + 3aaa7e0 commit 5ecec1e
Show file tree
Hide file tree
Showing 8 changed files with 150 additions and 5 deletions.
11 changes: 11 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
root = true

[*]
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false
10 changes: 5 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
</licenses>

<properties>
<revision>2.10.3</revision>
<revision>2.11.2</revision>
<changelist>-SNAPSHOT</changelist>
<gitHubRepo>jenkinsci/${project.artifactId}-plugin</gitHubRepo>
<hpi.compatibleSinceVersion>2.2.0</hpi.compatibleSinceVersion>
Expand All @@ -45,7 +45,7 @@
<dependency>
<groupId>com.coravy.hudson.plugins.github</groupId>
<artifactId>github</artifactId>
<version>1.32.0</version>
<version>1.33.1</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
Expand All @@ -70,7 +70,7 @@
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-jre8-standalone</artifactId>
<version>2.27.2</version>
<version>2.28.0</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down Expand Up @@ -119,7 +119,7 @@
<dependency>
<groupId>io.jenkins.tools.bom</groupId>
<artifactId>bom-2.277.x</artifactId>
<version>28</version>
<version>831.v9814430e6383</version>
<scope>import</scope>
<type>pom</type>
</dependency>
Expand All @@ -141,7 +141,7 @@
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.10.1</version>
<version>2.11.1</version>
<executions>
<execution>
<id>spotless-check</id>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package org.jenkinsci.plugins.github_branch_source;

import hudson.Extension;
import javax.annotation.Nonnull;
import jenkins.scm.api.trait.SCMNavigatorContext;
import jenkins.scm.api.trait.SCMNavigatorTrait;
import jenkins.scm.api.trait.SCMNavigatorTraitDescriptor;
import jenkins.scm.impl.trait.Selection;
import org.jenkinsci.Symbol;
import org.kohsuke.stapler.DataBoundConstructor;

/**
* A {@link Selection} trait that will restrict the discovery of repositories that have been forked.
*/
public class ExcludeForkedRepositoriesTrait extends SCMNavigatorTrait {

/** Constructor for stapler. */
@DataBoundConstructor
public ExcludeForkedRepositoriesTrait() {}

/** {@inheritDoc} */
@Override
protected void decorateContext(SCMNavigatorContext<?, ?> context) {
super.decorateContext(context);
GitHubSCMNavigatorContext ctx = (GitHubSCMNavigatorContext) context;
ctx.setExcludeForkedRepositories(true);
}

/** Exclude forked repositories filter */
@Symbol("gitHubExcludeForkedRepositories")
@Extension
@Selection
public static class DescriptorImpl extends SCMNavigatorTraitDescriptor {

@Override
public Class<? extends SCMNavigatorContext> getContextClass() {
return GitHubSCMNavigatorContext.class;
}

@Nonnull
@Override
public String getDisplayName() {
return Messages.ExcludeForkedRepositoriesTrait_displayName();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1009,6 +1009,16 @@ public void visitSources(SCMSourceObserver observer) throws IOException, Interru
System.currentTimeMillis(),
String.format(
"Skipping repository %s because it is public", repo.getName())));
} else if (gitHubSCMNavigatorContext.isExcludeForkedRepositories()
&& repo.getSource() != null) {
witness.record(repo.getName(), false);
listener
.getLogger()
.println(
GitHubConsoleNote.create(
System.currentTimeMillis(),
String.format(
"Skipping repository %s because it is a fork", repo.getName())));
} else if (request.process(repo.getName(), sourceFactory, null, witness)) {
listener
.getLogger()
Expand Down Expand Up @@ -1091,6 +1101,16 @@ public void visitSources(SCMSourceObserver observer) throws IOException, Interru
String.format(
"Skipping repository %s because it is public", repo.getName())));

} else if (gitHubSCMNavigatorContext.isExcludeForkedRepositories()
&& repo.getSource() != null) {
witness.record(repo.getName(), false);
listener
.getLogger()
.println(
GitHubConsoleNote.create(
System.currentTimeMillis(),
String.format(
"Skipping repository %s because it is a fork", repo.getName())));
} else if (request.process(repo.getName(), sourceFactory, null, witness)) {
listener
.getLogger()
Expand Down Expand Up @@ -1144,6 +1164,16 @@ public void visitSources(SCMSourceObserver observer) throws IOException, Interru
String.format(
"Skipping repository %s because it is missing one or more of the following topics: '%s'",
repo.getName(), gitHubSCMNavigatorContext.getTopics())));
} else if (gitHubSCMNavigatorContext.isExcludeForkedRepositories()
&& repo.getSource() != null) {
witness.record(repo.getName(), false);
listener
.getLogger()
.println(
GitHubConsoleNote.create(
System.currentTimeMillis(),
String.format(
"Skipping repository %s because it is a fork", repo.getName())));
} else if (request.process(repo.getName(), sourceFactory, null, witness)) {
listener
.getLogger()
Expand Down Expand Up @@ -1285,6 +1315,16 @@ public void visitSource(String sourceName, SCMSourceObserver observer)
String.format(
"Skipping repository %s because it is public", repo.getName())));

} else if (gitHubSCMNavigatorContext.isExcludeForkedRepositories()
&& repo.getSource() != null) {
witness.record(repo.getName(), false);
listener
.getLogger()
.println(
GitHubConsoleNote.create(
System.currentTimeMillis(),
String.format(
"Skipping repository %s because it is a fork", repo.getName())));
} else if (request.process(repo.getName(), sourceFactory, null, witness)) {
listener
.getLogger()
Expand Down Expand Up @@ -1356,6 +1396,16 @@ public void visitSource(String sourceName, SCMSourceObserver observer)
System.currentTimeMillis(),
String.format(
"Skipping repository %s because it is public", repo.getName())));
} else if (gitHubSCMNavigatorContext.isExcludeForkedRepositories()
&& repo.getSource() != null) {
witness.record(repo.getName(), false);
listener
.getLogger()
.println(
GitHubConsoleNote.create(
System.currentTimeMillis(),
String.format(
"Skipping repository %s because it is a fork", repo.getName())));

} else if (request.process(repo.getName(), sourceFactory, null, witness)) {
listener
Expand Down Expand Up @@ -1425,6 +1475,17 @@ public void visitSource(String sourceName, SCMSourceObserver observer)
String.format(
"Skipping repository %s because it is public", repo.getName())));

} else if (gitHubSCMNavigatorContext.isExcludeForkedRepositories()
&& repo.getSource() != null) {
witness.record(repo.getName(), false);
listener
.getLogger()
.println(
GitHubConsoleNote.create(
System.currentTimeMillis(),
String.format(
"Skipping repository %s because it is a fork", repo.getName())));

} else if (request.process(repo.getName(), sourceFactory, null, witness)) {
listener
.getLogger()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ public class GitHubSCMNavigatorContext
/** If true, public repositories will be ignored. */
private boolean excludePublicRepositories;

/** If true, forked repositories will be ignored. */
private boolean excludeForkedRepositories;

/** {@inheritDoc} */
@NonNull
@Override
Expand Down Expand Up @@ -96,6 +99,11 @@ public boolean isExcludePublicRepositories() {
return excludePublicRepositories;
}

/** @return True if forked repositories should be ignored, false if they should be included. */
public boolean isExcludeForkedRepositories() {
return excludeForkedRepositories;
}

/** @param excludeArchivedRepositories Set true to exclude archived repositories */
public void setExcludeArchivedRepositories(boolean excludeArchivedRepositories) {
this.excludeArchivedRepositories = excludeArchivedRepositories;
Expand All @@ -105,4 +113,9 @@ public void setExcludeArchivedRepositories(boolean excludeArchivedRepositories)
public void setExcludePublicRepositories(boolean excludePublicRepositories) {
this.excludePublicRepositories = excludePublicRepositories;
}

/** @param excludeForkedRepositories Set true to exclude archived repositories */
public void setExcludeForkedRepositories(boolean excludeForkedRepositories) {
this.excludeForkedRepositories = excludeForkedRepositories;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ TagDiscoveryTrait.authorityDisplayName=Trust origin tags
TagDiscoveryTrait.displayName=Discover tags
ExcludeArchivedRepositoriesTrait.displayName=Exclude archived repositories
ExcludePublicRepositoriesTrait.displayName=Exclude public repositories
ExcludeForkedRepositoriesTrait.displayName=Exclude repositories that are forks of another repository

GitHubSCMNavigator.general=General
GitHubSCMNavigator.withinRepository=Within repository
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,19 @@ public void fetchOneRepo_ExcludingPublic() throws Exception {
assertThat(projectNames, containsInAnyOrder("yolo-private"));
}

@Test
public void fetchOneRepo_ExcludingForked() throws Exception {
setCredentials(Collections.singletonList(credentials));
navigator = navigatorForRepoOwner("stephenc", credentials.getId());
navigator.setTraits(Collections.singletonList(new ExcludeForkedRepositoriesTrait()));
final Set<String> projectNames = new HashSet<>();
final SCMSourceObserver observer = getObserver(projectNames);

navigator.visitSources(SCMSourceObserver.filter(observer, "yolo-private"));

assertThat(projectNames, containsInAnyOrder("yolo-private"));
}

@Test
public void fetchOneRepo_BelongingToOrg() throws Exception {
final Set<String> projectNames = new HashSet<>();
Expand Down

0 comments on commit 5ecec1e

Please sign in to comment.