private static boolean isNoMergeBuild(BuildData data, MergeRecord merge) { return merge == null || merge.getSha1().equals(data.lastBuild.getMarked().getSha1String()); }
public static Run<?, ?> getBuildBySHA1IncludingMergeBuilds(Job<?, ?> project, String sha1) { for (Run<?, ?> build : project.getBuilds()) { for(BuildData data : build.getActions(BuildData.class)) { if (data != null && data.lastBuild != null && data.lastBuild.getMarked() != null && data.lastBuild.getMarked().getSha1String().equals(sha1)) { return build; } } } return null; }
@Override protected RevisionParameterAction createRevisionParameter(NoteHook hook, GitSCM gitSCM) throws NoRevisionToBuildException { return new RevisionParameterAction(retrieveRevisionToBuild(hook), retrieveUrIish(hook)); }
private static String getBuildRevision(Run<?, ?> build) { GitLabWebHookCause cause = build.getCause(GitLabWebHookCause.class); if (cause != null) { return cause.getData().getLastCommit(); } BuildData action = build.getAction(BuildData.class); if (action == null) { throw new IllegalStateException("No (git-plugin) BuildData associated to current build"); } Revision lastBuiltRevision = action.getLastBuiltRevision(); if (lastBuiltRevision == null) { throw new IllegalStateException("Last build has no associated commit"); } return action.getLastBuild(lastBuiltRevision.getSha1()).getMarked().getSha1String(); }
public static Run<?, ?> getBuildByBranch(Job<?, ?> project, String branchName) { for (Run<?, ?> build : project.getBuilds()) { BuildData data = build.getAction(BuildData.class); MergeRecord merge = build.getAction(MergeRecord.class); if (hasLastBuild(data) && isNoMergeBuild(data, merge)) { for (Branch branch : data.lastBuild.getRevision().getBranches()) { if (branch.getName().endsWith("/" + branchName)) { return build; } } } } return null; }
private String retrieveRevisionToBuild(PushHook hook, GitSCM gitSCM) throws NoRevisionToBuildException { if (inNoBranchDelete(hook)) { if (gitSCM != null && gitSCM.getRepositories().size() == 1) { String repositoryName = gitSCM.getRepositories().get(0).getName(); return hook.getRef().replaceFirst("^refs/heads", "remotes/" + repositoryName); } else { return hook.getAfter(); } } else { throw new NoRevisionToBuildException(); } }
public boolean revisionMatchesInterest(Revision r) { for (Branch br : r.getBranches()) { if (branchMatchesInterest(br)) return true; } return false; }
public void deleteBranch(String name) throws GitException { try { launchCommand("branch", "-D", name); } catch (GitException e) { throw new GitException("Could not delete branch " + name, e); } }
private void verifyGitRepository() { if (!hasGitRepo() || null == jGitDelegate) { throw new GitException(Messages.GitAPI_Repository_InvalidStateMsg()); } }
/** * Creates internal tag. * * @param git {@link IGitAPI}. * @param tagName tag name. * @param tagComment tag comment. */ private void createInternalTag(IGitAPI git, String tagName, String tagComment) { if (!getSkipTag()) { git.tag(tagName, tagComment); } }
public boolean isCreateAccountBasedOnEmail() { DescriptorImpl gitDescriptor = getDescriptor(); return (gitDescriptor != null && gitDescriptor.isCreateAccountBasedOnEmail()); }
/** * Get the URL of the first declared repository in the project configuration. * Use this as default source repository url. * * @return URIish the default value of the source repository url * @throws IllegalStateException Project does not use git scm. */ private URIish getSourceRepoURLDefault(Job<?, ?> job) { SCMTriggerItem item = SCMTriggerItem.SCMTriggerItems.asSCMTriggerItem(job); GitSCM gitSCM = getGitSCM(item); if (gitSCM == null) { LOGGER.log(Level.WARNING, "Could not find GitSCM for project. Project = {1}, next build = {2}", array(job.getName(), String.valueOf(job.getNextBuildNumber()))); throw new IllegalStateException("This project does not use git:" + job.getName()); } return getFirstRepoURL(gitSCM.getRepositories()); }
public boolean revisionMatchesInterest(Revision r) { for (Branch br : r.getBranches()) { if (branchMatchesInterest(br)) { return true; } } return false; }
public void add(String filePattern) throws GitException { try { launchCommand("add", filePattern); } catch (GitException e) { throw new GitException("Cannot add " + filePattern, e); } }
@Override protected RevisionParameterAction createRevisionParameter(PipelineHook hook, GitSCM gitSCM) throws NoRevisionToBuildException { return new RevisionParameterAction(retrieveRevisionToBuild(hook), retrieveUrIish(hook)); }
/** * Get the URL of the first declared repository in the project configuration. * Use this as default source repository url. * * @return URIish the default value of the source repository url * @throws IllegalStateException Project does not use git scm. */ private URIish getSourceRepoURLDefault(Job<?, ?> job) { SCMTriggerItem item = SCMTriggerItem.SCMTriggerItems.asSCMTriggerItem(job); GitSCM gitSCM = getGitSCM(item); if (gitSCM == null) { LOGGER.log(Level.WARNING, "Could not find GitSCM for project. Project = {1}, next build = {2}", array(job.getName(), String.valueOf(job.getNextBuildNumber()))); throw new IllegalStateException("This project does not use git:" + job.getName()); } return getFirstRepoURL(gitSCM.getRepositories()); }
public void branch(String name) throws GitException { try { launchCommand("branch", name); } catch (GitException e) { throw new GitException("Cannot create branch " + name, e); } }
@Override protected RevisionParameterAction createRevisionParameter(PushHook hook, GitSCM gitSCM) throws NoRevisionToBuildException { return new RevisionParameterAction(retrieveRevisionToBuild(hook, gitSCM), retrieveUrIish(hook)); }
@Override protected RevisionParameterAction createRevisionParameter(MergeRequestHook hook, GitSCM gitSCM) throws NoRevisionToBuildException { return new RevisionParameterAction(retrieveRevisionToBuild(hook), retrieveUrIish(hook)); }
private void handleMergeRequest(Job<?, ?> job, PushHook hook, boolean ciSkip, BranchFilter branchFilter, GitLabClient client, MergeRequest mergeRequest) { if (ciSkip && mergeRequest.getDescription() != null && mergeRequest.getDescription().contains("[ci-skip]")) { LOGGER.log(Level.INFO, "Skipping MR " + mergeRequest.getTitle() + " due to ci-skip."); return; } Boolean workInProgress = mergeRequest.getWorkInProgress(); if (skipWorkInProgressMergeRequest && workInProgress != null && workInProgress) { LOGGER.log(Level.INFO, "Skip WIP Merge Request #{0} ({1})", toArray(mergeRequest.getIid(), mergeRequest.getTitle())); return; } String sourceBranch = mergeRequest.getSourceBranch(); String targetBranch = mergeRequest.getTargetBranch(); if (targetBranch != null && branchFilter.isBranchAllowed(sourceBranch, targetBranch) && hook.getRef().equals("refs/heads/"+targetBranch) && sourceBranch != null) { LOGGER.log(Level.INFO, "{0} triggered for push to target branch of open merge request #{1}.", LoggerUtil.toArray(job.getFullName(), mergeRequest.getId())); Branch branch = client.getBranch(mergeRequest.getSourceProjectId().toString(), sourceBranch); Project project = client.getProject(mergeRequest.getSourceProjectId().toString()); String commit = branch.getCommit().getId(); setCommitStatusPendingIfNecessary(job, mergeRequest.getSourceProjectId(), commit, branch.getName()); List<Action> actions = Arrays.<Action>asList(new CauseAction(new GitLabWebHookCause(retrieveCauseData(hook, project, mergeRequest, branch))), new RevisionParameterAction(commit, retrieveUrIish(hook))); scheduleBuild(job, actions.toArray(new Action[actions.size()])); } }