/** * Ordering based on build numbers. * If numbers are equal order based on names of parent projects. */ public int compareTo(@Nonnull RunT that) { final int res = this.number - that.number; if (res == 0) return this.getParent().getFullName().compareTo(that.getParent().getFullName()); return res; }
@Override public ACL getACL() { // for now, don't maintain ACL per run, and do it at project level return getParent().getACL(); }
/** * The entry unique ID needs to be tied to a project, so that * new builds will replace the old result. */ @Override public String getEntryID(Run e) { // can't use a meaningful year field unless we remember when the job was created. return "tag:hudson.dev.java.net,2008:"+e.getParent().getAbsoluteUrl(); } };
@SuppressWarnings("unchecked") // seems this is too clever for Java's type system? private void removeRunFromParent() { getParent().removeRun((RunT)this); }
@Override public void onAttached(Run<?, ?> r) { ParametersDefinitionProperty p = r.getParent().getProperty(ParametersDefinitionProperty.class); if (p != null) { this.parameterDefinitionNames = new ArrayList<>(p.getParameterDefinitionNames()); } else { this.parameterDefinitionNames = Collections.emptyList(); } this.run = r; }
@Override @Restricted(NoExternalUse.class) public Object getTarget() { if (!SKIP_PERMISSION_CHECK) { // This is a bit weird, but while the Run's PermissionScope does not have READ, delegate to the parent if (!getParent().hasPermission(Item.DISCOVER)) { return null; } getParent().checkPermission(Item.READ); } return this; }
/** * Returns true if {@link BuildPtr} points to the given run. */ public boolean is(Run r) { return r.getNumber()==number && r.getParent().getFullName().equals(name); }
public UpstreamCause(Run<?, ?> up) { upstreamBuild = up.getNumber(); upstreamProject = up.getParent().getFullName(); upstreamUrl = up.getParent().getUrl(); upstreamCauses = new ArrayList<Cause>(); Set<String> traversed = new HashSet<String>(); for (Cause c : up.getCauses()) { upstreamCauses.add(trim(c, MAX_DEPTH, traversed)); } }
/** * Returns true if this cause points to the specified build. */ public boolean pointsTo(Run<?,?> r) { return r.getNumber()==upstreamBuild && pointsTo(r.getParent()); }
@Override public String toString(Object object) { Run<?,?> run = (Run<?,?>) object; return run.getParent().getFullName() + "#" + run.getNumber(); } });
/** * Builds up the environment variable map that's sufficient to identify a process * as ours. This is used to kill run-away processes via {@link ProcessTree#killAll(Map)}. */ public @Nonnull final EnvVars getCharacteristicEnvVars() { EnvVars env = getParent().getCharacteristicEnvVars(); env.put("BUILD_NUMBER",String.valueOf(number)); env.put("BUILD_ID",getId()); env.put("BUILD_TAG","jenkins-"+getParent().getFullName().replace('/', '-')+"-"+number); return env; }
public BuildPtr(Run run) { this( run.getParent().getFullName(), run.getNumber() ); }
private long getNextBuildNumber(@Nonnull Object entry) { if (entry instanceof Queue.Item) { Queue.Task task = ((Queue.Item) entry).task; if (task instanceof Job) { return ((Job) task).getNextBuildNumber(); } } else if (entry instanceof Run) { return ((Run) entry).getParent().getNextBuildNumber(); } // TODO maybe this should be an error? return HistoryPageEntry.getEntryId(entry) + 1; }
public String getEntryID(Run entry) { return "tag:" + "hudson.dev.java.net," + entry.getTimestamp().get(Calendar.YEAR) + ":" + entry.getParent().getFullName()+':'+entry.getId(); }
/** * Adds a usage reference to the build. * @param b {@link Run} to be referenced in {@link #usages} * @since 1.577 */ public synchronized void addFor(@Nonnull Run b) throws IOException { add(b.getParent().getFullName(), b.getNumber()); }
public void doRssLatest(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { final List<Run> lastBuilds = new ArrayList<>(); for (AbstractProject<?, ?> p : Jenkins.get().allItems(AbstractProject.class)) { for (AbstractBuild<?, ?> b = p.getLastBuild(); b != null; b = b.getPreviousBuild()) { if (relatedTo(b)) { lastBuilds.add(b); break; } } } // historically these have been reported sorted by project name, we switched to the lazy iteration // so we only have to sort the sublist of runs rather than the full list of irrelevant projects lastBuilds.sort((o1, o2) -> Items.BY_FULL_NAME.compare(o1.getParent(), o2.getParent())); rss(req, rsp, " latest build", RunList.fromRuns(lastBuilds), Run.FEED_ADAPTER_LATEST); }
/** * If any of the peephole permalink points to the build to be deleted, update it to point to the new location. */ @Override public void onDeleted(Run run) { Job<?, ?> j = run.getParent(); for (PeepholePermalink pp : Util.filter(j.getPermalinks(), PeepholePermalink.class)) { if (pp.resolve(j)==run) { Run<?,?> r = pp.find(run.getPreviousBuild()); if (LOGGER.isLoggable(Level.FINE)) LOGGER.fine("Updating "+pp.getPermalinkFile(j).getName()+" permalink from deleted "+run.getNumber()+" to "+(r == null ? -1 : r.getNumber())); pp.updateCache(j,r); } } }
/** * See if the new build matches any of the peephole permalink. */ @Override public void onCompleted(Run<?,?> run, @Nonnull TaskListener listener) { Job<?, ?> j = run.getParent(); for (PeepholePermalink pp : Util.filter(j.getPermalinks(), PeepholePermalink.class)) { if (pp.apply(run)) { Run<?, ?> cur = pp.resolve(j); if (cur==null || cur.getNumber()<run.getNumber()) { if (LOGGER.isLoggable(Level.FINE)) LOGGER.fine("Updating "+pp.getPermalinkFile(j).getName()+" permalink to completed "+run.getNumber()); pp.updateCache(j,run); } } } } }
private static SaveableReference referTo(Saveable s) { if (s instanceof Run) { Job parent = ((Run) s).getParent(); if (Jenkins.getInstance().getItemByFullName(parent.getFullName()) == parent) { return new RunSaveableReference((Run) s); } } return new SimpleSaveableReference(s); }
@Override protected void calculate(Run<?,?> build, JSONObject element) { BallColor iconColor = build.getIconColor(); element.put("iconColorOrdinal", iconColor.ordinal()); element.put("iconColorDescription", iconColor.getDescription()); element.put("url", build.getUrl()); element.put("buildStatusUrl", build.getBuildStatusUrl()); element.put("parentUrl", build.getParent().getUrl()); element.put("parentFullDisplayName", Functions.breakableString(Functions.escape(build.getParent().getFullDisplayName()))); element.put("displayName", build.getDisplayName()); element.put("timestampString", build.getTimestampString()); element.put("timestampString2", build.getTimestampString2()); element.put("timestampString3", Util.XS_DATETIME_FORMATTER.format(new Date(build.getStartTimeInMillis()))); Run.Summary buildStatusSummary = build.getBuildStatusSummary(); element.put("buildStatusSummaryWorse", buildStatusSummary.isWorse); element.put("buildStatusSummaryMessage", buildStatusSummary.message); }