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 void incomingMessageThread() throws FileNotFoundException, IOException { new Thread() { public void run() { BuildData a = new BuildData(); for(int i = 0; i<100; i++) { a.parseDataFile("_"+i+"/outgoingMessages"); } } }.start(); }
addGitLabBranchBuild(result, getBuildRevision(build), buildDatas.get(0).getRemoteUrls(), environment, gitLabClient); } else { final SCMRevisionAction scmRevisionAction = build.getAction(SCMRevisionAction.class); for (final Entry<String, Build> buildByBranchName : buildData.getBuildsByBranchName().entrySet()) { if (buildByBranchName.getValue().getSHA1().equals(ObjectId.fromString(scmRevisionHash))) { addGitLabBranchBuild(result, scmRevisionHash, buildData.getRemoteUrls(), environment, gitLabClient);
GitUtils utils = new GitUtils(listener, git); List<Revision> branchRevs = new ArrayList<>(utils.getAllBranchRevisions()); List<BranchSpec> specifiedBranches = gitSCM.getBranches(); for (Iterator<Branch> j = revision.getBranches().iterator(); j.hasNext(); ) { Branch branch = j.next(); if (spec.matches(branch.getName(), env) || HEAD.matches(branch.getName(), env)) { j.remove(); break; if (revision.getBranches().isEmpty()) { i.remove(); if (buildData.hasBeenBuilt(r.getSha1())) { i.remove(); if (!isPollCall && branchRevs.isEmpty() && buildData.getLastBuiltRevision() != null) { listener.getLogger().println(Messages.BuildChooser_BuildingLastRevision()); return Collections.singletonList(buildData.getLastBuiltRevision());
final String gitExe = getGitExe(build.getBuiltOn(), listener); final BuildData buildData = getBuildData(build.getPreviousBuild(), true); String confName = getGitConfigNameToUse(); if (StringUtils.isNotBlank(confName)) { environment.put(GitConstants.GIT_COMMITTER_NAME_ENV_VAR, confName); BuildData parentBuildData = parentBuild.getAction(BuildData.class); if (parentBuildData != null) { tempParentLastBuiltRev = parentBuildData.getLastBuiltRevision(); environment.put(GIT_COMMIT, revToBuild.getSha1String()); if (mergeOptions.doMerge() && !revToBuild.containsBranchName(mergeOptions.getRemoteBranchName())) { buildConfig = getMergedBuildConfig(listener, workingDirectory, buildNumber, gitExe, buildData, environment, paramLocalBranch, revToBuild, internalTagName, internalTagComment);
if (isPollCall && data.hasBeenBuilt(sha1)) { verbose(listener, "{0} has already been built", sha1); return emptyList(); Revision revision = new Revision(sha1); revision.getBranches().add(new Branch(singleBranch, sha1)); return Collections.singletonList(revision);
public void buildEnvironment(Run<?, ?> build, java.util.Map<String, String> env) { Revision rev = fixNull(getBuildData(build)).getLastBuiltRevision(); if (rev!=null) { Branch branch = Iterables.getFirst(rev.getBranches(), null); if (branch!=null && branch.getName()!=null) { String remoteBranchName = getBranchName(branch); env.put(GIT_BRANCH, remoteBranchName); String sha1 = fixEmpty(rev.getSha1String()); if (sha1 != null && !sha1.isEmpty()) { env.put(GIT_COMMIT, sha1);
listener.getLogger().println("Using strategy: " + buildChooser.getDisplayName()); final FilePath workingDirectory = workingDirectory(workspace); final String gitExe = getGitExe(build.getBuiltOn(), listener); final String internalTagName = new StringBuilder() .append(GitConstants.INTERNAL_TAG_NAME_PREFIX) final BuildData buildData = getBuildData(build.getPreviousBuild(), true); BuildData parentBuildData = parentBuild.getAction(BuildData.class); if (parentBuildData != null) { tempParentLastBuiltRev = parentBuildData.getLastBuiltRevision(); environment.put(GIT_COMMIT, revToBuild.getSha1String()); if (mergeOptions.doMerge() && !revToBuild.containsBranchName(mergeOptions.getRemoteBranchName())) { buildConfig = getMergedBuildConfig(listener, workingDirectory, buildNumber, gitExe, buildData, environment, paramLocalBranch, revToBuild, internalTagName, internalTagComment);
@Override public Revision decorateRevisionToBuild(GitSCM scm, Run<?, ?> build, GitClient git, TaskListener listener, Revision marked, Revision rev) throws IOException, InterruptedException { String remoteBranchRef = GitSCM.getParameterString(options.getRef(), build.getEnvironment(listener)); if (rev.containsBranchName(remoteBranchRef)) return rev; String paramLocalBranch = scm.getParamLocalBranch(build, listener); CheckoutCommand checkoutCommand = git.checkout().branch(paramLocalBranch).ref(remoteBranchRef).deleteBranchIfExist(true); for (GitSCMExtension ext : scm.getExtensions()) ext.decorateCheckoutCommand(scm, build, git, listener, checkoutCommand); checkoutCommand.execute(); MergeCommand cmd = git.merge().setRevisionToMerge(rev.getSha1()); for (GitSCMExtension ext : scm.getExtensions()) ext.decorateMergeCommand(scm, build, git, listener, cmd); checkoutCommand = git.checkout().branch(paramLocalBranch).ref(rev.getSha1String()).deleteBranchIfExist(true); for (GitSCMExtension ext : scm.getExtensions()) ext.decorateCheckoutCommand(scm, build, git, listener, checkoutCommand); BuildData bd = scm.getBuildData(build); if(bd != null){ bd.saveBuild(new Build(marked,rev, build.getNumber(), FAILURE)); } else { listener.getLogger().println("Was not possible to get build data"); mergeRevision.getBranches().add(new Branch(remoteBranchRef, target)); return mergeRevision;
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); } } }
@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())); } }
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; }
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); } } }
@Override public Build prevBuildForChangelog(String singleBranch, BuildData data, GitClient git, BuildChooserContext context) throws InterruptedException, IOException { if (data != null) { ObjectId sha1 = git.revParse("FETCH_HEAD"); // Now we cheat and add the parent as the last build on the branch, so we can // get the changelog working properly-ish. ObjectId parentSha1 = getFirstParent(sha1, git); Revision parentRev = new Revision(parentSha1); parentRev.getBranches().add(new Branch(singleBranch, parentSha1)); int prevBuildNum = 0; Result r = null; Build lastBuild = data.getLastBuildOfBranch(singleBranch); if (lastBuild != null) { prevBuildNum = lastBuild.getBuildNumber(); r = lastBuild.getBuildResult(); } return new Build(parentRev, prevBuildNum, r); } else { //Hmm no sure what to do here, but the git plugin can handle us returning null here return null; } }
Collection<Revision> candidates = Collections.EMPTY_LIST; final BuildChooserContext context = new BuildChooserContextImpl(build.getParent(), build, environment); getBuildChooser().prepareWorkingTree(git, listener, context); MatrixBuild parentBuild = ((MatrixRun) build).getParentBuild(); if (parentBuild != null) { BuildData parentBuildData = getBuildData(parentBuild); if (parentBuildData != null) { Build lastBuild = parentBuildData.lastBuild; if (rpa.canOriginateFrom(this.getRepositories())) { candidates = Collections.singleton(rpa.toRevision(git)); } else { buildData.saveBuild(revToBuild); if (buildData.getBuildsByBranchName().size() >= 100) { log.println("JENKINS-19022: warning: possible memory leak due to Git plugin usage; see: https://wiki.jenkins-ci.org/display/JENKINS/Remove+Git+Plugin+BuildsByBranch+BuildData");
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; }
/** * Like {@link #getBuildData(Run)}, but copy the data into a new object, * which is used as the first step for updating the data for the next build. * @param build run whose BuildData is returned * @return copy of build data for build */ public BuildData copyBuildData(Run build) { BuildData base = getBuildData(build); if (base==null) return new BuildData(getScmName(), getUserRemoteConfigs()); else { BuildData buildData = base.clone(); buildData.setScmName(getScmName()); return buildData; } }
@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 || lb.getBranches().isEmpty()) return ""; if (all) { StringBuilder buf = new StringBuilder(); for (Branch b : lb.getBranches()) { if (buf.length()>0) buf.append(','); buf.append(format(b)); } return buf.toString(); } else { return format(lb.getBranches().iterator().next()); } }