@Override @Nonnull public Set<User> calculateCulprits() { Set<User> c = RunWithSCM.super.calculateCulprits(); AbstractBuild<P,R> p = getPreviousCompletedBuild(); if (upstreamCulprits) { // If we have dependencies since the last successful build, add their authors to our list if (p != null && p.getPreviousNotFailedBuild() != null) { Map<AbstractProject, AbstractBuild.DependencyChange> depmap = p.getDependencyChanges(p.getPreviousSuccessfulBuild()); for (AbstractBuild.DependencyChange dep : depmap.values()) { for (AbstractBuild<?, ?> b : dep.getBuilds()) { for (ChangeLogSet.Entry entry : b.getChangeSet()) { c.add(entry.getAuthor()); } } } } } return c; }
public static Map<AbstractProject, DependencyChange> getDependencyChanges(Run<?, ?> run) { if (run instanceof AbstractBuild) { Run<?, ?> previousBuild = run.getPreviousBuild(); if (previousBuild instanceof AbstractBuild) { return ((AbstractBuild) run).getDependencyChanges((AbstractBuild) previousBuild); } } // jenkins workflow plugin etc. return Maps.newHashMap(); }
@Override @Nonnull public Set<User> calculateCulprits() { Set<User> c = RunWithSCM.super.calculateCulprits(); AbstractBuild<P,R> p = getPreviousCompletedBuild(); if (upstreamCulprits) { // If we have dependencies since the last successful build, add their authors to our list if (p != null && p.getPreviousNotFailedBuild() != null) { Map<AbstractProject, AbstractBuild.DependencyChange> depmap = p.getDependencyChanges(p.getPreviousSuccessfulBuild()); for (AbstractBuild.DependencyChange dep : depmap.values()) { for (AbstractBuild<?, ?> b : dep.getBuilds()) { for (ChangeLogSet.Entry entry : b.getChangeSet()) { c.add(entry.getAuthor()); } } } } } return c; }
/** * Finds the strings that match JIRA issue ID patterns. * * This method returns all likely candidates and doesn't check * if such ID actually exists or not. We don't want to use * {@link JiraSite#existsIssue(String)} here so that new projects * in JIRA can be detected. */ private static Set<String> findIssueIdsRecursive(AbstractBuild<?,?> build, Pattern pattern, BuildListener listener) { Set<String> ids = new HashSet<String>(); // first, issues that were carried forward. Run<?, ?> prev = build.getPreviousBuild(); if(prev!=null) { JiraCarryOverAction a = prev.getAction(JiraCarryOverAction.class); if(a!=null) ids.addAll(a.getIDs()); } // then issues in this build findIssues(build, ids, pattern, listener); // check for issues fixed in dependencies for( DependencyChange depc : build.getDependencyChanges(build.getPreviousBuild()).values()) for(AbstractBuild<?, ?> b : depc.getBuilds()) findIssues(b,ids, pattern, listener); return ids; }
Map <AbstractProject,AbstractBuild.DependencyChange> depmap = getDependencyChanges(previousBuild); for (AbstractBuild.DependencyChange dep : depmap.values()) { for (AbstractBuild<?,?> b : dep.getBuilds()) {
Map <AbstractProject,AbstractBuild.DependencyChange> depmap = getDependencyChanges(previousBuild); for (AbstractBuild.DependencyChange dep : depmap.values()) { for (AbstractBuild<?,?> b : dep.getBuilds()) {
Map<AbstractProject, AbstractBuild.DependencyChange> depmap = getDependencyChanges(previousBuild); for (AbstractBuild.DependencyChange dep : depmap.values()) { for (AbstractBuild<?, ?> b : dep.getBuilds()) {
Map <AbstractProject,AbstractBuild.DependencyChange> depmap = getDependencyChanges(previousBuild); for (AbstractBuild.DependencyChange dep : depmap.values()) { for (AbstractBuild<?,?> b : dep.getBuilds()) {