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; }
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 RevisionParameterAction(Revision revision, boolean combineCommits) { this.revision = revision; this.commit = revision.getSha1String(); this.combineCommits = combineCommits; this.repoURL = null; }
public boolean isFor(String sha1) { if (revision!=null && revision.getSha1String().startsWith(sha1)) return true; return false; }
@Override public String evaluate(AbstractBuild<?, ?> context, TaskListener listener, String macroName) throws MacroEvaluationException, IOException, InterruptedException { BuildData data = context.getAction(BuildData.class); if (data == null) { return ""; // shall we report an error more explicitly? } Revision lb = data.getLastBuiltRevision(); if (lb==null) return ""; String s = lb.getSha1String(); return s.substring(0,Math.min(length,s.length())); } }
/** * Given a Revision, show it as if it were an entry from git whatchanged, so that it * can be parsed by GitChangeLogParser. * * @param r The Revision object * @return The git show output, in List form. * @throws GitException if errors were encountered running git show. */ public List<String> showRevision(Revision r) throws GitException { String revName = r.getSha1String(); String result = ""; if (revName != null) { result = launchCommand("show", "--no-abbrev", "--format=raw", "-M", "--raw", revName); } List<String> revShow = new ArrayList<String>(); if (result != null) { revShow = new ArrayList<String>(Arrays.asList(result.split("\\n"))); } return revShow; }
/** * Given a Revision, show it as if it were an entry from git whatchanged, so that it * can be parsed by GitChangeLogParser. * * @param r The Revision object * @return The git show output, in List form. * @throws GitException if errors were encountered running git show. */ public List<String> showRevision(Revision r) throws GitException { String revName = r.getSha1String(); String result = ""; if (revName != null) { result = launchCommand("show", "--no-abbrev", "--format=raw", "-M", "--raw", revName); } List<String> revShow = new ArrayList<String>(); if (result != null) { revShow = new ArrayList<String>(Arrays.asList(result.split("\\n"))); } return revShow; }
@Override public Action getAction(AbstractBuild<?, ?> build, TaskListener listener) { BuildData data = build.getAction(BuildData.class); if (data == null) { listener.getLogger().println("This project doesn't use Git as SCM. Can't pass the revision to downstream"); return null; } return new RevisionParameterAction(data.getLastBuiltRevision().getSha1String()); }
@Override public Action getAction(AbstractBuild<?, ?> build, TaskListener listener) { BuildData data = build.getAction(BuildData.class); if (data == null) { listener.getLogger().println("This project doesn't use Git as SCM. Can't pass the revision to downstream"); return null; } return new RevisionParameterAction(data.getLastBuiltRevision().getSha1String()); }
public static List<Vcs> extractVcsBuildData(Run build) { List<Vcs> result = new ArrayList<Vcs>(); List<BuildData> buildData = build.getActions(BuildData.class); if (buildData != null) { for (BuildData data : buildData) { String sha1 = data.getLastBuiltRevision().getSha1String(); Iterator<String> iterator = data.getRemoteUrls().iterator(); if (iterator.hasNext()) { result.add(new Vcs(iterator.next(), sha1)); } } } return result; }
public Map<String, URIish> getCommitRepoMap() throws Exception { List<RemoteConfig> repoList = this.gitScm.getRepositories(); if (repoList.size() != 1) { throw new Exception("None or multiple repos"); } HashMap<String, URIish> commitRepoMap = new HashMap<String, URIish>(); BuildData buildData = build.getAction(BuildData.class); if (buildData == null || buildData.getLastBuiltRevision() == null) { logger.warning("Build data could not be found"); } else { commitRepoMap.put(buildData.getLastBuiltRevision().getSha1String(), repoList.get(0).getURIs().get(0)); } return commitRepoMap; } }
public void buildEnvVars(AbstractBuild<?, ?> build, java.util.Map<String, String> env) { super.buildEnvVars(build, env); String branch = getSingleBranch(build); if (branch != null) { env.put(GIT_BRANCH, branch); } BuildData bd = fixNull(getBuildData(build, false)); if (bd != null && bd.getLastBuiltRevision() != null) { String commit = bd.getLastBuiltRevision().getSha1String(); if (commit != null) { env.put(GIT_COMMIT, commit); } } }
private void checkout(GitSCM scm, Run<?, ?> build, GitClient git, TaskListener listener, Revision rev) throws InterruptedException, IOException, GitException { CheckoutCommand checkoutCommand = git.checkout().ref(rev.getSha1String()); for (GitSCMExtension ext : scm.getExtensions()) { ext.decorateCheckoutCommand(scm, build, git, listener, checkoutCommand); } checkoutCommand.execute(); } }
private void checkout(GitSCM scm, Run<?, ?> build, GitClient git, TaskListener listener, Revision rev) throws InterruptedException, IOException, GitException { CheckoutCommand checkoutCommand = git.checkout().ref(rev.getSha1String()); for (GitSCMExtension ext : scm.getExtensions()) { ext.decorateCheckoutCommand(scm, build, git, listener, checkoutCommand); } checkoutCommand.execute(); } }
public void buildEnvVars(AbstractBuild<?, ?> build, Map<String, String> env) { super.buildEnvVars(build, env); GitUtils.buildBranchEnvVar(build, env, getRepositories(), getBranches()); BuildData bd = fixNull(getBuildData(build, false)); if (bd != null && bd.getLastBuiltRevision() != null) { String commit = bd.getLastBuiltRevision().getSha1String(); if (commit != null) { env.put(GIT_COMMIT, commit); } } }
private String getLastBuiltCommitOfBranch(Run<?, ?> build, Branch branch) { String prevCommit = null; if (build.getPreviousBuiltBuild() != null) { final Build lastBuildOfBranch = fixNull(getBuildData(build.getPreviousBuiltBuild())).getLastBuildOfBranch(branch.getName()); if (lastBuildOfBranch != null) { Revision previousRev = lastBuildOfBranch.getRevision(); if (previousRev != null) { prevCommit = previousRev.getSha1String(); } } } return prevCommit; }
private String getLastSuccessfulBuiltCommitOfBranch(Run<?, ?> build, Branch branch) { String prevCommit = null; if (build.getPreviousSuccessfulBuild() != null) { final Build lastSuccessfulBuildOfBranch = fixNull(getBuildData(build.getPreviousSuccessfulBuild())).getLastBuildOfBranch(branch.getName()); if (lastSuccessfulBuildOfBranch != null) { Revision previousRev = lastSuccessfulBuildOfBranch.getRevision(); if (previousRev != null) { prevCommit = previousRev.getSha1String(); } } } return prevCommit; }
@Override public Revision decorateRevisionToBuild(GitSCM scm, Run<?, ?> build, GitClient git, TaskListener listener, Revision marked, Revision rev) throws IOException, InterruptedException, GitException { listener.getLogger().println("Merging " + targetBranch.getName() + " commit " + targetBranch.getRevision().getHash() + " into merge-request head commit " + rev.getSha1String()); checkout(scm, build, git, listener, rev); try { git.setAuthor("Jenkins", /* could parse out of JenkinsLocationConfiguration.get().getAdminAddress() but seems overkill */"nobody@nowhere"); git.setCommitter("Jenkins", "nobody@nowhere"); MergeCommand cmd = git.merge().setRevisionToMerge(ObjectId.fromString(targetBranch.getRevision().getHash())); for (GitSCMExtension ext : scm.getExtensions()) { // By default we do a regular merge, allowing it to fast-forward. ext.decorateMergeCommand(scm, build, git, listener, cmd); } cmd.execute(); } catch (GitException e) { // Try to revert merge conflict markers. checkout(scm, build, git, listener, rev); throw e; } build.addAction(new MergeRecord(targetBranch.getRefSpec().destinationRef(targetBranch.getName()), targetBranch.getRevision().getHash())); // does not seem to be used, but just in case ObjectId mergeRev = git.revParse(Constants.HEAD); listener.getLogger().println("Merge succeeded, producing " + mergeRev.name()); return new Revision(mergeRev, rev.getBranches()); // note that this ensures Build.revision != Build.marked }
if (data.getLastBuiltRevision() != null && !data.getLastBuiltRevision().getSha1String().equals(c.getCommit())) { build.getActions().remove(data); break;