Refine search
@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 String getEntryDescription(FeedItem item) { StringBuilder buf = new StringBuilder(); for (String path : item.e.getAffectedPaths()) buf.append(path).append('\n'); return buf.toString(); }
/** * Gets the text fully marked up by {@link ChangeLogAnnotator}. */ public String getMsgAnnotated() { MarkupText markup = new MarkupText(getMsg()); for (ChangeLogAnnotator a : ChangeLogAnnotator.all()) try { a.annotate(parent.run, this, markup); } catch(Exception e) { LOGGER.info("ChangeLogAnnotator " + a.toString() + " failed to annotate message '" + getMsg() + "'; " + e.getMessage()); } catch(Error e) { LOGGER.severe("ChangeLogAnnotator " + a.toString() + " failed to annotate message '" + getMsg() + "'; " + e.getMessage()); } return markup.toString(false); }
public static List<Change> getChanges(AbstractBuild<?, ?> build) { RepositoryBrowser repositoryBrowser = build.getProject().getScm().getBrowser(); List<Change> result = new ArrayList<>(); for (ChangeLogSet.Entry entry : build.getChangeSet()) { UserInfo user = UserInfo.getUser(entry.getAuthor()); String changeLink = null; if (repositoryBrowser != null) { try { @SuppressWarnings("unchecked") URL link = repositoryBrowser.getChangeSetLink(entry); if (link != null) { changeLink = link.toExternalForm(); } } catch (IOException e) { LOG.log(Level.WARNING, "Could not get changeset link for: " + build.getProject().getFullDisplayName() + " " + build.getDisplayName(), e); } } result.add(new Change(user, entry.getMsgAnnotated(), entry.getCommitId(), changeLink)); } return result; }
def.setLightweight(false); p.setDefinition(def); WorkflowRun b = r.assertBuildStatusSuccess(p.scheduleBuild2(0)); r.assertLogContains("Cloning the remote Git repository", b); r.assertLogContains("version one", b); r.assertLogNotContains("Retrying after 10 seconds", b); sampleRepo.write("flow.groovy", "echo 'version two'"); assertEquals(1, changeSets.size()); ChangeLogSet<? extends ChangeLogSet.Entry> changeSet = changeSets.get(0); assertEquals(b, changeSet.getRun()); assertEquals("git", changeSet.getKind()); Iterator<? extends ChangeLogSet.Entry> iterator = changeSet.iterator(); assertTrue(iterator.hasNext()); ChangeLogSet.Entry entry = iterator.next(); assertEquals("[flow.groovy]", entry.getAffectedPaths().toString()); assertFalse(iterator.hasNext());
private static List<String> getScmComments(boolean wikiStyle, AbstractBuild<?, ?> build, JiraIssue jiraIssue) if (build.getProject().getScm() != null) { repoBrowser = build.getProject().getScm().getEffectiveBrowser(); for (Entry change : build.getChangeSet()) { if (jiraIssue != null && !StringUtils.contains( change.getMsg(), jiraIssue.id )) { continue; String uid = change.getAuthor().getId(); URL url = repoBrowser == null ? null : repoBrowser.getChangeSetLink( change ); StringBuilder scmChange = new StringBuilder(); for (AffectedFile affectedFile : change.getAffectedFiles()) { scmChange.append( "* " ).append( affectedFile.getPath() ).append( "\n" ); for (String affectedPath : change.getAffectedPaths()) { scmChange.append( "* " ).append( affectedPath ).append( "\n" );
private static Set<User> getCommitters(AbstractBuild<?, ?> build) { Set<User> committers = new HashSet<User>(); ChangeLogSet<? extends Entry> changeSet = build.getChangeSet(); for (Entry entry : changeSet) { committers.add(entry.getAuthor()); } return committers; }
public EmbedDescription(AbstractBuild build, JenkinsLocationConfiguration globalConfig, String prefix, boolean enableArtifactsList) { String artifactsURL = globalConfig.getUrl() + build.getUrl() + "artifact/"; this.prefix = prefix; this.changesList.add("\n**Changes:**\n"); if (enableArtifactsList) this.artifactsList.add("\n**Artifacts:**\n"); Object[] changes = build.getChangeSet().getItems(); for (Object o : changes) { ChangeLogSet.Entry entry = (ChangeLogSet.Entry) o; String commitID = (entry.getParent().getKind().equalsIgnoreCase("svn")) ? entry.getCommitId() : entry.getCommitId().substring(0, 6); this.changesList.add(" - ``" + commitID + "`` *" + entry.getMsg() + " - " + entry.getAuthor().getFullName() + "*\n"); List<Run.Artifact> artifacts = build.getArtifacts(); if (artifacts.size() == 0) { this.artifactsList.add("\n*No artifacts saved.*");
@Override public String buildCompletionMessage(IMPublisher publisher, AbstractBuild<?, ?> build, BuildListener listener) throws IOException, InterruptedException { StringBuilder sb = new StringBuilder(super.buildCompletionMessage(publisher,build,listener)); if (!build.getChangeSet().isEmptySet()) { boolean hasManyChangeSets = build.getChangeSet().getItems().length > 1; for (Entry entry : build.getChangeSet()) { sb.append("\n"); if (hasManyChangeSets) { sb.append("* "); } sb.append(entry.getAuthor()).append(": ").append(entry.getMsg()); } } return sb.toString(); }
mp.getSourcesList().add(new BranchSource(new GitSCMSource(null, sampleRepo.toString(), "", "*", "", false))); WorkflowJob p = WorkflowMultiBranchProjectTest.scheduleAndFindBranchProject(mp, "master"); j.waitUntilNoActivity(); j.assertBuildStatus(Result.FAILURE, j.waitForCompletion(failing)); assertEquals(1, failing.getChangeSets().size()); ChangeLogSet<? extends ChangeLogSet.Entry> failingChanges = failing.getChangeSets().get(0); assertEquals(1, failingChanges.getItems().length); ChangeLogSet.Entry failingEntry = failingChanges.iterator().next(); assertNotNull(failingEntry); assertEquals(1, b3.getChangeSets().size()); ChangeLogSet<? extends ChangeLogSet.Entry> b3Changes = failing.getChangeSets().get(0); assertEquals(1, b3Changes.getItems().length); ChangeLogSet.Entry b3Entry = b3Changes.iterator().next(); assertNotNull(b3Entry); assertEquals(failingEntry.getCommitId(), b3Entry.getCommitId());
new UpdateUpdater(), null, "/z.*", "", "", "", "", false, shouldFilterLog, null); FreeStyleProject p = r.createFreeStyleProject(String.format("testFilterChangelog-%s", shouldFilterLog)); p.setScm(scm); r.assertBuildStatusSuccess(p.scheduleBuild2(0).get()); assertFalse(p.poll(r.createTaskListener()).hasChanges()); boolean ignored = true, included = false; @SuppressWarnings("unchecked") ChangeLogSet<Entry> cls = build.getChangeSet(); for (Entry e : cls) { Collection<String> paths = e.getAffectedPaths(); if (paths.contains("/z/q")) ignored = false;
private void setContent() { if (build.getChangeSet().getItems().length == 0) { message.setContent(this.getResultString()); } else { StringBuilder changes = new StringBuilder(); for (Iterator<? extends ChangeLogSet.Entry> i = build.getChangeSet().iterator(); i.hasNext(); ) { ChangeLogSet.Entry change = i.next(); changes.append("\n"); changes.append(change.getMsg()); changes.append(" - "); changes.append(change.getAuthor()); } message.setContent(String.format("%s%n%s", this.getResultString(), changes.toString())); } }
String getChanges(AbstractBuild r) { if (!r.hasChangeSetComputed()) { logger.info("No change set computed..."); return null; } ChangeLogSet changeSet = r.getChangeSet(); List<Entry> entries = new LinkedList<Entry>(); Set<AffectedFile> files = new HashSet<AffectedFile>(); for (Object o : changeSet.getItems()) { Entry entry = (Entry) o; logger.info("Entry " + o); entries.add(entry); files.addAll(entry.getAffectedFiles()); } if (entries.isEmpty()) { logger.info("Empty change..."); return null; } Set<String> authors = new HashSet<String>(); for (Entry entry : entries) { authors.add(entry.getAuthor().getDisplayName()); } MessageBuilder message = new MessageBuilder(notifier, r); message.append("Started by changes from "); message.append(StringUtils.join(authors, ", ")); message.append(" ("); message.append(files.size()); message.append(" file(s) changed)"); return message.appendOpenLink().toString(); }
/** * Returns a set of paths in the workspace that was * affected by this change. * <p> * Noted: since this is a new interface, some of the SCMs may not have * implemented this interface. The default implementation for this * interface is throw UnsupportedOperationException * <p> * It doesn't throw NoSuchMethodException because I rather to throw a * runtime exception * * @return AffectedFile never null. * @since 1.309 */ public Collection<? extends AffectedFile> getAffectedFiles() { String scm = "this SCM"; ChangeLogSet parent = getParent(); if ( null != parent ) { String kind = parent.getKind(); if ( null != kind && kind.trim().length() > 0 ) scm = kind; } throw new UnsupportedOperationException("getAffectedFiles() is not implemented by " + scm); }
private void assertChangeSetPaths(List<? extends Set<String>> expectedChangeSetPaths, AbstractBuild<?, ?> build) throws IOException { ChangeLogSet<? extends Entry> actualChangeLogSet = build.getChangeSet(); List<Set<String>> actualChangeSetPaths = new LinkedList<Set<String>>(); for (Entry entry : actualChangeLogSet) { actualChangeSetPaths.add(new LinkedHashSet<String>(entry .getAffectedPaths())); } assertEquals(build.getLog(99).toString(), expectedChangeSetPaths, actualChangeSetPaths); }
@Bug(3602) @Test public void subdirectoryCheckout() throws Exception { FreeStyleProject p = j.createFreeStyleProject(); p.setScm(new MercurialSCM(hgInstallation(), repo.getPath(), null, null, "repo", null, false)); m.hg(repo, "init"); m.touchAndCommit(repo, "f1"); m.buildAndCheck(p, "repo/f1"); m.touchAndCommit(repo, "f2"); m.buildAndCheck(p, "repo/f2"); m.touchAndCommit(repo, "f3"); Iterator<? extends ChangeLogSet.Entry> it = p.scheduleBuild2(0).get() .getChangeSet().iterator(); assertTrue(it.hasNext()); ChangeLogSet.Entry entry = it.next(); assertEquals(Collections.singleton("f3"), new HashSet<String>(entry.getAffectedPaths())); assertFalse(it.hasNext()); }
main.svnkit("propset", "svn:externals", "ext svn://localhost:" + extPort + "/prj/trunk\n", main.wc()); main.svnkit("commit", "--message=externals", main.wc()); FreeStyleProject p = r.createFreeStyleProject("p"); SystemCredentialsProvider.getInstance().setDomainCredentialsMap(Collections.singletonMap(Domain.global(), Arrays.<Credentials>asList( new UsernamePasswordCredentialsImpl(CredentialsScope.GLOBAL, "main-creds", null, "alice", "alice"), null, null, null, null, null, null, null, false, false, // WTF was all that? Collections.singletonList(new SubversionSCM.AdditionalCredentials("<svn://localhost:" + extPort + "> " + ext.uuid(), "ext-creds")))); FreeStyleBuild b = r.buildAndAssertSuccess(p); assertEquals("", b.getWorkspace().child("file").readToString()); assertEquals("", b.getWorkspace().child("ext/file").readToString()); ext.write("file", "extrev"); ext.svnkit("commit", "--message=extrev", ext.wc()); b = r.buildAndAssertSuccess(p); assertEquals("mainrev", b.getWorkspace().child("file").readToString()); assertEquals("extrev", b.getWorkspace().child("ext/file").readToString()); Set<String> messages = new TreeSet<>(); for (ChangeLogSet.Entry entry : b.getChangeSet()) { messages.add(entry.getMsg());
@Bug(16332) @Test public void parseAddressFromChangeLog() throws Exception { File changelogXml = tmp.newFile("changelog.xml"); PrintWriter pw = new PrintWriter(changelogXml, "UTF-8"); try { pw.println("<?xml version='1.0' encoding='UTF-8'?>"); pw.println("<changesets>"); pw.println("<changeset author='joe.schmo <joe.schmo@example.com>'/>"); pw.println("</changesets>"); pw.flush(); } finally { pw.close(); } ChangeLogParser clp = new MercurialChangeLogParser(null); ChangeLogSet<? extends ChangeLogSet.Entry> cls = clp.parse(null, null, changelogXml); Iterator<? extends ChangeLogSet.Entry> it = cls.iterator(); assertTrue(it.hasNext()); ChangeLogSet.Entry entry = it.next(); assertFalse(it.hasNext()); User author = entry.getAuthor(); assertEquals("joe.schmo _joe.schmo@example.com_", author.getId()); assertEquals("joe.schmo <joe.schmo@example.com>", author.getFullName()); }
/** * Message escaped for HTML */ public String getMsgEscaped() { return Util.escape(getMsg()); }