private @Nonnull Cause trim(@Nonnull Cause c, int depth, Set<String> traversed) { if (!(c instanceof UpstreamCause)) { return c; } UpstreamCause uc = (UpstreamCause) c; List<Cause> cs = new ArrayList<Cause>(); if (depth > 0) { if (traversed.add(uc.upstreamUrl + uc.upstreamBuild)) { for (Cause c2 : uc.upstreamCauses) { cs.add(trim(c2, depth - 1, traversed)); } } } else if (traversed.size() < MAX_LEAF) { cs.add(new DeeplyNestedUpstreamCause()); } return new UpstreamCause(uc.upstreamProject, uc.upstreamBuild, uc.upstreamUrl, cs); }
@Override public void onCompleted(@Nonnull Run r, @Nonnull TaskListener listener) { Collection<ReverseBuildTrigger> triggers; synchronized (this) { if (upstream2Trigger == null) { upstream2Trigger = calculateCache(); } Collection<ReverseBuildTrigger> _triggers = upstream2Trigger.get(r.getParent()); if (_triggers == null || _triggers.isEmpty()) { return; } triggers = new ArrayList<>(_triggers); } for (final ReverseBuildTrigger trigger : triggers) { if (trigger.shouldTrigger(r, listener)) { if (!trigger.job.isBuildable()) { listener.getLogger().println(hudson.tasks.Messages.BuildTrigger_Disabled(ModelHyperlinkNote.encodeTo(trigger.job))); continue; } String name = ModelHyperlinkNote.encodeTo(trigger.job) + " #" + trigger.job.getNextBuildNumber(); if (ParameterizedJobMixIn.scheduleBuild2(trigger.job, -1, new CauseAction(new Cause.UpstreamCause(r))) != null) { listener.getLogger().println(hudson.tasks.Messages.BuildTrigger_Triggering(name)); } else { listener.getLogger().println(hudson.tasks.Messages.BuildTrigger_InQueue(name)); } } } } }
continue; boolean scheduled = p.scheduleBuild(p.getQuietPeriod(), new UpstreamCause((Run)build), buildActions.toArray(new Action[buildActions.size()])); if (Jenkins.getInstance().getItemByFullName(p.getFullName()) == p) { String name = ModelHyperlinkNote.encodeTo(p);
if(p.scheduleBuild(p.getQuietPeriod(), new UpstreamCause((Run)build), buildActions.toArray(new Action[buildActions.size()]))) { logger.println(Messages.BuildTrigger_Triggering(name));
if(p.scheduleBuild(p.getQuietPeriod(), new UpstreamCause((Run)build), buildActions.toArray(new Action[buildActions.size()]))) { logger.println(Messages.BuildTrigger_Triggering(name));
continue; boolean scheduled = p.scheduleBuild(p.getQuietPeriod(), new UpstreamCause((Run)build), buildActions.toArray(new Action[buildActions.size()])); if (Jenkins.getInstance().getItemByFullName(p.getFullName()) == p) { String name = ModelHyperlinkNote.encodeTo(p);
if (p.scheduleBuild(p.getQuietPeriod(), new UpstreamCause((Run) build), buildActions.toArray(new Action[buildActions.size()]))) { logger.println(Messages.BuildTrigger_Triggering(name));
updateProcessed(reviews); if (unprocessedReviews.isEmpty()) return true; Cause cause = new Cause.UpstreamCause((Run<?,?>)build); //TODO not sure what should be put here listener.getLogger().println("Setting cause to this build"); Jenkins jenkins = Jenkins.getInstance();
@Override public void onCompleted(@Nonnull Run r, @Nonnull TaskListener listener) { Collection<ReverseBuildTrigger> triggers; synchronized (this) { if (upstream2Trigger == null) { upstream2Trigger = calculateCache(); } Collection<ReverseBuildTrigger> _triggers = upstream2Trigger.get(r.getParent()); if (_triggers == null || _triggers.isEmpty()) { return; } triggers = new ArrayList<>(_triggers); } for (final ReverseBuildTrigger trigger : triggers) { if (trigger.shouldTrigger(r, listener)) { if (!trigger.job.isBuildable()) { listener.getLogger().println(hudson.tasks.Messages.BuildTrigger_Disabled(ModelHyperlinkNote.encodeTo(trigger.job))); continue; } String name = ModelHyperlinkNote.encodeTo(trigger.job) + " #" + trigger.job.getNextBuildNumber(); if (ParameterizedJobMixIn.scheduleBuild2(trigger.job, -1, new CauseAction(new Cause.UpstreamCause(r))) != null) { listener.getLogger().println(hudson.tasks.Messages.BuildTrigger_Triggering(name)); } else { listener.getLogger().println(hudson.tasks.Messages.BuildTrigger_InQueue(name)); } } } } }
/** * Create UpstreamCause that triggers a downstream build. * * If the upstream build is a promotion, return the UpstreamCause * as triggered by the target of the promotion. * * @param build an upstream build * @return UpstreamCause */ protected Cause createUpstreamCause(Run<?, ?> build) { if(Jenkins.getInstance().getPlugin("promoted-builds") != null) { // Test only when promoted-builds is installed. if(build instanceof Promotion) { Promotion promotion = (Promotion)build; // This cannot be done for PromotionCause#PromotionCause is in a package scope. // return new PromotionCause(build, promotion.getTarget()); return new UpstreamCause((Run<?,?>)promotion.getTarget()); } } return new UpstreamCause(build); }
@Override protected Future schedule(AbstractBuild<?, ?> build, AbstractProject project, List<Action> list) throws InterruptedException, IOException { if (block!=null) { while (true) { // if we fail to add the item to the queue, wait and retry. // it also means we have to force quiet period = 0, or else it'll never leave the queue Future f = project.scheduleBuild2(0, new UpstreamCause((Run) build), list.toArray(new Action[list.size()])); //when a project is disabled or the configuration is not yet saved f will always be null and we'ure caught in a loop, therefore we need to check for it if (f!=null || (f==null && !project.isBuildable())){ return f; } Thread.sleep(1000); } } else { return super.schedule(build,project,list); } }
private @Nonnull Cause trim(@Nonnull Cause c, int depth, Set<String> traversed) { if (!(c instanceof UpstreamCause)) { return c; } UpstreamCause uc = (UpstreamCause) c; List<Cause> cs = new ArrayList<Cause>(); if (depth > 0) { if (traversed.add(uc.upstreamUrl + uc.upstreamBuild)) { for (Cause c2 : uc.upstreamCauses) { cs.add(trim(c2, depth - 1, traversed)); } } } else if (traversed.size() < MAX_LEAF) { cs.add(new DeeplyNestedUpstreamCause()); } return new UpstreamCause(uc.upstreamProject, uc.upstreamBuild, uc.upstreamUrl, cs); }
/** Function to start schedule a single configuration * * This function schedule a build of a configuration passing all of the Matrixchild actions * that are present in the parent build. * * @param exec Matrix build that is the parent of the configuration * @param c Configuration to schedule */ private void scheduleConfigurationBuild(MatrixBuildExecution exec, MatrixConfiguration c) { MatrixBuild build = exec.getBuild(); exec.getListener().getLogger().println(Messages.MatrixBuild_Triggering(ModelHyperlinkNote.encodeTo(c))); // filter the parent actions for those that can be passed to the individual jobs. List<Action> childActions = new ArrayList<Action>(build.getActions(MatrixChildAction.class)); childActions.addAll(build.getActions(ParametersAction.class)); // used to implement MatrixChildAction c.scheduleBuild(childActions, new UpstreamCause((Run)build)); }
private void scheduleConfigurationBuild(PrintStream logger, MatrixConfiguration c) { logger.println(Messages.MatrixBuild_Triggering(c.getDisplayName())); c.scheduleBuild(getAction(ParametersAction.class), new UpstreamCause(MatrixBuild.this)); }
private void scheduleConfigurationBuild(PrintStream logger, MatrixConfiguration c) { logger.println(Messages.MatrixBuild_Triggering(c.getDisplayName())); c.scheduleBuild(getAction(ParametersAction.class), new UpstreamCause(MatrixBuild.this)); }
protected Future schedule(AbstractBuild<?, ?> build, AbstractProject project, List<Action> list) throws InterruptedException, IOException { return project.scheduleBuild2(project.getQuietPeriod(), new UpstreamCause((Run) build), list.toArray(new Action[list.size()])); }
private void scheduleConfigurationBuild(PrintStream logger, MatrixConfiguration c) { logger.println(Messages.MatrixBuild_Triggering(c.getDisplayName())); c.scheduleBuild(getAction(ParametersAction.class), new UpstreamCause(MatrixBuild.this)); }
private void scheduleConfigurationBuild(PrintStream logger, MatrixConfiguration c) { logger.println(Messages.MatrixBuild_Triggering(c.getDisplayName())); c.scheduleBuild(getAction(ParametersAction.class), new UpstreamCause(MatrixBuild.this)); }
@Test public void getUpstreamRunIfAvailable() throws Exception { FreeStyleBuild build = buildWithConduit(getFetchDiffResponse(), null, null, true); FreeStyleBuild upstream = buildWithConduit(getFetchDiffResponse(), null, null, true); assertNull(PhabricatorBuildWrapper.getUpstreamRun(build)); List<Cause> causes = build.getAction(CauseAction.class).getCauses(); ArrayList<Cause> newCauses = new ArrayList<Cause>(causes); newCauses.add((new Cause.UpstreamCause(upstream))); build.replaceAction(new CauseAction(newCauses)); assertEquals(upstream, PhabricatorBuildWrapper.getUpstreamRun(build)); }
continue; boolean scheduled = pj.scheduleBuild(pj.getQuietPeriod(), new UpstreamCause((Run) build)); if (Jenkins.getInstance().getItemByFullName(downstream.getFullName()) == downstream) { String name = ModelHyperlinkNote.encodeTo(downstream);