Convert the GitLab web hook data within the trigger handlers to the new CauseData

- this reduce the null checks so the API model classes can be simple POJOs again
This commit is contained in:
Robin Müller 2016-03-20 16:21:09 +01:00
parent c2a12d5e0e
commit 108ad736c4
31 changed files with 874 additions and 1081 deletions

View File

@ -4,12 +4,9 @@ import com.dabsquared.gitlabjenkins.gitlab.api.GitLabApi;
import com.dabsquared.gitlabjenkins.gitlab.api.model.Branch; import com.dabsquared.gitlabjenkins.gitlab.api.model.Branch;
import com.dabsquared.gitlabjenkins.util.LoggerUtil; import com.dabsquared.gitlabjenkins.util.LoggerUtil;
import com.dabsquared.gitlabjenkins.util.ProjectIdUtil; import com.dabsquared.gitlabjenkins.util.ProjectIdUtil;
import com.google.common.base.Optional;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import javax.ws.rs.ProcessingException;
import javax.ws.rs.WebApplicationException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
@ -71,10 +68,7 @@ public class GitLabProjectBranchesService {
List<String> result = new ArrayList<>(); List<String> result = new ArrayList<>();
String projectId = ProjectIdUtil.retrieveProjectId(sourceRepository); String projectId = ProjectIdUtil.retrieveProjectId(sourceRepository);
for (Branch branch : client.getBranches(projectId)) { for (Branch branch : client.getBranches(projectId)) {
Optional<String> name = branch.optName(); result.add(branch.getName());
if (name.isPresent()) {
result.add(name.get());
}
} }
LOGGER.log(Level.FINEST, "found these branches for repo {0} : {1}", LoggerUtil.toArray(sourceRepository, result)); LOGGER.log(Level.FINEST, "found these branches for repo {0} : {1}", LoggerUtil.toArray(sourceRepository, result));
return result; return result;

View File

@ -1,130 +0,0 @@
package com.dabsquared.gitlabjenkins.cause;
import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequestHook;
import com.dabsquared.gitlabjenkins.gitlab.api.model.ObjectAttributes;
import hudson.init.InitMilestone;
import hudson.init.Initializer;
import hudson.model.Run;
import java.io.File;
import java.io.IOException;
/**
* @author Robin Müller
*/
public class GitLabMergeCause extends GitLabWebHookCause<MergeRequestHook> {
public GitLabMergeCause(MergeRequestHook mergeRequestHook) {
this(mergeRequestHook, "");
}
public GitLabMergeCause(MergeRequestHook mergeRequestHook, String pollingLog) {
super(mergeRequestHook, pollingLog);
}
public GitLabMergeCause(MergeRequestHook mergeRequestHook, File logFile) throws IOException {
super(mergeRequestHook, logFile);
}
@Override
public String getBranch() {
return getObjectAttributes().optSourceBranch().orNull();
}
@Override
public String getSourceBranch() {
return getObjectAttributes().optSourceBranch().orNull();
}
@Override
public GitLabWebHookCause.ActionType getActionType() {
return ActionType.MERGE;
}
@Override
public String getUserName() {
return getObjectAttributes().getLastCommit().getAuthor().optName().orNull();
}
@Override
public String getUserEmail() {
return getObjectAttributes().getLastCommit().getAuthor().optEmail().orNull();
}
@Override
public String getSourceRepoHomepage() {
return getObjectAttributes().getSource().optHomepage().orNull();
}
@Override
public String getSourceRepoName() {
return getObjectAttributes().getSource().optName().orNull();
}
@Override
public String getSourceRepoUrl() {
return getObjectAttributes().getSource().optUrl().orNull();
}
@Override
public String getSourceRepoSshUrl() {
return getObjectAttributes().getSource().optSshUrl().orNull();
}
@Override
public String getSourceRepoHttpUrl() {
return getObjectAttributes().getSource().optHttpUrl().orNull();
}
@Override
public String getShortDescription() {
ObjectAttributes objectAttribute = getObjectAttributes();
return "GitLab Merge Request #" + objectAttribute.optIid().orNull() + " : " + objectAttribute.optSourceBranch().orNull() +
" => " + objectAttribute.optTargetBranch().orNull();
}
@Override
public String getMergeRequestTitle() {
return getObjectAttributes().optTitle().orNull();
}
@Override
public String getMergeRequestDescription() {
return getObjectAttributes().optDescription().orNull();
}
@Override
public String getMergeRequestId() {
return getObjectAttributes().optId().isPresent() ? getObjectAttributes().optId().toString() : null;
}
@Override
public String getTargetBranch() {
return getObjectAttributes().optTargetBranch().orNull();
}
@Override
public String getTargetRepoName() {
return getObjectAttributes().getTarget().optName().orNull();
}
@Override
public String getTargetRepoSshUrl() {
return getObjectAttributes().getTarget().optSshUrl().orNull();
}
@Override
public String getTargetRepoHttpUrl() {
return getObjectAttributes().getTarget().optHttpUrl().orNull();
}
private ObjectAttributes getObjectAttributes() {
return getRequest().getObjectAttributes();
}
@Initializer(before = InitMilestone.PLUGINS_STARTED)
public static void addAliases() {
Run.XSTREAM2.addCompatibilityAlias("com.dabsquared.gitlabjenkins.GitLabMergeCause", GitLabMergeCause.class);
}
}

View File

@ -1,103 +0,0 @@
package com.dabsquared.gitlabjenkins.cause;
import com.dabsquared.gitlabjenkins.gitlab.api.model.Commit;
import com.dabsquared.gitlabjenkins.gitlab.api.model.PushHook;
import hudson.init.InitMilestone;
import hudson.init.Initializer;
import hudson.model.Run;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* @author Robin Müller
*/
public class GitLabPushCause extends GitLabWebHookCause<PushHook> {
public GitLabPushCause(PushHook pushHook) {
this(pushHook, "");
}
public GitLabPushCause(PushHook pushHook, File logFile) throws IOException {
super(pushHook, logFile);
}
public GitLabPushCause(PushHook pushHook, String pollingLog) {
super(pushHook, pollingLog);
}
@Override
public String getBranch() {
return getRequest().optRef().or("").replaceFirst("^refs/heads/", "");
}
@Override
public String getSourceBranch() {
return getBranch();
}
@Override
public ActionType getActionType() {
return ActionType.PUSH;
}
@Override
public String getUserName() {
return getRequest().optUserName().orNull();
}
@Override
public String getUserEmail() {
return getRequest().optUserEmail().orNull();
}
@Override
public String getSourceRepoHomepage() {
return getRequest().getProject().optHomepage().orNull();
}
@Override
public String getSourceRepoName() {
return getRequest().getProject().optName().orNull();
}
@Override
public String getSourceRepoUrl() {
return getRequest().getProject().optUrl().orNull();
}
@Override
public String getSourceRepoSshUrl() {
return getRequest().getProject().optSshUrl().orNull();
}
@Override
public String getSourceRepoHttpUrl() {
return getRequest().getProject().optHttpUrl().orNull();
}
@Override
public String getShortDescription() {
String pushedBy = retrievePushedBy();
if (pushedBy == null) {
return "Started by GitLab push";
} else {
return String.format("Started by GitLab push by %s", pushedBy);
}
}
private String retrievePushedBy() {
List<Commit> commits = getRequest().getCommits();
if (commits.size() > 0) {
return commits.get(0).getAuthor().optName().orNull();
} else {
return getRequest().optUserName().orNull();
}
}
@Initializer(before = InitMilestone.PLUGINS_STARTED)
public static void addAliases() {
Run.XSTREAM2.addCompatibilityAlias("com.dabsquared.gitlabjenkins.GitLabPushCause", GitLabPushCause.class);
}
}

View File

@ -1,109 +1,27 @@
package com.dabsquared.gitlabjenkins.cause; package com.dabsquared.gitlabjenkins.cause;
import com.dabsquared.gitlabjenkins.gitlab.api.model.WebHook;
import hudson.triggers.SCMTrigger; import hudson.triggers.SCMTrigger;
import java.io.File; import static com.google.common.base.Preconditions.checkNotNull;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
public abstract class GitLabWebHookCause<T extends WebHook> extends SCMTrigger.SCMTriggerCause { public class GitLabWebHookCause extends SCMTrigger.SCMTriggerCause {
private final T request; private final CauseData data;
public GitLabWebHookCause(T request, String pollingLog) { public GitLabWebHookCause(CauseData data) {
super(pollingLog); super("");
this.request = request; this.data = checkNotNull(data, "data must not be null");
} }
public GitLabWebHookCause(T request, File logFile) throws IOException { public CauseData getData() {
super(logFile); return data;
this.request = request;
} }
public T getRequest() { @Override
return request; public String getShortDescription() {
} return data.getShortDescription();
public Map<String, String> getBuildVariables() {
HashMap<String, String> variables = new HashMap<String, String>();
putWithNullCheck(variables, "gitlabBranch", getBranch());
putWithNullCheck(variables, "gitlabSourceBranch", getSourceBranch());
putWithNullCheck(variables, "gitlabActionType", getActionType().name());
putWithNullCheck(variables, "gitlabUserName", getUserName());
putWithNullCheck(variables, "gitlabUserEmail", getUserEmail());
putWithNullCheck(variables, "gitlabSourceRepoHomepage", getSourceRepoHomepage());
putWithNullCheck(variables, "gitlabSourceRepoName", getSourceRepoName());
putWithNullCheck(variables, "gitlabSourceRepoURL", getSourceRepoUrl());
putWithNullCheck(variables, "gitlabSourceRepoSshUrl", getSourceRepoSshUrl());
putWithNullCheck(variables, "gitlabSourceRepoHttpUrl", getSourceRepoHttpUrl());
putWithNullCheck(variables, "gitlabMergeRequestTitle", getMergeRequestTitle());
putWithNullCheck(variables, "gitlabMergeRequestDescription", getMergeRequestDescription());
putWithNullCheck(variables, "gitlabMergeRequestId", getMergeRequestId());
putWithNullCheck(variables, "gitlabTargetBranch", getTargetBranch());
putWithNullCheck(variables, "gitlabTargetRepoName", getTargetRepoName());
putWithNullCheck(variables, "gitlabTargetRepoSshUrl", getTargetRepoSshUrl());
putWithNullCheck(variables, "gitlabTargetRepoHttpUrl", getTargetRepoHttpUrl());
return variables;
}
protected void putWithNullCheck(Map<String, String> variables, String name, String value) {
variables.put(name, value == null ? "" : value);
}
public abstract String getBranch();
public abstract String getSourceBranch();
public abstract ActionType getActionType();
public abstract String getUserName();
public abstract String getUserEmail();
public abstract String getSourceRepoHomepage();
public abstract String getSourceRepoName();
public abstract String getSourceRepoUrl();
public abstract String getSourceRepoSshUrl();
public abstract String getSourceRepoHttpUrl();
public String getMergeRequestTitle() {
return null;
}
public String getMergeRequestDescription() {
return null;
}
public String getMergeRequestId() {
return null;
}
public String getTargetBranch() {
return null;
}
public String getTargetRepoName() {
return null;
}
public String getTargetRepoSshUrl() {
return null;
}
public String getTargetRepoHttpUrl() {
return null;
}
public enum ActionType {
PUSH, MERGE
} }
} }

View File

@ -2,7 +2,7 @@ package com.dabsquared.gitlabjenkins.gitlab;
import com.dabsquared.gitlabjenkins.connection.GitLabConnection; import com.dabsquared.gitlabjenkins.connection.GitLabConnection;
import com.dabsquared.gitlabjenkins.gitlab.api.GitLabApi; import com.dabsquared.gitlabjenkins.gitlab.api.GitLabApi;
import com.dabsquared.gitlabjenkins.util.GsonUtil; import com.dabsquared.gitlabjenkins.util.JsonUtil;
import com.dabsquared.gitlabjenkins.util.LoggerUtil; import com.dabsquared.gitlabjenkins.util.LoggerUtil;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import com.google.common.base.Function; import com.google.common.base.Function;
@ -34,7 +34,6 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.RuntimeDelegate; import javax.ws.rs.ext.RuntimeDelegate;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.security.GeneralSecurityException; import java.security.GeneralSecurityException;
@ -141,7 +140,7 @@ public class GitLabClientBuilder {
private String getPrettyPrintResponseBody(ClientResponseContext responseContext) { private String getPrettyPrintResponseBody(ClientResponseContext responseContext) {
String responseBody = getResponseBody(responseContext); String responseBody = getResponseBody(responseContext);
if (StringUtils.isNotEmpty(responseBody) && responseContext.getMediaType().equals(MediaType.APPLICATION_JSON_TYPE)) { if (StringUtils.isNotEmpty(responseBody) && responseContext.getMediaType().equals(MediaType.APPLICATION_JSON_TYPE)) {
return GsonUtil.toPrettyPrint(responseBody); return JsonUtil.toPrettyPrint(responseBody);
} }
return responseBody; return responseBody;
} }

View File

@ -19,6 +19,7 @@ import javax.ws.rs.ext.Provider;
public class JacksonConfig implements ContextResolver<ObjectMapper> { public class JacksonConfig implements ContextResolver<ObjectMapper> {
public ObjectMapper getContext(Class<?> type) { public ObjectMapper getContext(Class<?> type) {
return new ObjectMapper() return new ObjectMapper()
.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); .configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);
} }

View File

@ -1,8 +1,5 @@
package com.dabsquared.gitlabjenkins.gitlab.api.model; package com.dabsquared.gitlabjenkins.gitlab.api.model;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Optional;
import net.karneim.pojobuilder.GeneratePojoBuilder; import net.karneim.pojobuilder.GeneratePojoBuilder;
import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;
@ -11,36 +8,35 @@ import org.apache.commons.lang.builder.ToStringBuilder;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*")
public class Branch { public class Branch {
private final String name; private String name;
private final Boolean protectedBranch; private Boolean protectedBranch;
private final Commit commit; private Commit commit;
@JsonCreator public String getName() {
@GeneratePojoBuilder(intoPackage = "*.generated.builder", withFactoryMethod = "*") return name;
public Branch(@JsonProperty("name") String name, }
@JsonProperty("protected") Boolean protectedBranch,
@JsonProperty("commit") Commit commit) { public void setName(String name) {
this.name = name; this.name = name;
}
public Boolean getProtectedBranch() {
return protectedBranch;
}
public void setProtectedBranch(Boolean protectedBranch) {
this.protectedBranch = protectedBranch; this.protectedBranch = protectedBranch;
this.commit = commit;
}
public Optional<String> optName() {
return Optional.fromNullable(name);
}
public Optional<Boolean> optProtectedBranch() {
return Optional.fromNullable(protectedBranch);
}
public Optional<Commit> optCommit() {
return Optional.fromNullable(commit);
} }
public Commit getCommit() { public Commit getCommit() {
return commit == null ? new Commit() : commit; return commit;
}
public void setCommit(Commit commit) {
this.commit = commit;
} }
@Override @Override

View File

@ -1,101 +1,90 @@
package com.dabsquared.gitlabjenkins.gitlab.api.model; package com.dabsquared.gitlabjenkins.gitlab.api.model;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Optional;
import net.karneim.pojobuilder.GeneratePojoBuilder; import net.karneim.pojobuilder.GeneratePojoBuilder;
import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringBuilder;
import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*")
public class Commit { public class Commit {
private final String id; private String id;
private final String message; private String message;
private final Date timestamp; private Date timestamp;
private final String url; private String url;
private final User author; private User author;
private final List<String> added; private List<String> added;
private final List<String> modified; private List<String> modified;
private final List<String> removed; private List<String> removed;
@JsonCreator public String getId() {
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*") return id;
public Commit(@JsonProperty("id") String id, }
@JsonProperty("message") String message,
@JsonProperty("timestamp") Date timestamp, public void setId(String id) {
@JsonProperty("url") String url,
@JsonProperty("author") User author,
@JsonProperty("added") List<String> added,
@JsonProperty("modified") List<String> modified,
@JsonProperty("removed") List<String> removed) {
this.id = id; this.id = id;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message; this.message = message;
}
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp; this.timestamp = timestamp;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url; this.url = url;
this.author = author;
this.added = added;
this.modified = modified;
this.removed = removed;
}
Commit() {
this(null, null, null, null, null, null, null, null);
}
public Optional<String> optId() {
return Optional.fromNullable(id);
}
public Optional<String> optMessage() {
return Optional.fromNullable(message);
}
public Optional<Date> optTimestamp() {
return Optional.fromNullable(timestamp);
}
public Optional<String> optUrl() {
return Optional.fromNullable(url);
}
public Optional<User> optAuthor() {
return Optional.fromNullable(author);
} }
public User getAuthor() { public User getAuthor() {
return author == null ? new User() : author; return author;
} }
public Optional<List<String>> optAdded() { public void setAuthor(User author) {
return Optional.fromNullable(added); this.author = author;
} }
public List<String> getAdded() { public List<String> getAdded() {
return added == null ? Collections.<String>emptyList() : added; return added;
} }
public Optional<List<String>> optModified() { public void setAdded(List<String> added) {
return Optional.fromNullable(modified); this.added = added;
} }
public List<String> getModified() { public List<String> getModified() {
return modified == null ? Collections.<String>emptyList() : modified; return modified;
} }
public Optional<List<String>> optRemoved() { public void setModified(List<String> modified) {
return Optional.fromNullable(removed); this.modified = modified;
} }
public List<String> getRemoved() { public List<String> getRemoved() {
return removed == null ? Collections.<String>emptyList() : removed; return removed;
}
public void setRemoved(List<String> removed) {
this.removed = removed;
} }
@Override @Override

View File

@ -1,8 +1,5 @@
package com.dabsquared.gitlabjenkins.gitlab.api.model; package com.dabsquared.gitlabjenkins.gitlab.api.model;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Optional;
import net.karneim.pojobuilder.GeneratePojoBuilder; import net.karneim.pojobuilder.GeneratePojoBuilder;
import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;
@ -13,145 +10,170 @@ import java.util.List;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*")
public class MergeRequest { public class MergeRequest {
private final Integer id; private Integer id;
private final Integer iid; private Integer iid;
private final String sourceBranch; private String sourceBranch;
private final String targetBranch; private String targetBranch;
private final Integer projectId; private Integer projectId;
private final String title; private String title;
private final State state; private State state;
private final Integer upvotes; private Integer upvotes;
private final Integer downvotes; private Integer downvotes;
private final User author; private User author;
private final User assignee; private User assignee;
private final Integer sourceProjectId; private Integer sourceProjectId;
private final Integer targetProjectId; private Integer targetProjectId;
private final List<String> labels; private List<String> labels;
private final String description; private String description;
private final Boolean workInProgress; private Boolean workInProgress;
private final Boolean mergeWhenBuildSucceeds; private Boolean mergeWhenBuildSucceeds;
private final String mergeStatus; private String mergeStatus;
@JsonCreator public Integer getId() {
@GeneratePojoBuilder(intoPackage = "*.generated.builder", withFactoryMethod = "*") return id;
public MergeRequest(@JsonProperty("id") Integer id, }
@JsonProperty("iid") Integer iid,
@JsonProperty("source_branch") String sourceBranch, public void setId(Integer id) {
@JsonProperty("target_branch") String targetBranch,
@JsonProperty("project_id") Integer projectId,
@JsonProperty("title") String title,
@JsonProperty("state") State state,
@JsonProperty("upvotes") Integer upvotes,
@JsonProperty("downvotes") Integer downvotes,
@JsonProperty("author") User author,
@JsonProperty("assignee") User assignee,
@JsonProperty("source_project_id") Integer sourceProjectId,
@JsonProperty("target_project_id") Integer targetProjectId,
@JsonProperty("labels") List<String> labels,
@JsonProperty("description") String description,
@JsonProperty("work_in_progress") Boolean workInProgress,
@JsonProperty("merge_when_build_succeeds") Boolean mergeWhenBuildSucceeds,
@JsonProperty("merge_status") String mergeStatus) {
this.id = id; this.id = id;
}
public Integer getIid() {
return iid;
}
public void setIid(Integer iid) {
this.iid = iid; this.iid = iid;
}
public String getSourceBranch() {
return sourceBranch;
}
public void setSourceBranch(String sourceBranch) {
this.sourceBranch = sourceBranch; this.sourceBranch = sourceBranch;
}
public String getTargetBranch() {
return targetBranch;
}
public void setTargetBranch(String targetBranch) {
this.targetBranch = targetBranch; this.targetBranch = targetBranch;
}
public Integer getProjectId() {
return projectId;
}
public void setProjectId(Integer projectId) {
this.projectId = projectId; this.projectId = projectId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title; this.title = title;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state; this.state = state;
}
public Integer getUpvotes() {
return upvotes;
}
public void setUpvotes(Integer upvotes) {
this.upvotes = upvotes; this.upvotes = upvotes;
}
public Integer getDownvotes() {
return downvotes;
}
public void setDownvotes(Integer downvotes) {
this.downvotes = downvotes; this.downvotes = downvotes;
this.author = author;
this.assignee = assignee;
this.sourceProjectId = sourceProjectId;
this.targetProjectId = targetProjectId;
this.labels = labels;
this.description = description;
this.workInProgress = workInProgress;
this.mergeWhenBuildSucceeds = mergeWhenBuildSucceeds;
this.mergeStatus = mergeStatus;
}
public Optional<Integer> optId() {
return Optional.fromNullable(id);
}
public Optional<Integer> optIid() {
return Optional.fromNullable(iid);
}
public Optional<String> optSourceBranch() {
return Optional.fromNullable(sourceBranch);
}
public Optional<String> optTargetBranch() {
return Optional.fromNullable(targetBranch);
}
public Optional<Integer> optProjectId() {
return Optional.fromNullable(projectId);
}
public Optional<String> optTitle() {
return Optional.fromNullable(title);
}
public Optional<State> optState() {
return Optional.fromNullable(state);
}
public Optional<Integer> optUpvotes() {
return Optional.fromNullable(upvotes);
}
public Optional<Integer> optDownvotes() {
return Optional.fromNullable(downvotes);
}
public Optional<User> optAuthor() {
return Optional.fromNullable(author);
} }
public User getAuthor() { public User getAuthor() {
return author == null ? new User() : author; return author;
} }
public Optional<User> optAssignee() { public void setAuthor(User author) {
return Optional.fromNullable(assignee); this.author = author;
} }
public User getAssignee() { public User getAssignee() {
return assignee == null ? new User() : assignee; return assignee;
} }
public Optional<Integer> optSourceProjectId() { public void setAssignee(User assignee) {
return Optional.fromNullable(sourceProjectId); this.assignee = assignee;
} }
public Optional<Integer> optTargetProjectId() { public Integer getSourceProjectId() {
return Optional.fromNullable(targetProjectId); return sourceProjectId;
} }
public Optional<List<String>> optLabels() { public void setSourceProjectId(Integer sourceProjectId) {
return Optional.fromNullable(labels); this.sourceProjectId = sourceProjectId;
} }
public Optional<String> optDescription() { public Integer getTargetProjectId() {
return Optional.fromNullable(description); return targetProjectId;
} }
public Optional<Boolean> optWorkInProgress() { public void setTargetProjectId(Integer targetProjectId) {
return Optional.fromNullable(workInProgress); this.targetProjectId = targetProjectId;
} }
public Optional<Boolean> optMergeWhenBuildSucceeds() { public List<String> getLabels() {
return Optional.fromNullable(mergeWhenBuildSucceeds); return labels;
} }
public Optional<String> optMergeStatus() { public void setLabels(List<String> labels) {
return Optional.fromNullable(mergeStatus); this.labels = labels;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Boolean getWorkInProgress() {
return workInProgress;
}
public void setWorkInProgress(Boolean workInProgress) {
this.workInProgress = workInProgress;
}
public Boolean getMergeWhenBuildSucceeds() {
return mergeWhenBuildSucceeds;
}
public void setMergeWhenBuildSucceeds(Boolean mergeWhenBuildSucceeds) {
this.mergeWhenBuildSucceeds = mergeWhenBuildSucceeds;
}
public String getMergeStatus() {
return mergeStatus;
}
public void setMergeStatus(String mergeStatus) {
this.mergeStatus = mergeStatus;
} }
@Override @Override

View File

@ -1,7 +1,6 @@
package com.dabsquared.gitlabjenkins.gitlab.api.model; package com.dabsquared.gitlabjenkins.gitlab.api.model;
import com.google.common.base.Optional;
import net.karneim.pojobuilder.GeneratePojoBuilder; import net.karneim.pojobuilder.GeneratePojoBuilder;
import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;
@ -10,56 +9,35 @@ import org.apache.commons.lang.builder.ToStringBuilder;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*")
public class MergeRequestHook extends WebHook { public class MergeRequestHook extends WebHook {
private final User user; private User user;
private final Project project; private Project project;
private final ObjectAttributes objectAttributes; private ObjectAttributes objectAttributes;
private final Repository repository;
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*")
public MergeRequestHook(String objectKind, User user, Project project, ObjectAttributes objectAttributes, Repository repository) {
super(objectKind);
this.user = user;
this.project = project;
this.objectAttributes = objectAttributes;
this.repository = repository;
}
MergeRequestHook() {
this(null, null, null, null, null);
}
public Optional<User> optUser() {
return Optional.fromNullable(user);
}
public User getUser() { public User getUser() {
return user == null ? new User() : user; return user;
} }
public Optional<Project> optProject() { public void setUser(User user) {
return Optional.fromNullable(project); this.user = user;
} }
public Project getProject() { public Project getProject() {
return project == null ? new Project() : project; return project;
} }
public Optional<ObjectAttributes> optObjectAttributes() { public void setProject(Project project) {
return Optional.fromNullable(objectAttributes); this.project = project;
} }
public ObjectAttributes getObjectAttributes() { public ObjectAttributes getObjectAttributes() {
return objectAttributes == null ? new ObjectAttributes() : objectAttributes; return objectAttributes;
} }
public Optional<Repository> optRepository() { public void setObjectAttributes(ObjectAttributes objectAttributes) {
return Optional.fromNullable(repository); this.objectAttributes = objectAttributes;
}
public Repository getRepository() {
return repository == null ? new Repository() : repository;
} }
@Override @Override
@ -75,7 +53,6 @@ public class MergeRequestHook extends WebHook {
.append(user, that.user) .append(user, that.user)
.append(project, that.project) .append(project, that.project)
.append(objectAttributes, that.objectAttributes) .append(objectAttributes, that.objectAttributes)
.append(repository, that.repository)
.isEquals(); .isEquals();
} }
@ -85,7 +62,6 @@ public class MergeRequestHook extends WebHook {
.append(user) .append(user)
.append(project) .append(project)
.append(objectAttributes) .append(objectAttributes)
.append(repository)
.toHashCode(); .toHashCode();
} }
@ -95,7 +71,6 @@ public class MergeRequestHook extends WebHook {
.append("user", user) .append("user", user)
.append("project", project) .append("project", project)
.append("objectAttributes", objectAttributes) .append("objectAttributes", objectAttributes)
.append("repository", repository)
.toString(); .toString();
} }
} }

View File

@ -1,6 +1,5 @@
package com.dabsquared.gitlabjenkins.gitlab.api.model; package com.dabsquared.gitlabjenkins.gitlab.api.model;
import com.google.common.base.Optional;
import net.karneim.pojobuilder.GeneratePojoBuilder; import net.karneim.pojobuilder.GeneratePojoBuilder;
import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;
@ -11,149 +10,188 @@ import java.util.Date;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*")
public class ObjectAttributes { public class ObjectAttributes {
private final Integer id; private Integer id;
private final Integer iid; private Integer iid;
private final String sourceBranch; private String sourceBranch;
private final String targetBranch; private String targetBranch;
private final Integer sourceProjectId; private Integer sourceProjectId;
private final Integer targetProjectId; private Integer targetProjectId;
private final Integer authorId; private Integer authorId;
private final Integer assigneeId; private Integer assigneeId;
private final String title; private String title;
private final Date createdAt; private Date createdAt;
private final Date updatedAt; private Date updatedAt;
private final State state; private State state;
private final String description; private String description;
private final Project source; private Project source;
private final Project target; private Project target;
private final Commit lastCommit; private Commit lastCommit;
private final String mergeStatus; private String mergeStatus;
private final String url; private String url;
private final Action action; private Action action;
private final Boolean workInProgress; private Boolean workInProgress;
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*") public Integer getId() {
public ObjectAttributes(Integer id, Integer iid, String sourceBranch, String targetBranch, Integer sourceProjectId, Integer targetProjectId, return id;
Integer authorId, Integer assigneeId, String title, Date createdAt, Date updatedAt, State state, String description, }
Project source, Project target, Commit lastCommit, String mergeStatus, String url, Action action, Boolean workInProgress) {
public void setId(Integer id) {
this.id = id; this.id = id;
}
public Integer getIid() {
return iid;
}
public void setIid(Integer iid) {
this.iid = iid; this.iid = iid;
}
public String getSourceBranch() {
return sourceBranch;
}
public void setSourceBranch(String sourceBranch) {
this.sourceBranch = sourceBranch; this.sourceBranch = sourceBranch;
}
public String getTargetBranch() {
return targetBranch;
}
public void setTargetBranch(String targetBranch) {
this.targetBranch = targetBranch; this.targetBranch = targetBranch;
}
public Integer getSourceProjectId() {
return sourceProjectId;
}
public void setSourceProjectId(Integer sourceProjectId) {
this.sourceProjectId = sourceProjectId; this.sourceProjectId = sourceProjectId;
}
public Integer getTargetProjectId() {
return targetProjectId;
}
public void setTargetProjectId(Integer targetProjectId) {
this.targetProjectId = targetProjectId; this.targetProjectId = targetProjectId;
}
public Integer getAuthorId() {
return authorId;
}
public void setAuthorId(Integer authorId) {
this.authorId = authorId; this.authorId = authorId;
}
public Integer getAssigneeId() {
return assigneeId;
}
public void setAssigneeId(Integer assigneeId) {
this.assigneeId = assigneeId; this.assigneeId = assigneeId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title; this.title = title;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt; this.createdAt = createdAt;
}
public Date getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Date updatedAt) {
this.updatedAt = updatedAt; this.updatedAt = updatedAt;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state; this.state = state;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description; this.description = description;
this.source = source;
this.target = target;
this.lastCommit = lastCommit;
this.mergeStatus = mergeStatus;
this.url = url;
this.action = action;
this.workInProgress = workInProgress;
}
ObjectAttributes() {
this(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
}
public Optional<Integer> optId() {
return Optional.fromNullable(id);
}
public Optional<Integer> optIid() {
return Optional.fromNullable(iid);
}
public Optional<String> optSourceBranch() {
return Optional.fromNullable(sourceBranch);
}
public Optional<String> optTargetBranch() {
return Optional.fromNullable(targetBranch);
}
public Optional<Integer> optSourceProjectId() {
return Optional.fromNullable(sourceProjectId);
}
public Optional<Integer> optTargetProjectId() {
return Optional.fromNullable(targetProjectId);
}
public Optional<Integer> optAuthorId() {
return Optional.fromNullable(authorId);
}
public Optional<Integer> optAssigneeId() {
return Optional.fromNullable(assigneeId);
}
public Optional<String> optTitle() {
return Optional.fromNullable(title);
}
public Optional<Date> optCreatedAt() {
return Optional.fromNullable(createdAt);
}
public Optional<Date> optUpdatedAt() {
return Optional.fromNullable(updatedAt);
}
public Optional<State> optState() {
return Optional.fromNullable(state);
}
public Optional<String> optDescription() {
return Optional.fromNullable(description);
}
public Optional<Project> optSource() {
return Optional.fromNullable(source);
} }
public Project getSource() { public Project getSource() {
return source == null ? new Project() : source; return source;
} }
public Optional<Project> optTarget() { public void setSource(Project source) {
return Optional.fromNullable(target); this.source = source;
} }
public Project getTarget() { public Project getTarget() {
return target == null ? new Project() : target; return target;
} }
public Optional<Commit> optLastCommit() { public void setTarget(Project target) {
return Optional.fromNullable(lastCommit); this.target = target;
} }
public Commit getLastCommit() { public Commit getLastCommit() {
return lastCommit == null ? new Commit() : lastCommit; return lastCommit;
} }
public Optional<String> optMergeStatus() { public void setLastCommit(Commit lastCommit) {
return Optional.fromNullable(mergeStatus); this.lastCommit = lastCommit;
} }
public Optional<String> optUrl() { public String getMergeStatus() {
return Optional.fromNullable(url); return mergeStatus;
} }
public Optional<Action> optAction() { public void setMergeStatus(String mergeStatus) {
return Optional.fromNullable(action); this.mergeStatus = mergeStatus;
} }
public Optional<Boolean> optWorkInProgress() { public String getUrl() {
return Optional.fromNullable(workInProgress); return url;
}
public void setUrl(String url) {
this.url = url;
}
public Action getAction() {
return action;
}
public void setAction(Action action) {
this.action = action;
}
public Boolean getWorkInProgress() {
return workInProgress;
}
public void setWorkInProgress(Boolean workInProgress) {
this.workInProgress = workInProgress;
} }
@Override @Override

View File

@ -1,6 +1,5 @@
package com.dabsquared.gitlabjenkins.gitlab.api.model; package com.dabsquared.gitlabjenkins.gitlab.api.model;
import com.google.common.base.Optional;
import net.karneim.pojobuilder.GeneratePojoBuilder; import net.karneim.pojobuilder.GeneratePojoBuilder;
import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;
@ -9,90 +8,118 @@ import org.apache.commons.lang.builder.ToStringBuilder;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*")
public class Project { public class Project {
private final String name; private String name;
private final String description; private String description;
private final String webUrl; private String webUrl;
private final String avatarUrl; private String avatarUrl;
private final String namespace; private String namespace;
private final Integer visibilityLevel; private Integer visibilityLevel;
private final String pathWithNamespace; private String pathWithNamespace;
private final String defaultBranch; private String defaultBranch;
private final String homepage; private String homepage;
private final String url; private String url;
private final String sshUrl; private String sshUrl;
private final String httpUrl; private String httpUrl;
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*") public String getName() {
public Project(String name, String description, String webUrl, String avatarUrl, String namespace, Integer visibilityLevel, return name;
String pathWithNamespace, String defaultBranch, String homepage, String url, String sshUrl, String httpUrl) { }
public void setName(String name) {
this.name = name; this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description; this.description = description;
}
public String getWebUrl() {
return webUrl;
}
public void setWebUrl(String webUrl) {
this.webUrl = webUrl; this.webUrl = webUrl;
}
public String getAvatarUrl() {
return avatarUrl;
}
public void setAvatarUrl(String avatarUrl) {
this.avatarUrl = avatarUrl; this.avatarUrl = avatarUrl;
}
public String getNamespace() {
return namespace;
}
public void setNamespace(String namespace) {
this.namespace = namespace; this.namespace = namespace;
}
public Integer getVisibilityLevel() {
return visibilityLevel;
}
public void setVisibilityLevel(Integer visibilityLevel) {
this.visibilityLevel = visibilityLevel; this.visibilityLevel = visibilityLevel;
}
public String getPathWithNamespace() {
return pathWithNamespace;
}
public void setPathWithNamespace(String pathWithNamespace) {
this.pathWithNamespace = pathWithNamespace; this.pathWithNamespace = pathWithNamespace;
}
public String getDefaultBranch() {
return defaultBranch;
}
public void setDefaultBranch(String defaultBranch) {
this.defaultBranch = defaultBranch; this.defaultBranch = defaultBranch;
}
public String getHomepage() {
return homepage;
}
public void setHomepage(String homepage) {
this.homepage = homepage; this.homepage = homepage;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url; this.url = url;
}
public String getSshUrl() {
return sshUrl;
}
public void setSshUrl(String sshUrl) {
this.sshUrl = sshUrl; this.sshUrl = sshUrl;
}
public String getHttpUrl() {
return httpUrl;
}
public void setHttpUrl(String httpUrl) {
this.httpUrl = httpUrl; this.httpUrl = httpUrl;
} }
Project() {
this(null, null, null, null, null, null, null, null, null, null, null, null);
}
public Optional<String> optName() {
return Optional.fromNullable(name);
}
public Optional<String> optDescription() {
return Optional.fromNullable(description);
}
public Optional<String> optWebUrl() {
return Optional.fromNullable(webUrl);
}
public Optional<String> optAvatarUrl() {
return Optional.fromNullable(avatarUrl);
}
public Optional<String> optNamespace() {
return Optional.fromNullable(namespace);
}
public Optional<Integer> optVisibilityLevel() {
return Optional.fromNullable(visibilityLevel);
}
public Optional<String> optPathWithNamespace() {
return Optional.fromNullable(pathWithNamespace);
}
public Optional<String> optDefaultBranch() {
return Optional.fromNullable(defaultBranch);
}
public Optional<String> optHomepage() {
return Optional.fromNullable(homepage);
}
public Optional<String> optUrl() {
return Optional.fromNullable(url);
}
public Optional<String> optSshUrl() {
return Optional.fromNullable(sshUrl);
}
public Optional<String> optHttpUrl() {
return Optional.fromNullable(httpUrl);
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) { if (this == o) {

View File

@ -1,112 +1,116 @@
package com.dabsquared.gitlabjenkins.gitlab.api.model; package com.dabsquared.gitlabjenkins.gitlab.api.model;
import com.google.common.base.Optional;
import net.karneim.pojobuilder.GeneratePojoBuilder; import net.karneim.pojobuilder.GeneratePojoBuilder;
import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringBuilder;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*")
public class PushHook extends WebHook { public class PushHook extends WebHook {
private final String before; private String before;
private final String after; private String after;
private final String ref; private String ref;
private final Integer userId; private Integer userId;
private final String userName; private String userName;
private final String userEmail; private String userEmail;
private final String userAvatar; private String userAvatar;
private final Integer projectId; private Integer projectId;
private final Project project; private Project project;
private final Repository repository; private List<Commit> commits;
private final List<Commit> commits; private Integer totalCommitsCount;
private final Integer totalCommitsCount;
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*") public String getBefore() {
public PushHook(String objectKind, String before, String after, String ref, Integer userId, String userName, String userEmail, String userAvatar, return before;
Integer projectId, Project project, Repository repository, List<Commit> commits, Integer totalCommitsCount) { }
super(objectKind);
public void setBefore(String before) {
this.before = before; this.before = before;
}
public String getAfter() {
return after;
}
public void setAfter(String after) {
this.after = after; this.after = after;
}
public String getRef() {
return ref;
}
public void setRef(String ref) {
this.ref = ref; this.ref = ref;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId; this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName; this.userName = userName;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail; this.userEmail = userEmail;
}
public String getUserAvatar() {
return userAvatar;
}
public void setUserAvatar(String userAvatar) {
this.userAvatar = userAvatar; this.userAvatar = userAvatar;
}
public Integer getProjectId() {
return projectId;
}
public void setProjectId(Integer projectId) {
this.projectId = projectId; this.projectId = projectId;
this.project = project;
this.repository = repository;
this.commits = commits;
this.totalCommitsCount = totalCommitsCount;
}
PushHook() {
this(null, null, null, null, null, null, null, null, null, null, null, null, null);
}
public Optional<Project> optProject() {
return Optional.fromNullable(project);
}
public Optional<Integer> optProjectId() {
return Optional.fromNullable(projectId);
}
public Optional<String> optUserAvatar() {
return Optional.fromNullable(userAvatar);
}
public Optional<String> optUserEmail() {
return Optional.fromNullable(userEmail);
}
public Optional<String> optUserName() {
return Optional.fromNullable(userName);
}
public Optional<Integer> optUserId() {
return Optional.fromNullable(userId);
}
public Optional<String> optRef() {
return Optional.fromNullable(ref);
}
public Optional<String> optAfter() {
return Optional.fromNullable(after);
}
public Optional<String> optBefore() {
return Optional.fromNullable(before);
} }
public Project getProject() { public Project getProject() {
return project == null ? new Project() : project; return project;
} }
public Optional<Repository> optRepository() { public void setProject(Project project) {
return Optional.fromNullable(repository); this.project = project;
}
public Repository getRepository() {
return repository == null ? new Repository() : repository;
}
public Optional<List<Commit>> optCommits() {
return Optional.fromNullable(commits);
} }
public List<Commit> getCommits() { public List<Commit> getCommits() {
return commits == null ? Collections.<Commit>emptyList() : commits; return commits;
} }
public Optional<Integer> optTotalCommitsCount() { public void setCommits(List<Commit> commits) {
return Optional.fromNullable(totalCommitsCount); this.commits = commits;
}
public Integer getTotalCommitsCount() {
return totalCommitsCount;
}
public void setTotalCommitsCount(Integer totalCommitsCount) {
this.totalCommitsCount = totalCommitsCount;
} }
@Override @Override
@ -128,7 +132,6 @@ public class PushHook extends WebHook {
.append(userAvatar, pushHook.userAvatar) .append(userAvatar, pushHook.userAvatar)
.append(projectId, pushHook.projectId) .append(projectId, pushHook.projectId)
.append(project, pushHook.project) .append(project, pushHook.project)
.append(repository, pushHook.repository)
.append(commits, pushHook.commits) .append(commits, pushHook.commits)
.append(totalCommitsCount, pushHook.totalCommitsCount) .append(totalCommitsCount, pushHook.totalCommitsCount)
.isEquals(); .isEquals();
@ -146,7 +149,6 @@ public class PushHook extends WebHook {
.append(userAvatar) .append(userAvatar)
.append(projectId) .append(projectId)
.append(project) .append(project)
.append(repository)
.append(commits) .append(commits)
.append(totalCommitsCount) .append(totalCommitsCount)
.toHashCode(); .toHashCode();
@ -164,7 +166,6 @@ public class PushHook extends WebHook {
.append("userAvatar", userAvatar) .append("userAvatar", userAvatar)
.append("projectId", projectId) .append("projectId", projectId)
.append("project", project) .append("project", project)
.append("repository", repository)
.append("commits", commits) .append("commits", commits)
.append("totalCommitsCount", totalCommitsCount) .append("totalCommitsCount", totalCommitsCount)
.toString(); .toString();

View File

@ -1,7 +1,5 @@
package com.dabsquared.gitlabjenkins.gitlab.api.model; package com.dabsquared.gitlabjenkins.gitlab.api.model;
import com.google.common.base.Optional;
import com.google.common.base.Supplier;
import net.karneim.pojobuilder.GeneratePojoBuilder; import net.karneim.pojobuilder.GeneratePojoBuilder;
import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;
@ -10,68 +8,73 @@ import org.apache.commons.lang.builder.ToStringBuilder;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*")
public class Repository { public class Repository {
private final String name; private String name;
private final String description; private String description;
private final String url; private String url;
private final String homepage; private String homepage;
private final String gitSshUrl; private String gitSshUrl;
private final String gitHttpUrl; private String gitHttpUrl;
private final Integer visibilityLevel; private Integer visibilityLevel;
public static Supplier<Repository> nullRepository() { public String getName() {
return new Supplier<Repository>() { return name;
@Override
public Repository get() {
return new Repository();
}
};
} }
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*") public void setName(String name) {
public Repository(String name, String description, String url, String homepage, String gitSshUrl, String gitHttpUrl, Integer visibilityLevel) {
this.name = name; this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description; this.description = description;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url; this.url = url;
}
public String getHomepage() {
return homepage;
}
public void setHomepage(String homepage) {
this.homepage = homepage; this.homepage = homepage;
}
public String getGitSshUrl() {
return gitSshUrl;
}
public void setGitSshUrl(String gitSshUrl) {
this.gitSshUrl = gitSshUrl; this.gitSshUrl = gitSshUrl;
}
public String getGitHttpUrl() {
return gitHttpUrl;
}
public void setGitHttpUrl(String gitHttpUrl) {
this.gitHttpUrl = gitHttpUrl; this.gitHttpUrl = gitHttpUrl;
}
public Integer getVisibilityLevel() {
return visibilityLevel;
}
public void setVisibilityLevel(Integer visibilityLevel) {
this.visibilityLevel = visibilityLevel; this.visibilityLevel = visibilityLevel;
} }
Repository() {
this(null, null, null, null, null, null, null);
}
public Optional<String> optName() {
return Optional.fromNullable(name);
}
public Optional<String> optDescription() {
return Optional.fromNullable(description);
}
public Optional<String> optUrl() {
return Optional.fromNullable(url);
}
public Optional<String> optHomepage() {
return Optional.fromNullable(homepage);
}
public Optional<String> optGitSshUrl() {
return Optional.fromNullable(gitSshUrl);
}
public Optional<String> optGitHttpUrl() {
return Optional.fromNullable(gitHttpUrl);
}
public Optional<Integer> optVisibilityLevel() {
return Optional.fromNullable(visibilityLevel);
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) { if (this == o) {

View File

@ -1,9 +1,5 @@
package com.dabsquared.gitlabjenkins.gitlab.api.model; package com.dabsquared.gitlabjenkins.gitlab.api.model;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Optional;
import com.google.common.base.Supplier;
import net.karneim.pojobuilder.GeneratePojoBuilder; import net.karneim.pojobuilder.GeneratePojoBuilder;
import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;
@ -12,61 +8,55 @@ import org.apache.commons.lang.builder.ToStringBuilder;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*")
public class User { public class User {
private final Integer id; private Integer id;
private final String name; private String name;
private final String username; private String username;
private final String email; private String email;
private final String avatarUrl; private String avatarUrl;
public static Supplier<User> nullUser() { public Integer getId() {
return new Supplier<User>() { return id;
@Override
public User get() {
return new User();
}
};
} }
@JsonCreator public void setId(Integer id) {
@GeneratePojoBuilder(intoPackage = "*.builder.generated", withFactoryMethod = "*")
public User(@JsonProperty("id") Integer id,
@JsonProperty("name") String name,
@JsonProperty("username") String username,
@JsonProperty("email") String email,
@JsonProperty("avatar_url") String avatarUrl) {
this.id = id; this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name; this.name = name;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username; this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email; this.email = email;
}
public String getAvatarUrl() {
return avatarUrl;
}
public void setAvatarUrl(String avatarUrl) {
this.avatarUrl = avatarUrl; this.avatarUrl = avatarUrl;
} }
User() {
this(null, null, null, null, null);
}
public Optional<Integer> optId() {
return Optional.fromNullable(id);
}
public Optional<String> optName() {
return Optional.fromNullable(name);
}
public Optional<String> optUsername() {
return Optional.fromNullable(username);
}
public Optional<String> optEmail() {
return Optional.fromNullable(email);
}
public Optional<String> optAvatarUrl() {
return Optional.fromNullable(avatarUrl);
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) { if (this == o) {

View File

@ -1,6 +1,5 @@
package com.dabsquared.gitlabjenkins.gitlab.api.model; package com.dabsquared.gitlabjenkins.gitlab.api.model;
import com.google.common.base.Optional;
import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringBuilder;
@ -10,14 +9,23 @@ import org.apache.commons.lang.builder.ToStringBuilder;
*/ */
public abstract class WebHook { public abstract class WebHook {
private final String objectKind; private Repository repository;
private String objectKind;
protected WebHook(String objectKind) { public String getObjectKind() {
return objectKind;
}
public void setObjectKind(String objectKind) {
this.objectKind = objectKind; this.objectKind = objectKind;
} }
public Optional<String> optObjectKind() { public Repository getRepository() {
return Optional.fromNullable(objectKind); return repository;
}
public void setRepository(Repository repository) {
this.repository = repository;
} }
@Override @Override
@ -30,6 +38,7 @@ public abstract class WebHook {
} }
WebHook webHook = (WebHook) o; WebHook webHook = (WebHook) o;
return new EqualsBuilder() return new EqualsBuilder()
.append(repository, webHook.repository)
.append(objectKind, webHook.objectKind) .append(objectKind, webHook.objectKind)
.isEquals(); .isEquals();
} }
@ -37,6 +46,7 @@ public abstract class WebHook {
@Override @Override
public int hashCode() { public int hashCode() {
return new HashCodeBuilder(17, 37) return new HashCodeBuilder(17, 37)
.append(repository)
.append(objectKind) .append(objectKind)
.toHashCode(); .toHashCode();
} }
@ -44,6 +54,7 @@ public abstract class WebHook {
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this) return new ToStringBuilder(this)
.append("repository", repository)
.append("objectKind", objectKind) .append("objectKind", objectKind)
.toString(); .toString();
} }

View File

@ -24,9 +24,9 @@ public class GitLabEnvironmentRunListener extends RunListener<AbstractBuild<?, ?
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void buildEnvVars(Map<String, String> env) { public void buildEnvVars(Map<String, String> env) {
GitLabWebHookCause<WebHook> cause = (GitLabWebHookCause<WebHook>) build.getCause(GitLabWebHookCause.class); GitLabWebHookCause cause = (GitLabWebHookCause) build.getCause(GitLabWebHookCause.class);
if (cause != null) { if (cause != null) {
env.putAll(cause.getBuildVariables()); env.putAll(cause.getData().getBuildVariables());
} }
} }
}; };

View File

@ -1,10 +1,10 @@
package com.dabsquared.gitlabjenkins.listener; package com.dabsquared.gitlabjenkins.listener;
import com.dabsquared.gitlabjenkins.GitLabPushTrigger; import com.dabsquared.gitlabjenkins.GitLabPushTrigger;
import com.dabsquared.gitlabjenkins.cause.GitLabMergeCause; import com.dabsquared.gitlabjenkins.cause.CauseData;
import com.dabsquared.gitlabjenkins.cause.GitLabWebHookCause;
import com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty; import com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty;
import com.dabsquared.gitlabjenkins.gitlab.api.GitLabApi; import com.dabsquared.gitlabjenkins.gitlab.api.GitLabApi;
import com.dabsquared.gitlabjenkins.gitlab.api.model.ObjectAttributes;
import hudson.Extension; import hudson.Extension;
import hudson.model.AbstractBuild; import hudson.model.AbstractBuild;
import hudson.model.Result; import hudson.model.Result;
@ -25,14 +25,13 @@ public class GitLabMergeRequestRunListener extends RunListener<AbstractBuild<?,
@Override @Override
public void onCompleted(AbstractBuild<?, ?> build, @Nonnull TaskListener listener) { public void onCompleted(AbstractBuild<?, ?> build, @Nonnull TaskListener listener) {
GitLabPushTrigger trigger = build.getProject().getTrigger(GitLabPushTrigger.class); GitLabPushTrigger trigger = build.getProject().getTrigger(GitLabPushTrigger.class);
GitLabMergeCause gitLabMergeCause = build.getCause(GitLabMergeCause.class); GitLabWebHookCause cause = build.getCause(GitLabWebHookCause.class);
if (trigger != null && gitLabMergeCause != null) { if (trigger != null && cause != null && cause.getData().getActionType() == CauseData.ActionType.MERGE) {
String buildUrl = getBuildUrl(build); String buildUrl = getBuildUrl(build);
Result buildResult = build.getResult(); Result buildResult = build.getResult();
ObjectAttributes objectAttributes = gitLabMergeCause.getRequest().getObjectAttributes(); Integer projectId = cause.getData().getProjectId();
Integer projectId = objectAttributes.optSourceProjectId().orNull(); Integer mergeRequestId = cause.getData().getMergeRequestId();
Integer mergeRequestId = objectAttributes.optId().orNull();
if (buildResult == Result.SUCCESS) { if (buildResult == Result.SUCCESS) {
acceptMergeRequestIfNecessary(build, trigger, listener, projectId.toString(), mergeRequestId); acceptMergeRequestIfNecessary(build, trigger, listener, projectId.toString(), mergeRequestId);
} }

View File

@ -96,7 +96,7 @@ public class GitLabCommitStatusPublisher extends Notifier {
private String getBuildBranch(AbstractBuild<?, ?> build) { private String getBuildBranch(AbstractBuild<?, ?> build) {
GitLabWebHookCause cause = build.getCause(GitLabWebHookCause.class); GitLabWebHookCause cause = build.getCause(GitLabWebHookCause.class);
return cause == null ? null : cause.getSourceBranch(); return cause == null ? null : cause.getData().getSourceBranch();
} }
private String getBuildUrl(AbstractBuild<?, ?> build) { private String getBuildUrl(AbstractBuild<?, ?> build) {

View File

@ -1,5 +1,7 @@
package com.dabsquared.gitlabjenkins.trigger.handler; package com.dabsquared.gitlabjenkins.trigger.handler;
import com.dabsquared.gitlabjenkins.cause.CauseData;
import com.dabsquared.gitlabjenkins.cause.GitLabWebHookCause;
import com.dabsquared.gitlabjenkins.gitlab.api.model.WebHook; import com.dabsquared.gitlabjenkins.gitlab.api.model.WebHook;
import com.dabsquared.gitlabjenkins.trigger.exception.NoRevisionToBuildException; import com.dabsquared.gitlabjenkins.trigger.exception.NoRevisionToBuildException;
import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter;
@ -9,7 +11,9 @@ import hudson.model.CauseAction;
import hudson.model.Job; import hudson.model.Job;
import hudson.plugins.git.RevisionParameterAction; import hudson.plugins.git.RevisionParameterAction;
import jenkins.model.ParameterizedJobMixIn; import jenkins.model.ParameterizedJobMixIn;
import org.eclipse.jgit.transport.URIish;
import java.net.URISyntaxException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -38,9 +42,9 @@ public abstract class AbstractWebHookTriggerHandler<H extends WebHook> implement
protected abstract boolean isCiSkip(H hook); protected abstract boolean isCiSkip(H hook);
protected Action[] createActions(Job<?, ?> job, H hook) { private Action[] createActions(Job<?, ?> job, H hook) {
ArrayList<Action> actions = new ArrayList<Action>(); ArrayList<Action> actions = new ArrayList<>();
actions.add(createCauseAction(job, hook)); actions.add(new CauseAction(new GitLabWebHookCause(retrieveCauseData(hook))));
try { try {
actions.add(createRevisionParameter(hook)); actions.add(createRevisionParameter(hook));
} catch (NoRevisionToBuildException e) { } catch (NoRevisionToBuildException e) {
@ -50,12 +54,23 @@ public abstract class AbstractWebHookTriggerHandler<H extends WebHook> implement
return actions.toArray(new Action[actions.size()]); return actions.toArray(new Action[actions.size()]);
} }
protected abstract CauseAction createCauseAction(Job<?, ?> job, H hook); protected abstract CauseData retrieveCauseData(H hook);
protected abstract String getTargetBranch(H hook); protected abstract String getTargetBranch(H hook);
protected abstract RevisionParameterAction createRevisionParameter(H hook) throws NoRevisionToBuildException; protected abstract RevisionParameterAction createRevisionParameter(H hook) throws NoRevisionToBuildException;
protected URIish retrieveUrIish(WebHook hook) {
try {
if (hook.getRepository() != null) {
return new URIish(hook.getRepository().getUrl());
}
} catch (URISyntaxException e) {
LOGGER.log(Level.WARNING, "could not parse URL");
}
return null;
}
private void scheduleBuild(Job<?, ?> job, Action[] actions) { private void scheduleBuild(Job<?, ?> job, Action[] actions) {
int projectBuildDelay = 0; int projectBuildDelay = 0;
if (job instanceof ParameterizedJobMixIn.ParameterizedJob) { if (job instanceof ParameterizedJobMixIn.ParameterizedJob) {

View File

@ -1,6 +1,7 @@
package com.dabsquared.gitlabjenkins.trigger.handler.merge; package com.dabsquared.gitlabjenkins.trigger.handler.merge;
import com.dabsquared.gitlabjenkins.cause.GitLabMergeCause; import com.dabsquared.gitlabjenkins.cause.CauseData;
import com.dabsquared.gitlabjenkins.cause.GitLabWebHookCause;
import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequestHook; import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequestHook;
import com.dabsquared.gitlabjenkins.gitlab.api.model.ObjectAttributes; import com.dabsquared.gitlabjenkins.gitlab.api.model.ObjectAttributes;
import com.dabsquared.gitlabjenkins.gitlab.api.model.State; import com.dabsquared.gitlabjenkins.gitlab.api.model.State;
@ -8,20 +9,17 @@ import com.dabsquared.gitlabjenkins.trigger.exception.NoRevisionToBuildException
import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter;
import com.dabsquared.gitlabjenkins.trigger.handler.AbstractWebHookTriggerHandler; import com.dabsquared.gitlabjenkins.trigger.handler.AbstractWebHookTriggerHandler;
import com.dabsquared.gitlabjenkins.util.BuildUtil; import com.dabsquared.gitlabjenkins.util.BuildUtil;
import hudson.model.CauseAction;
import hudson.model.Job; import hudson.model.Job;
import hudson.model.Run; import hudson.model.Run;
import hudson.plugins.git.RevisionParameterAction; import hudson.plugins.git.RevisionParameterAction;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.eclipse.jgit.transport.URIish;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import static com.dabsquared.gitlabjenkins.cause.CauseDataBuilder.causeData;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
@ -37,7 +35,7 @@ class MergeRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<M
@Override @Override
public void handle(Job<?, ?> job, MergeRequestHook hook, boolean ciSkip, BranchFilter branchFilter) { public void handle(Job<?, ?> job, MergeRequestHook hook, boolean ciSkip, BranchFilter branchFilter) {
if (allowedStates.contains(hook.getObjectAttributes().optState().orNull()) && isLastCommitNotYetBuild(job, hook)) { if (allowedStates.contains(hook.getObjectAttributes().getState()) && isLastCommitNotYetBuild(job, hook)) {
super.handle(job, hook, ciSkip, branchFilter); super.handle(job, hook, ciSkip, branchFilter);
} }
} }
@ -49,12 +47,14 @@ class MergeRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<M
@Override @Override
protected boolean isCiSkip(MergeRequestHook hook) { protected boolean isCiSkip(MergeRequestHook hook) {
return hook.getObjectAttributes().optDescription().or("").contains("[ci-skip]"); return hook.getObjectAttributes() != null
&& hook.getObjectAttributes().getDescription() != null
&& hook.getObjectAttributes().getDescription().contains("[ci-skip]");
} }
@Override @Override
protected String getTargetBranch(MergeRequestHook hook) { protected String getTargetBranch(MergeRequestHook hook) {
return hook.getObjectAttributes().optTargetBranch().orNull(); return hook.getObjectAttributes() == null ? null : hook.getObjectAttributes().getTargetBranch();
} }
@Override @Override
@ -63,8 +63,28 @@ class MergeRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<M
} }
@Override @Override
protected CauseAction createCauseAction(Job<?, ?> job, MergeRequestHook hook) { protected CauseData retrieveCauseData(MergeRequestHook hook) {
return new CauseAction(createGitLabMergeCause(job, hook)); return causeData()
.withActionType(CauseData.ActionType.MERGE)
.withProjectId(hook.getObjectAttributes().getTargetProjectId())
.withBranch(hook.getObjectAttributes().getSourceBranch())
.withSourceBranch(hook.getObjectAttributes().getSourceBranch())
.withUserName(hook.getObjectAttributes().getLastCommit().getAuthor().getName())
.withUserEmail(hook.getObjectAttributes().getLastCommit().getAuthor().getEmail())
.withSourceRepoHomepage(hook.getObjectAttributes().getSource().getHomepage())
.withSourceRepoName(hook.getObjectAttributes().getSource().getName())
.withSourceRepoUrl(hook.getObjectAttributes().getSource().getUrl())
.withSourceRepoSshUrl(hook.getObjectAttributes().getSource().getSshUrl())
.withSourceRepoHttpUrl(hook.getObjectAttributes().getSource().getHttpUrl())
.withMergeRequestTitle(hook.getObjectAttributes().getTitle())
.withMergeRequestDescription(hook.getObjectAttributes().getDescription())
.withMergeRequestId(hook.getObjectAttributes().getIid())
.withTargetBranch(hook.getObjectAttributes().getTargetBranch())
.withTargetRepoName(hook.getObjectAttributes().getTarget().getName())
.withTargetRepoSshUrl(hook.getObjectAttributes().getTarget().getSshUrl())
.withTargetRepoHttpUrl(hook.getObjectAttributes().getTarget().getHttpUrl())
.withTriggeredByUser(hook.getObjectAttributes().getLastCommit().getAuthor().getName())
.build();
} }
@Override @Override
@ -72,36 +92,22 @@ class MergeRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<M
return new RevisionParameterAction(retrieveRevisionToBuild(hook), retrieveUrIish(hook)); return new RevisionParameterAction(retrieveRevisionToBuild(hook), retrieveUrIish(hook));
} }
private GitLabMergeCause createGitLabMergeCause(Job<?, ?> job, MergeRequestHook mergeRequestHook) {
try {
return new GitLabMergeCause(mergeRequestHook, new File(job.getRootDir(), "gitlab-polling.log"));
} catch (IOException ex) {
return new GitLabMergeCause(mergeRequestHook);
}
}
private String retrieveRevisionToBuild(MergeRequestHook hook) throws NoRevisionToBuildException { private String retrieveRevisionToBuild(MergeRequestHook hook) throws NoRevisionToBuildException {
if (hook.getObjectAttributes().getLastCommit().optId().isPresent()) { if (hook.getObjectAttributes() != null
return hook.getObjectAttributes().getLastCommit().optId().get(); && hook.getObjectAttributes().getLastCommit() != null
&& hook.getObjectAttributes().getLastCommit().getId() != null) {
return hook.getObjectAttributes().getLastCommit().getId();
} else { } else {
throw new NoRevisionToBuildException(); throw new NoRevisionToBuildException();
} }
} }
private URIish retrieveUrIish(MergeRequestHook hook) {
try {
return new URIish(hook.getRepository().optUrl().orNull());
} catch (URISyntaxException e) {
LOGGER.log(Level.WARNING, "could not parse URL");
return null;
}
}
private boolean isLastCommitNotYetBuild(Job<?, ?> project, MergeRequestHook hook) { private boolean isLastCommitNotYetBuild(Job<?, ?> project, MergeRequestHook hook) {
ObjectAttributes objectAttributes = hook.getObjectAttributes(); ObjectAttributes objectAttributes = hook.getObjectAttributes();
if (objectAttributes.optLastCommit().isPresent()) { if (objectAttributes != null && objectAttributes.getLastCommit() != null) {
Run<?, ?> mergeBuild = BuildUtil.getBuildBySHA1(project, objectAttributes.optLastCommit().get().optId().get(), true); Run<?, ?> mergeBuild = BuildUtil.getBuildBySHA1(project, objectAttributes.getLastCommit().getId(), true);
if (mergeBuild != null && StringUtils.equals(getTargetBranchFromBuild(mergeBuild), objectAttributes.optTargetBranch().get())) { if (mergeBuild != null && StringUtils.equals(getTargetBranchFromBuild(mergeBuild), objectAttributes.getTargetBranch())) {
LOGGER.log(Level.INFO, "Last commit in Merge Request has already been built in build #" + mergeBuild.getNumber()); LOGGER.log(Level.INFO, "Last commit in Merge Request has already been built in build #" + mergeBuild.getNumber());
return false; return false;
} }
@ -110,7 +116,7 @@ class MergeRequestHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<M
} }
private String getTargetBranchFromBuild(Run<?, ?> mergeBuild) { private String getTargetBranchFromBuild(Run<?, ?> mergeBuild) {
GitLabMergeCause cause = mergeBuild.getCause(GitLabMergeCause.class); GitLabWebHookCause cause = mergeBuild.getCause(GitLabWebHookCause.class);
return cause == null ? null : cause.getTargetBranch(); return cause == null ? null : cause.getData().getTargetBranch();
} }
} }

View File

@ -1,17 +1,16 @@
package com.dabsquared.gitlabjenkins.trigger.handler.push; package com.dabsquared.gitlabjenkins.trigger.handler.push;
import com.dabsquared.gitlabjenkins.GitLabPushTrigger; import com.dabsquared.gitlabjenkins.GitLabPushTrigger;
import com.dabsquared.gitlabjenkins.cause.GitLabMergeCause; import com.dabsquared.gitlabjenkins.cause.CauseData;
import com.dabsquared.gitlabjenkins.cause.GitLabWebHookCause;
import com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty; import com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty;
import com.dabsquared.gitlabjenkins.gitlab.api.GitLabApi; import com.dabsquared.gitlabjenkins.gitlab.api.GitLabApi;
import com.dabsquared.gitlabjenkins.gitlab.api.model.Branch; import com.dabsquared.gitlabjenkins.gitlab.api.model.Branch;
import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequest; import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequest;
import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequestHook;
import com.dabsquared.gitlabjenkins.gitlab.api.model.PushHook; import com.dabsquared.gitlabjenkins.gitlab.api.model.PushHook;
import com.dabsquared.gitlabjenkins.gitlab.api.model.State; import com.dabsquared.gitlabjenkins.gitlab.api.model.State;
import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter; import com.dabsquared.gitlabjenkins.trigger.filter.BranchFilter;
import com.dabsquared.gitlabjenkins.util.LoggerUtil; import com.dabsquared.gitlabjenkins.util.LoggerUtil;
import com.google.common.base.Optional;
import hudson.model.AbstractProject; import hudson.model.AbstractProject;
import hudson.model.Action; import hudson.model.Action;
import hudson.model.CauseAction; import hudson.model.CauseAction;
@ -27,9 +26,7 @@ import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.CommitBuilder.commit; import static com.dabsquared.gitlabjenkins.cause.CauseDataBuilder.causeData;
import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.MergeRequestHookBuilder.mergeRequestHook;
import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.ObjectAttributesBuilder.objectAttributes;
/** /**
* @author Robin Müller * @author Robin Müller
@ -45,11 +42,11 @@ class OpenMergeRequestPushHookTriggerHandler implements PushHookTriggerHandler {
AbstractProject<?, ?> project = (AbstractProject<?, ?>) job; AbstractProject<?, ?> project = (AbstractProject<?, ?>) job;
GitLabConnectionProperty property = job.getProperty(GitLabConnectionProperty.class); GitLabConnectionProperty property = job.getProperty(GitLabConnectionProperty.class);
final GitLabPushTrigger trigger = project.getTrigger(GitLabPushTrigger.class); final GitLabPushTrigger trigger = project.getTrigger(GitLabPushTrigger.class);
Optional<Integer> projectId = hook.optProjectId(); Integer projectId = hook.getProjectId();
if (property != null && property.getClient() != null && projectId.isPresent() && trigger != null) { if (property != null && property.getClient() != null && projectId != null && trigger != null) {
GitLabApi client = property.getClient(); GitLabApi client = property.getClient();
for (MergeRequest mergeRequest : getOpenMergeRequests(client, projectId.get().toString())) { for (MergeRequest mergeRequest : getOpenMergeRequests(client, projectId.toString())) {
handleMergeRequest(job, hook, ciSkip, branchFilter, client, projectId.get(), mergeRequest); handleMergeRequest(job, hook, ciSkip, branchFilter, client, projectId, mergeRequest);
} }
} }
} }
@ -78,24 +75,42 @@ class OpenMergeRequestPushHookTriggerHandler implements PushHookTriggerHandler {
} }
private void handleMergeRequest(Job<?, ?> job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, GitLabApi client, Integer projectId, MergeRequest mergeRequest) { private void handleMergeRequest(Job<?, ?> job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, GitLabApi client, Integer projectId, MergeRequest mergeRequest) {
if (ciSkip && mergeRequest.optDescription().or("").contains("[ci-skip]")) { if (ciSkip && mergeRequest.getDescription() != null && mergeRequest.getDescription().contains("[ci-skip]")) {
LOGGER.log(Level.INFO, "Skipping MR " + mergeRequest.optTitle().or("") + " due to ci-skip."); LOGGER.log(Level.INFO, "Skipping MR " + mergeRequest.getTitle() + " due to ci-skip.");
return; return;
} }
Optional<String> targetBranch = mergeRequest.optTargetBranch(); String targetBranch = mergeRequest.getTargetBranch();
Optional<String> sourceBranch = mergeRequest.optSourceBranch(); String sourceBranch = mergeRequest.getSourceBranch();
if (targetBranch.isPresent() if (targetBranch != null && branchFilter.isBranchAllowed(targetBranch) && hook.getRef().endsWith(targetBranch) && sourceBranch != null) {
&& branchFilter.isBranchAllowed(targetBranch.get())
&& hook.optRef().or("").endsWith(targetBranch.get())
&& sourceBranch.isPresent()) {
LOGGER.log(Level.INFO, "{0} triggered for push to target branch of open merge request #{1}.", LOGGER.log(Level.INFO, "{0} triggered for push to target branch of open merge request #{1}.",
LoggerUtil.toArray(job.getFullName(), mergeRequest.optIid().orNull())); LoggerUtil.toArray(job.getFullName(), mergeRequest.getId()));
Branch branch = client.getBranch(projectId.toString(), sourceBranch.get()); Branch branch = client.getBranch(projectId.toString(), sourceBranch);
scheduleBuild(job, new CauseAction(new GitLabMergeCause(createMergeRequest(projectId, mergeRequest, branch)))); scheduleBuild(job, new CauseAction(new GitLabWebHookCause(retrieveCauseData(hook, mergeRequest, branch))));
} }
} }
private CauseData retrieveCauseData(PushHook hook, MergeRequest mergeRequest, Branch branch) {
return causeData()
.withActionType(CauseData.ActionType.MERGE)
.withProjectId(hook.getProjectId())
.withBranch(branch.getName())
.withSourceBranch(branch.getName())
.withUserName(branch.getCommit().getAuthor().getName())
.withUserEmail(branch.getCommit().getAuthor().getEmail())
//.withSourceRepoHomepage()
//.withSourceRepoUrl()
.withMergeRequestTitle(mergeRequest.getTitle())
.withMergeRequestDescription(mergeRequest.getDescription())
.withMergeRequestId(mergeRequest.getIid())
.withTargetBranch(mergeRequest.getTargetBranch())
.withTargetRepoName(hook.getRepository().getName())
.withTargetRepoSshUrl(hook.getRepository().getGitSshUrl())
.withTargetRepoHttpUrl(hook.getRepository().getGitHttpUrl())
.withTriggeredByUser(hook.getCommits().get(0).getAuthor().getName())
.build();
}
@Override @Override
public boolean isEnabled() { public boolean isEnabled() {
return false; return false;
@ -121,28 +136,4 @@ class OpenMergeRequestPushHookTriggerHandler implements PushHookTriggerHandler {
} }
}; };
} }
private MergeRequestHook createMergeRequest(Integer projectId, MergeRequest mergeRequest, Branch branch) {
return mergeRequestHook()
.withObjectKind("merge_request")
.withObjectAttributes(objectAttributes()
.withAssigneeId(mergeRequest.getAssignee().optId().orNull())
.withAuthorId(mergeRequest.getAuthor().optId().orNull())
.withDescription(mergeRequest.optDescription().orNull())
.withId(mergeRequest.optId().orNull())
.withIid(mergeRequest.optIid().orNull())
.withMergeStatus(mergeRequest.optMergeStatus().orNull())
.withSourceBranch(mergeRequest.optSourceBranch().orNull())
.withSourceProjectId(mergeRequest.optSourceProjectId().orNull())
.withTargetBranch(mergeRequest.optTargetBranch().orNull())
.withTargetProjectId(projectId)
.withTitle(mergeRequest.optTitle().orNull())
.withLastCommit(commit()
.withId(branch.getCommit().optId().orNull())
.withMessage(branch.getCommit().optMessage().orNull())
.withUrl("/projects/" + projectId + "/repository/commits/" + branch.getCommit().optId().orNull())
.build())
.build())
.build();
}
} }

View File

@ -1,29 +1,21 @@
package com.dabsquared.gitlabjenkins.trigger.handler.push; package com.dabsquared.gitlabjenkins.trigger.handler.push;
import com.dabsquared.gitlabjenkins.cause.GitLabPushCause; import com.dabsquared.gitlabjenkins.cause.CauseData;
import com.dabsquared.gitlabjenkins.gitlab.api.model.Commit; import com.dabsquared.gitlabjenkins.gitlab.api.model.Commit;
import com.dabsquared.gitlabjenkins.gitlab.api.model.PushHook; import com.dabsquared.gitlabjenkins.gitlab.api.model.PushHook;
import com.dabsquared.gitlabjenkins.trigger.exception.NoRevisionToBuildException; import com.dabsquared.gitlabjenkins.trigger.exception.NoRevisionToBuildException;
import com.dabsquared.gitlabjenkins.trigger.handler.AbstractWebHookTriggerHandler; import com.dabsquared.gitlabjenkins.trigger.handler.AbstractWebHookTriggerHandler;
import hudson.model.CauseAction;
import hudson.model.Job;
import hudson.plugins.git.RevisionParameterAction; import hudson.plugins.git.RevisionParameterAction;
import org.eclipse.jgit.transport.URIish;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.List; import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger; import static com.dabsquared.gitlabjenkins.cause.CauseDataBuilder.causeData;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
class PushHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<PushHook> implements PushHookTriggerHandler { class PushHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<PushHook> implements PushHookTriggerHandler {
private final static Logger LOGGER = Logger.getLogger(PushHookTriggerHandlerImpl.class.getName());
@Override @Override
public boolean isEnabled() { public boolean isEnabled() {
return true; return true;
@ -32,17 +24,37 @@ class PushHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<PushHook>
@Override @Override
protected boolean isCiSkip(PushHook hook) { protected boolean isCiSkip(PushHook hook) {
List<Commit> commits = hook.getCommits(); List<Commit> commits = hook.getCommits();
return !commits.isEmpty() && commits.get(0).optMessage().or("").contains("[ci-skip]"); return commits != null && !commits.isEmpty() && commits.get(0).getMessage() != null && commits.get(0).getMessage().contains("[ci-skip]");
} }
@Override @Override
protected CauseAction createCauseAction(Job<?, ?> job, PushHook hook) { protected CauseData retrieveCauseData(PushHook hook) {
return new CauseAction(createGitLabPushCause(job, hook)); return causeData()
.withActionType(CauseData.ActionType.PUSH)
.withProjectId(hook.getProjectId())
.withBranch(getTargetBranch(hook))
.withSourceBranch(getTargetBranch(hook))
.withUserName(hook.getUserName())
.withUserEmail(hook.getUserEmail())
.withSourceRepoHomepage(hook.getRepository().getHomepage())
.withSourceRepoName(hook.getRepository().getName())
.withSourceRepoUrl(hook.getRepository().getUrl())
.withSourceRepoSshUrl(hook.getRepository().getGitSshUrl())
.withSourceRepoHttpUrl(hook.getRepository().getGitHttpUrl())
.withMergeRequestTitle("")
.withMergeRequestDescription("")
.withMergeRequestId(null)
.withTargetBranch(getTargetBranch(hook))
.withTargetRepoName("")
.withTargetRepoSshUrl("")
.withTargetRepoHttpUrl("")
.withTriggeredByUser(retrievePushedBy(hook))
.build();
} }
@Override @Override
protected String getTargetBranch(PushHook hook) { protected String getTargetBranch(PushHook hook) {
return hook.optRef().or("").replaceFirst("^refs/heads/", ""); return hook.getRef() == null ? null : hook.getRef().replaceFirst("^refs/heads/", "");
} }
@Override @Override
@ -50,42 +62,34 @@ class PushHookTriggerHandlerImpl extends AbstractWebHookTriggerHandler<PushHook>
return "push"; return "push";
} }
private GitLabPushCause createGitLabPushCause(Job<?, ?> job, PushHook hook) {
try {
return new GitLabPushCause(hook, new File(job.getRootDir(), "gitlab-polling.log"));
} catch (IOException ex) {
return new GitLabPushCause(hook);
}
}
@Override @Override
protected RevisionParameterAction createRevisionParameter(PushHook hook) throws NoRevisionToBuildException { protected RevisionParameterAction createRevisionParameter(PushHook hook) throws NoRevisionToBuildException {
return new RevisionParameterAction(retrieveRevisionToBuild(hook), retrieveUrIish(hook)); return new RevisionParameterAction(retrieveRevisionToBuild(hook), retrieveUrIish(hook));
} }
private String retrievePushedBy(PushHook hook) {
List<Commit> commits = hook.getCommits();
if (commits != null && commits.size() > 0) {
return commits.get(0).getAuthor().getName();
} else {
return hook.getUserName();
}
}
private String retrieveRevisionToBuild(PushHook hook) throws NoRevisionToBuildException { private String retrieveRevisionToBuild(PushHook hook) throws NoRevisionToBuildException {
if (hook.getCommits().isEmpty()) { if (hook.getCommits() == null || hook.getCommits().isEmpty()) {
if (isNewBranchPush(hook)) { if (isNewBranchPush(hook)) {
return hook.optAfter().orNull(); return hook.getAfter();
} else { } else {
throw new NoRevisionToBuildException(); throw new NoRevisionToBuildException();
} }
} else { } else {
List<Commit> commits = hook.getCommits(); List<Commit> commits = hook.getCommits();
return commits.get(commits.size() - 1).optId().orNull(); return commits.get(commits.size() - 1).getId();
}
}
private URIish retrieveUrIish(PushHook hook) {
try {
return new URIish(hook.getRepository().optUrl().orNull());
} catch (URISyntaxException e) {
LOGGER.log(Level.WARNING, "could not parse URL");
return null;
} }
} }
private boolean isNewBranchPush(PushHook pushHook) { private boolean isNewBranchPush(PushHook pushHook) {
return pushHook.optBefore().or("").contains("0000000000000000000000000000000000000000"); return pushHook.getBefore() != null && pushHook.getBefore().contains("0000000000000000000000000000000000000000");
} }
} }

View File

@ -19,7 +19,7 @@ import java.util.Locale;
/** /**
* @author Robin Müller * @author Robin Müller
*/ */
public final class GsonUtil { public final class JsonUtil {
private static final Gson prettyPrint = new GsonBuilder().setPrettyPrinting().create(); private static final Gson prettyPrint = new GsonBuilder().setPrettyPrinting().create();
private static final Gson gson = new GsonBuilder() private static final Gson gson = new GsonBuilder()
@ -27,17 +27,17 @@ public final class GsonUtil {
.registerTypeAdapter(Date.class, new DateSerializer()) .registerTypeAdapter(Date.class, new DateSerializer())
.create(); .create();
private GsonUtil() { } private JsonUtil() { }
public static Gson getGson() {
return gson;
}
public static String toPrettyPrint(String json) { public static String toPrettyPrint(String json) {
JsonParser parser = new JsonParser(); JsonParser parser = new JsonParser();
return prettyPrint.toJson(parser.parse(json)); return prettyPrint.toJson(parser.parse(json));
} }
public static <T> T read(String json, Class<T> type) {
return gson.fromJson(json, type);
}
private static final String[] DATE_FORMATS = new String[] { private static final String[] DATE_FORMATS = new String[] {
"yyyy-MM-dd HH:mm:ss Z", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "yyyy-MM-dd'T'HH:mm:ssX" }; "yyyy-MM-dd HH:mm:ss Z", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "yyyy-MM-dd'T'HH:mm:ssX" };

View File

@ -2,7 +2,7 @@ package com.dabsquared.gitlabjenkins.webhook.build;
import com.dabsquared.gitlabjenkins.GitLabPushTrigger; import com.dabsquared.gitlabjenkins.GitLabPushTrigger;
import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequestHook; import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequestHook;
import com.dabsquared.gitlabjenkins.util.GsonUtil; import com.dabsquared.gitlabjenkins.util.JsonUtil;
import com.dabsquared.gitlabjenkins.webhook.WebHookAction; import com.dabsquared.gitlabjenkins.webhook.WebHookAction;
import hudson.model.AbstractProject; import hudson.model.AbstractProject;
import hudson.security.ACL; import hudson.security.ACL;
@ -12,7 +12,7 @@ import org.kohsuke.stapler.StaplerResponse;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import static com.dabsquared.gitlabjenkins.util.GsonUtil.toPrettyPrint; import static com.dabsquared.gitlabjenkins.util.JsonUtil.toPrettyPrint;
/** /**
* @author Robin Müller * @author Robin Müller
@ -26,7 +26,7 @@ public class MergeRequestBuildAction implements WebHookAction {
public MergeRequestBuildAction(AbstractProject<?, ?> project, String json) { public MergeRequestBuildAction(AbstractProject<?, ?> project, String json) {
LOGGER.log(Level.FINE, "MergeRequest: {0}", toPrettyPrint(json)); LOGGER.log(Level.FINE, "MergeRequest: {0}", toPrettyPrint(json));
this.project = project; this.project = project;
this.mergeRequestHook = GsonUtil.getGson().fromJson(json, MergeRequestHook.class); this.mergeRequestHook = JsonUtil.read(json, MergeRequestHook.class);
} }
public void execute(StaplerResponse response) { public void execute(StaplerResponse response) {

View File

@ -2,7 +2,7 @@ package com.dabsquared.gitlabjenkins.webhook.build;
import com.dabsquared.gitlabjenkins.GitLabPushTrigger; import com.dabsquared.gitlabjenkins.GitLabPushTrigger;
import com.dabsquared.gitlabjenkins.gitlab.api.model.PushHook; import com.dabsquared.gitlabjenkins.gitlab.api.model.PushHook;
import com.dabsquared.gitlabjenkins.util.GsonUtil; import com.dabsquared.gitlabjenkins.util.JsonUtil;
import com.dabsquared.gitlabjenkins.webhook.WebHookAction; import com.dabsquared.gitlabjenkins.webhook.WebHookAction;
import hudson.model.AbstractProject; import hudson.model.AbstractProject;
import hudson.security.ACL; import hudson.security.ACL;
@ -12,7 +12,7 @@ import org.kohsuke.stapler.StaplerResponse;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import static com.dabsquared.gitlabjenkins.util.GsonUtil.toPrettyPrint; import static com.dabsquared.gitlabjenkins.util.JsonUtil.toPrettyPrint;
/** /**
* @author Robin Müller * @author Robin Müller
@ -27,12 +27,11 @@ public class PushBuildAction implements WebHookAction {
public PushBuildAction(AbstractProject<?, ?> project, String json) { public PushBuildAction(AbstractProject<?, ?> project, String json) {
LOGGER.log(Level.FINE, "Push: {0}", toPrettyPrint(json)); LOGGER.log(Level.FINE, "Push: {0}", toPrettyPrint(json));
this.project = project; this.project = project;
this.pushHook = GsonUtil.getGson().fromJson(json, PushHook.class); this.pushHook = JsonUtil.read(json, PushHook.class);
} }
public void execute(StaplerResponse response) { public void execute(StaplerResponse response) {
String repositoryUrl = pushHook.getRepository().optUrl().orNull(); if (pushHook.getRepository() != null && pushHook.getRepository().getUrl() == null) {
if (repositoryUrl == null) {
LOGGER.log(Level.WARNING, "No repository url found."); LOGGER.log(Level.WARNING, "No repository url found.");
return; return;
} }

View File

@ -12,7 +12,7 @@ import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static com.dabsquared.gitlabjenkins.gitlab.api.model.generated.builder.BranchBuilder.branch; import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.BranchBuilder.branch;
import static java.util.Arrays.asList; import static java.util.Arrays.asList;
import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;

View File

@ -25,8 +25,11 @@ import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.CommitBuilder.commit;
import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.MergeRequestHookBuilder.mergeRequestHook; import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.MergeRequestHookBuilder.mergeRequestHook;
import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.ObjectAttributesBuilder.objectAttributes; import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.ObjectAttributesBuilder.objectAttributes;
import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.ProjectBuilder.project;
import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.UserBuilder.user;
import static com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterConfig.BranchFilterConfigBuilder.branchFilterConfig; import static com.dabsquared.gitlabjenkins.trigger.filter.BranchFilterConfig.BranchFilterConfigBuilder.branchFilterConfig;
import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
@ -92,6 +95,27 @@ public class MergeRequestHookTriggerHandlerImplTest {
.withObjectAttributes(objectAttributes() .withObjectAttributes(objectAttributes()
.withTargetBranch("refs/heads/" + git.nameRev().add(head).call().get(head)) .withTargetBranch("refs/heads/" + git.nameRev().add(head).call().get(head))
.withState(State.opened) .withState(State.opened)
.withIid(1)
.withTitle("test")
.withTargetProjectId(1)
.withSourceProjectId(1)
.withSourceBranch("feature")
.withTargetBranch("master")
.withLastCommit(commit().withAuthor(user().withName("test").build()).build())
.withSource(project()
.withName("test")
.withHomepage("https://gitlab.org/test")
.withUrl("git@gitlab.org:test.git")
.withSshUrl("git@gitlab.org:test.git")
.withHttpUrl("https://gitlab.org/test.git")
.build())
.withTarget(project()
.withName("test")
.withHomepage("https://gitlab.org/test")
.withUrl("git@gitlab.org:test.git")
.withSshUrl("git@gitlab.org:test.git")
.withHttpUrl("https://gitlab.org/test.git")
.build())
.build()) .build())
.build(), true, BranchFilterFactory.newBranchFilter(branchFilterConfig().build(BranchFilterType.All))); .build(), true, BranchFilterFactory.newBranchFilter(branchFilterConfig().build(BranchFilterType.All)));

View File

@ -46,7 +46,7 @@ public class PushHookTriggerHandlerGitlabServerTest {
RevisionParameterAction revisionParameterAction = new PushHookTriggerHandlerImpl().createRevisionParameter(hook); RevisionParameterAction revisionParameterAction = new PushHookTriggerHandlerImpl().createRevisionParameter(hook);
assertThat(revisionParameterAction, is(notNullValue())); assertThat(revisionParameterAction, is(notNullValue()));
assertThat(revisionParameterAction.commit, is(hook.optAfter().get())); assertThat(revisionParameterAction.commit, is(hook.getAfter()));
assertFalse(revisionParameterAction.canOriginateFrom(new ArrayList<RemoteConfig>())); assertFalse(revisionParameterAction.canOriginateFrom(new ArrayList<RemoteConfig>()));
} }
@ -57,7 +57,7 @@ public class PushHookTriggerHandlerGitlabServerTest {
RevisionParameterAction revisionParameterAction = new PushHookTriggerHandlerImpl().createRevisionParameter(hook); RevisionParameterAction revisionParameterAction = new PushHookTriggerHandlerImpl().createRevisionParameter(hook);
assertThat(revisionParameterAction, is(notNullValue())); assertThat(revisionParameterAction, is(notNullValue()));
assertThat(revisionParameterAction.commit, is(hook.optAfter().get())); assertThat(revisionParameterAction.commit, is(hook.getAfter()));
assertFalse(revisionParameterAction.canOriginateFrom(new ArrayList<RemoteConfig>())); assertFalse(revisionParameterAction.canOriginateFrom(new ArrayList<RemoteConfig>()));
} }
@ -68,7 +68,7 @@ public class PushHookTriggerHandlerGitlabServerTest {
RevisionParameterAction revisionParameterAction = new PushHookTriggerHandlerImpl().createRevisionParameter(hook); RevisionParameterAction revisionParameterAction = new PushHookTriggerHandlerImpl().createRevisionParameter(hook);
assertThat(revisionParameterAction, is(notNullValue())); assertThat(revisionParameterAction, is(notNullValue()));
assertThat(revisionParameterAction.commit, is(hook.optAfter().get())); assertThat(revisionParameterAction.commit, is(hook.getAfter()));
assertFalse(revisionParameterAction.canOriginateFrom(new ArrayList<RemoteConfig>())); assertFalse(revisionParameterAction.canOriginateFrom(new ArrayList<RemoteConfig>()));
} }
@ -79,7 +79,7 @@ public class PushHookTriggerHandlerGitlabServerTest {
RevisionParameterAction revisionParameterAction = new PushHookTriggerHandlerImpl().createRevisionParameter(hook); RevisionParameterAction revisionParameterAction = new PushHookTriggerHandlerImpl().createRevisionParameter(hook);
assertThat(revisionParameterAction, is(notNullValue())); assertThat(revisionParameterAction, is(notNullValue()));
assertThat(revisionParameterAction.commit, is(hook.optAfter().get())); assertThat(revisionParameterAction.commit, is(hook.getAfter()));
assertFalse(revisionParameterAction.canOriginateFrom(new ArrayList<RemoteConfig>())); assertFalse(revisionParameterAction.canOriginateFrom(new ArrayList<RemoteConfig>()));
} }
@ -90,7 +90,7 @@ public class PushHookTriggerHandlerGitlabServerTest {
RevisionParameterAction revisionParameterAction = new PushHookTriggerHandlerImpl().createRevisionParameter(hook); RevisionParameterAction revisionParameterAction = new PushHookTriggerHandlerImpl().createRevisionParameter(hook);
assertThat(revisionParameterAction, is(notNullValue())); assertThat(revisionParameterAction, is(notNullValue()));
assertThat(revisionParameterAction.commit, is(hook.optAfter().get())); assertThat(revisionParameterAction.commit, is(hook.getAfter()));
assertFalse(revisionParameterAction.canOriginateFrom(new ArrayList<RemoteConfig>())); assertFalse(revisionParameterAction.canOriginateFrom(new ArrayList<RemoteConfig>()));
} }

View File

@ -92,9 +92,17 @@ public class PushHookTriggerHandlerImplTest {
}); });
pushHookTriggerHandler.handle(project, pushHook() pushHookTriggerHandler.handle(project, pushHook()
.withBefore("0000000000000000000000000000000000000000") .withBefore("0000000000000000000000000000000000000000")
.withProjectId(1)
.withUserName("test")
.withRepository(repository()
.withName("test")
.withHomepage("https://gitlab.org/test")
.withUrl("git@gitlab.org:test.git")
.withGitSshUrl("git@gitlab.org:test.git")
.withGitHttpUrl("https://gitlab.org/test.git")
.build())
.withAfter(commit.name()) .withAfter(commit.name())
.withRef("refs/heads/" + git.nameRev().add(head).call().get(head)) .withRef("refs/heads/" + git.nameRev().add(head).call().get(head))
.withRepository(repository().withUrl(repositoryUrl).build())
.build(), webHookTriggerConfig(true).getCiSkip(), webHookTriggerConfig(true).getBranchFilter()); .build(), webHookTriggerConfig(true).getCiSkip(), webHookTriggerConfig(true).getBranchFilter());
buildTriggered.block(); buildTriggered.block();

View File

@ -1,7 +1,8 @@
package com.dabsquared.gitlabjenkins.webhook.build; package com.dabsquared.gitlabjenkins.webhook.build;
import com.dabsquared.gitlabjenkins.GitLabPushTrigger; import com.dabsquared.gitlabjenkins.GitLabPushTrigger;
import com.dabsquared.gitlabjenkins.cause.GitLabMergeCause; import com.dabsquared.gitlabjenkins.cause.CauseData;
import com.dabsquared.gitlabjenkins.cause.GitLabWebHookCause;
import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequestHook; import com.dabsquared.gitlabjenkins.gitlab.api.model.MergeRequestHook;
import hudson.model.FreeStyleProject; import hudson.model.FreeStyleProject;
import hudson.model.ParametersAction; import hudson.model.ParametersAction;
@ -26,8 +27,7 @@ import org.mockito.runners.MockitoJUnitRunner;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.MergeRequestHookBuilder.mergeRequestHook; import static com.dabsquared.gitlabjenkins.cause.CauseDataBuilder.causeData;
import static com.dabsquared.gitlabjenkins.gitlab.api.model.builder.generated.ObjectAttributesBuilder.objectAttributes;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
@ -109,8 +109,24 @@ public class MergeRequestBuildActionTest {
FreeStyleProject testProject = jenkins.createFreeStyleProject("test"); FreeStyleProject testProject = jenkins.createFreeStyleProject("test");
testProject.addTrigger(trigger); testProject.addTrigger(trigger);
testProject.setScm(new GitSCM(gitRepoUrl)); testProject.setScm(new GitSCM(gitRepoUrl));
QueueTaskFuture<?> future = testProject.scheduleBuild2(0, new GitLabMergeCause(mergeRequestHook() QueueTaskFuture<?> future = testProject.scheduleBuild2(0, new GitLabWebHookCause(causeData()
.withObjectAttributes(objectAttributes().withTargetBranch("master").build()) .withActionType(CauseData.ActionType.MERGE)
.withProjectId(1)
.withBranch("feature")
.withSourceBranch("feature")
.withUserName("")
.withSourceRepoHomepage("https://gitlab.org/test")
.withSourceRepoName("test")
.withSourceRepoUrl("git@gitlab.org:test.git")
.withSourceRepoSshUrl("git@gitlab.org:test.git")
.withSourceRepoHttpUrl("https://gitlab.org/test.git")
.withMergeRequestTitle("Test")
.withMergeRequestId(1)
.withTargetBranch("master")
.withTargetRepoName("test")
.withTargetRepoSshUrl("git@gitlab.org:test.git")
.withTargetRepoHttpUrl("https://gitlab.org/test.git")
.withTriggeredByUser("test")
.build())); .build()));
future.get(); future.get();