Skip to content

Commit

Permalink
[JENKINS-40138] Align with the SCM API contract
Browse files Browse the repository at this point in the history
  • Loading branch information
stephenc committed Dec 1, 2016
1 parent 3ea65bb commit 94a1394
Show file tree
Hide file tree
Showing 11 changed files with 194 additions and 362 deletions.
16 changes: 2 additions & 14 deletions pom.xml
Expand Up @@ -8,7 +8,7 @@
<relativePath/>
</parent>
<artifactId>github-branch-source</artifactId>
<version>1.11-SNAPSHOT</version>
<version>2.0-SNAPSHOT</version>
<packaging>hpi</packaging>
<name>GitHub Branch Source Plugin</name>
<url>https://wiki.jenkins-ci.org/display/JENKINS/GitHub+Branch+Source+Plugin</url>
Expand All @@ -35,19 +35,7 @@
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>scm-api</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>cloudbees-folder</artifactId>
<version>5.14-SNAPSHOT</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>branch-api</artifactId>
<version>1.12-SNAPSHOT</version>
<optional>true</optional>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
Expand Down
Expand Up @@ -26,17 +26,19 @@

import hudson.Extension;
import hudson.model.Descriptor;
import hudson.model.TopLevelItem;
import hudson.model.View;
import hudson.views.ViewJobFilter;
import jenkins.branch.Branch;
import jenkins.branch.SimpleViewBranchFilter;
import java.util.List;
import jenkins.scm.api.SCMHead;
import org.kohsuke.stapler.DataBoundConstructor;

/**
* A {@link ViewJobFilter} that matches {@link PullRequestSCMHead} based branches.
* A {@link ViewJobFilter} that matches {@link BranchSCMHead} based branches.
*
* @since FIXME
*/
public class GitHubBranchFilter extends SimpleViewBranchFilter {
public class GitHubBranchFilter extends ViewJobFilter {
/**
* Our constructor.
*/
Expand All @@ -48,8 +50,16 @@ public GitHubBranchFilter() {
* {@inheritDoc}
*/
@Override
public boolean isIncluded(Branch branch) {
return branch.getHead() instanceof BranchSCMHead;
public List<TopLevelItem> filter(List<TopLevelItem> added, List<TopLevelItem> all, View filteringView) {
for (TopLevelItem item:all) {
if (added.contains(item)) {
continue;
}
if (SCMHead.HeadByItem.findHead(item) instanceof BranchSCMHead) {
added.add(item);
}
}
return added;
}

/**
Expand Down
Expand Up @@ -30,62 +30,38 @@
import hudson.model.Hudson;
import java.io.IOException;
import java.io.ObjectStreamException;
import java.net.URL;
import jenkins.branch.MetadataAction;
import jenkins.branch.OrganizationFolder;
import jenkins.scm.api.metadata.AvatarMetadataAction;
import org.apache.commons.lang.StringUtils;
import org.kohsuke.github.GHUser;
import org.kohsuke.stapler.Stapler;

/**
* Invisible {@link OrganizationFolder} property that
* retains information about GitHub organization.
* Invisible {@link AvatarMetadataAction} property that retains information about GitHub organization.
*
* @author Kohsuke Kawaguchi
*/
public class GitHubOrgMetadataAction extends MetadataAction {
@NonNull
private final URL url;
@CheckForNull
private final String name;
public class GitHubOrgMetadataAction extends AvatarMetadataAction {
@CheckForNull
private final String avatar;

public GitHubOrgMetadataAction(@NonNull GHUser org) throws IOException {
this(org.getHtmlUrl(), org.getName(), org.getAvatarUrl());
this(org.getAvatarUrl());
}

public GitHubOrgMetadataAction(@NonNull URL url, @CheckForNull String name, @CheckForNull String avatar) {
this.url = url;
this.name = Util.fixEmpty(name);
public GitHubOrgMetadataAction(@CheckForNull String avatar) {
this.avatar = Util.fixEmpty(avatar);
}

public GitHubOrgMetadataAction(@NonNull GitHubOrgMetadataAction that) {
this(that.getUrl(), that.getObjectDisplayName(), that.getAvatar());
this(that.getAvatar());
}

private Object readResolve() throws ObjectStreamException {
if ((name != null && StringUtils.isBlank(name))
|| (avatar != null && StringUtils.isBlank(avatar)))
if (avatar != null && StringUtils.isBlank(avatar))
return new GitHubOrgMetadataAction(this);
return this;
}

@NonNull
public URL getUrl() {
return url;
}

/**
* {@inheritDoc}
*/
@CheckForNull
@Override
public String getObjectDisplayName() {
return Util.fixEmpty(name);
}

@CheckForNull
public String getAvatar() {
return Util.fixEmpty(avatar);
Expand All @@ -95,10 +71,10 @@ public String getAvatar() {
* {@inheritDoc}
*/
@Override
public String getFolderIconImageOf(String size) {
public String getAvatarImageOf(String size) {
if (avatar == null) {
// fall back to the generic github org icon
String image = folderIconClassNameImageOf(getFolderIconClassName(), size);
String image = avatarIconClassNameImageOf(getAvatarIconClassName(), size);
return image != null
? image
: (Stapler.getCurrentRequest().getContextPath() + Hudson.RESOURCE_PATH
Expand All @@ -115,15 +91,15 @@ public String getFolderIconImageOf(String size) {
* {@inheritDoc}
*/
@Override
public String getFolderIconClassName() {
public String getAvatarIconClassName() {
return avatar == null ? "icon-github-logo" : null;
}

/**
* {@inheritDoc}
*/
@Override
public String getFolderIconDescription() {
public String getAvatarDescription() {
return Messages.GitHubOrgMetadataAction_IconDescription();
}

Expand All @@ -141,12 +117,6 @@ public boolean equals(Object o) {

GitHubOrgMetadataAction that = (GitHubOrgMetadataAction) o;

if (!url.equals(that.url)) {
return false;
}
if (name != null ? !name.equals(that.name) : that.name != null) {
return false;
}
return avatar != null ? avatar.equals(that.avatar) : that.avatar == null;

}
Expand All @@ -156,10 +126,7 @@ public boolean equals(Object o) {
*/
@Override
public int hashCode() {
int result = url.hashCode();
result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + (avatar != null ? avatar.hashCode() : 0);
return result;
return (avatar != null ? avatar.hashCode() : 0);
}

/**
Expand All @@ -168,8 +135,6 @@ public int hashCode() {
@Override
public String toString() {
return "GitHubOrgMetadataAction{" +
"url=" + url +
", name='" + name + '\'' +
", avatar='" + avatar + '\'' +
"}";
}
Expand Down
Expand Up @@ -26,17 +26,19 @@

import hudson.Extension;
import hudson.model.Descriptor;
import hudson.model.TopLevelItem;
import hudson.model.View;
import hudson.views.ViewJobFilter;
import jenkins.branch.Branch;
import jenkins.branch.SimpleViewBranchFilter;
import java.util.List;
import jenkins.scm.api.SCMHead;
import org.kohsuke.stapler.DataBoundConstructor;

/**
* A {@link ViewJobFilter} that matches {@link PullRequestSCMHead} based branches.
*
* @since FIXME
*/
public class GitHubPullRequestFilter extends SimpleViewBranchFilter {
public class GitHubPullRequestFilter extends ViewJobFilter {
/**
* Our constructor.
*/
Expand All @@ -48,8 +50,16 @@ public GitHubPullRequestFilter() {
* {@inheritDoc}
*/
@Override
public boolean isIncluded(Branch branch) {
return branch.getHead() instanceof PullRequestSCMHead;
public List<TopLevelItem> filter(List<TopLevelItem> added, List<TopLevelItem> all, View filteringView) {
for (TopLevelItem item:all) {
if (added.contains(item)) {
continue;
}
if (SCMHead.HeadByItem.findHead(item) instanceof PullRequestSCMHead) {
added.add(item);
}
}
return added;
}

/**
Expand Down
Expand Up @@ -24,86 +24,28 @@

package org.jenkinsci.plugins.github_branch_source;

import edu.umd.cs.findbugs.annotations.CheckForNull;
import edu.umd.cs.findbugs.annotations.NonNull;
import hudson.Util;
import java.io.ObjectStreamException;
import java.net.URL;
import jenkins.branch.MetadataAction;
import jenkins.branch.MultiBranchProject;
import org.apache.commons.lang.StringUtils;
import org.kohsuke.github.GHRepository;
import jenkins.scm.api.metadata.AvatarMetadataAction;

/**
* Invisible property on {@link MultiBranchProject}
* that retains information about GitHub repository.
* Invisible property that retains information about GitHub repository.
*
* @author Kohsuke Kawaguchi
*/
public class GitHubRepoMetadataAction extends MetadataAction {
@NonNull
private final URL url;
@CheckForNull
private final String description;
@CheckForNull
private final String homepage;

public GitHubRepoMetadataAction(@NonNull GHRepository repo) {
this(repo.getHtmlUrl(), repo.getDescription(), repo.getHomepage());
}

public GitHubRepoMetadataAction(@NonNull URL url, @CheckForNull String description, @CheckForNull String homepage) {
this.url = url;
this.description = Util.fixEmpty(description);
this.homepage = Util.fixEmpty(homepage);
}

public GitHubRepoMetadataAction(GitHubRepoMetadataAction that) {
this(that.getUrl(), that.getObjectDescription(), that.getObjectUrl());
}

private Object readResolve() throws ObjectStreamException {
if ((description != null && StringUtils.isBlank(description))
|| (homepage != null && StringUtils.isBlank(homepage)))
return new GitHubRepoMetadataAction(this);
return this;
}

@NonNull
public URL getUrl() {
return url;
}

/**
* {@inheritDoc}
*/
@CheckForNull
@Override
public String getObjectDescription() {
return description;
}

/**
* {@inheritDoc}
*/
@Override
public String getObjectUrl() {
return homepage;
}
public class GitHubRepoMetadataAction extends AvatarMetadataAction {

/**
* {@inheritDoc}
*/
@Override
public String getFolderIconClassName() {
public String getAvatarIconClassName() {
return "icon-github-repo";
}

/**
* {@inheritDoc}
*/
@Override
public String getFolderIconDescription() {
public String getAvatarDescription() {
return Messages.GitHubRepoMetadataAction_IconDescription();
}

Expand All @@ -118,16 +60,7 @@ public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) {
return false;
}

GitHubRepoMetadataAction that = (GitHubRepoMetadataAction) o;

if (!url.equals(that.url)) {
return false;
}
if (description != null ? !description.equals(that.description) : that.description != null) {
return false;
}
return homepage != null ? homepage.equals(that.homepage) : that.homepage == null;
return true;

}

Expand All @@ -136,21 +69,14 @@ public boolean equals(Object o) {
*/
@Override
public int hashCode() {
int result = url.hashCode();
result = 31 * result + (description != null ? description.hashCode() : 0);
result = 31 * result + (homepage != null ? homepage.hashCode() : 0);
return result;
return 0;
}

/**
* {@inheritDoc}
*/
@Override
public String toString() {
return "GitHubRepoMetadataAction{" +
"url=" + url +
", description='" + description + '\'' +
", homepage='" + homepage + '\'' +
"}";
return "GitHubRepoMetadataAction{}";
}
}

0 comments on commit 94a1394

Please sign in to comment.