private Set<ModifiedFile> getAllFiles(List<Modification> modifications) { Set<ModifiedFile> allFiles = new HashSet<>(); for (Modification modification : modifications) { allFiles.addAll(modification.getModifiedFiles()); } return allFiles; } }
@Test public void shouldParseChangesWithLotsOfFilesWithoutError() throws Exception { final StringWriter writer = new StringWriter(); IOUtils.copy(new ClassPathResource("/BIG_P4_OUTPUT.txt").getInputStream(), writer, Charset.defaultCharset()); String output = writer.toString(); Modification modification = parser.modificationFromDescription(output, new ConsoleResult(0, new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>())); assertThat(modification.getModifiedFiles().size(), is(1304)); assertThat(modification.getModifiedFiles().get(0).getFileName(), is("Internal Projects/ABC/Customers3/ABC/RIP/SomeProject/data/main/config/lib/java/AdvJDBCColumnHandler.jar")); }
@Test public void shouldMatchWhenCommentsAreMultipleLines() throws Exception { Modification modification = parser.modificationFromDescription(BUG_2503_OUTPUT, new ConsoleResult(0, new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>())); assertThat(parser.revisionFromChange(BUG_2503_OUTPUT), is(122636L)); assertThat(modification.getModifiedTime(), is(DESCRIPTION_FORMAT.parse("2009/02/06 17:53:57"))); assertThat(modification.getModifiedFiles().size(), is(1)); assertThat(modification.getUserName(), is("ipaipa@ipaipa-STANDARD-DHTML")); }
@Test public void shouldGetLatestModificationFromSubversion() { final List<Modification> materialRevisions = subversion.latestModification(); assertThat(materialRevisions.size(), is(1)); final Modification modification = materialRevisions.get(0); assertThat(modification.getComment(), is("Added simple build shell to dump the environment to console.")); assertThat(modification.getModifiedFiles().size(), is(1)); }
@Test public void shouldRetrieveFilenameForInitialRevision() throws IOException { GitTestRepo testRepo = new GitTestRepo(GitTestRepo.GIT_SUBMODULE_REF_BUNDLE, temporaryFolder); GitCommand gitCommand = new GitCommand(null, testRepo.gitRepository(), GitMaterialConfig.DEFAULT_BRANCH, false, new HashMap<>(), null); Modification modification = gitCommand.latestModification().get(0); assertThat(modification.getModifiedFiles().size(), is(1)); assertThat(modification.getModifiedFiles().get(0).getFileName(), is("remote.txt")); }
@Test public void shouldIncludeNewChangesInModificationCheck() throws Exception { String originalNode = git.latestModification().get(0).getRevision(); File testingFile = checkInNewRemoteFile(); Modification modification = git.latestModification().get(0); assertThat(modification.getRevision(), is(not(originalNode))); assertThat(modification.getComment(), is("New checkin of " + testingFile.getName())); assertThat(modification.getModifiedFiles().size(), is(1)); assertThat(modification.getModifiedFiles().get(0).getFileName(), is(testingFile.getName())); }
@Test public void shouldGetLatestModifications() throws Exception { List<Modification> actual = hgCommand.latestOneModificationAsModifications(); assertThat(actual.size(), is(1)); final Modification modification = actual.get(0); assertThat(modification.getComment(), is("test")); assertThat(modification.getUserName(), is("cruise")); assertThat(modification.getModifiedFiles().size(), is(1)); }
@Test public void shouldFilterModifiedFilesByRepositoryURL() { subversion = new SvnCommand(null, testRepo.end2endRepositoryUrl() + "/unit-reports", "user", "pass", false); List list = subversion.modificationsSince(new SubversionRevision(0)); Modification modification = (Modification) list.get(0); assertThat(modification.getModifiedFiles().size(), is(3)); for (ModifiedFile file : modification.getModifiedFiles()) { assertThat(file.getFileName().startsWith("/unit-reports"), is(true)); assertThat(file.getFileName().startsWith("/ft-reports"), is(false)); } }
@Test public void shouldRetrieveModifiedFiles() throws Exception { List<Modification> mods = git.modificationsSince(workingDir, GitTestRepo.REVISION_0, new TestSubprocessExecutionContext()); List<ModifiedFile> mod1Files = mods.get(0).getModifiedFiles(); assertThat(mod1Files.size(), Matchers.is(1)); assertThat(mod1Files.get(0).getFileName(), Matchers.is("build.xml")); assertThat(mod1Files.get(0).getAction(), Matchers.is(ModifiedAction.modified)); }
@Test public void shouldNotFilterModifiedFilesWhileURLPointsToRoot() { subversion = new SvnCommand(null, testRepo.end2endRepositoryUrl(), "user", "pass", false); List list = subversion.modificationsSince(new SubversionRevision(0)); Modification modification = (Modification) list.get(list.size() - 1); assertThat(modification.getModifiedFiles().size(), is(7)); }
@Test public void shouldGetModifications() { List<Modification> mods = hgMaterial.modificationsSince(workingFolder, new StringRevision(REVISION_0), new TestSubprocessExecutionContext()); assertThat(mods.size(), is(2)); Modification modification = mods.get(0); assertThat(modification.getRevision(), is(REVISION_2)); assertThat(modification.getModifiedFiles().size(), is(1)); }
@Test public void shouldFilterModifiedFilesByPath() { SvnLogXmlParser parser = new SvnLogXmlParser(); List<Modification> materialRevisions = parser.parse(MULTIPLE_FILES, "/branch", new SAXBuilder()); Modification mod = materialRevisions.get(0); List<ModifiedFile> files = mod.getModifiedFiles(); assertThat(files.size(), is(1)); ModifiedFile file = files.get(0); assertThat(file.getFileName(), is("/branch/1.1/readme.txt")); assertThat(file.getAction(), is(ModifiedAction.deleted)); }
@Test public void shouldRetrieveLatestModification() throws Exception { Modification mod = git.latestModification().get(0); assertThat(mod.getUserName(), is("Chris Turner <cturner@thoughtworks.com>")); assertThat(mod.getComment(), is("Added 'run-till-file-exists' ant target")); assertThat(mod.getModifiedTime(), is(parseRFC822("Fri, 12 Feb 2010 16:12:04 -0800"))); assertThat(mod.getRevision(), is("5def073a425dfe239aabd4bf8039ffe3b0e8856b")); List<ModifiedFile> files = mod.getModifiedFiles(); assertThat(files.size(), is(1)); assertThat(files.get(0).getFileName(), is("build.xml")); assertThat(files.get(0).getAction(), Matchers.is(ModifiedAction.modified)); }
@Test @RunIf(value = EnhancedOSChecker.class, arguments = {DO_NOT_RUN_ON, OSChecker.WINDOWS}) public void shouldSupportUTF8CheckInMessageAndFilename() throws Exception { String message = "司徒空在此"; String filename = "司徒空在此.scn"; testRepo.checkInOneFile(filename, message); Modification modification = subversion.latestModification().get(0); assertThat(modification.getComment(), is(message)); assertThat(modification.getModifiedFiles().get(0).getFileName(), containsString(filename)); }
@Test public void shouldGetAllModifiedFilesUnderRootPath() { SvnLogXmlParser parser = new SvnLogXmlParser(); List<Modification> materialRevisions = parser.parse(MULTIPLE_FILES, "", new SAXBuilder()); Modification mod = materialRevisions.get(0); List<ModifiedFile> files = mod.getModifiedFiles(); assertThat(files.size(), is(2)); ModifiedFile file = files.get(0); assertThat(file.getFileName(), is("/trunk/revision3.txt")); assertThat(file.getAction(), is(ModifiedAction.added)); file = files.get(1); assertThat(file.getFileName(), is("/branch/1.1/readme.txt")); assertThat(file.getAction(), is(ModifiedAction.deleted)); }
@Test public void shouldRetrieveModificationFromDescription() throws Exception { String output = "Change 2 by cce123user@connect4_10.18.2.31 on 2008/08/19 15:04:43\n" + "\n" + "\tAdded config file\n" + "\n" + "Affected files ...\n" + "\n" + "... //depot/cruise-config.xml#1 add\n" + "... //depot/README.txt#2 edit\n" + "... //depot/cruise-output/log.xml#1 delete\n" + ""; Modification mod = parser.modificationFromDescription(output, new ConsoleResult(0, new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>())); assertThat(mod.getRevision(), is("2")); assertThat(mod.getUserName(), is("cce123user@connect4_10.18.2.31")); assertThat(mod.getModifiedTime(), is(DESCRIPTION_FORMAT.parse("2008/08/19 15:04:43"))); assertThat(mod.getComment(), is("Added config file")); List<ModifiedFile> files = mod.getModifiedFiles(); assertThat(files.size(), is(3)); assertThat(files.get(0).getAction(), is(ModifiedAction.added)); assertThat(files.get(0).getFileName(), is("cruise-config.xml")); assertThat(files.get(1).getAction(), is(ModifiedAction.modified)); assertThat(files.get(2).getAction(), is(ModifiedAction.deleted)); assertThat(files.get(2).getFileName(), is("cruise-output/log.xml")); }
@Test public void shouldParse() throws ParseException { SvnLogXmlParser parser = new SvnLogXmlParser(); List<Modification> materialRevisions = parser.parse(XML, "", new SAXBuilder()); assertThat(materialRevisions.size(), is(1)); Modification mod = materialRevisions.get(0); assertThat(mod.getRevision(), is("3")); assertThat(mod.getUserName(), is("cceuser")); assertThat(mod.getModifiedTime(), is(convertDate("2008-03-11T07:52:41.162075Z"))); assertThat(mod.getComment(), is("[Liyanhui & Gabbar] Checked in new file for test")); List<ModifiedFile> files = mod.getModifiedFiles(); assertThat(files.size(), is(1)); ModifiedFile file = files.get(0); assertThat(file.getFileName(), is("/trunk/revision3.txt")); assertThat(file.getAction(), is(ModifiedAction.added)); }
@Test public void shouldRetrieveLatestModificationFromBranch() throws Exception { GitTestRepo branchedRepo = GitTestRepo.testRepoAtBranch(GIT_FOO_BRANCH_BUNDLE, BRANCH, temporaryFolder); GitCommand branchedGit = new GitCommand(null, createTempWorkingDirectory(), BRANCH, false, new HashMap<>(), null); branchedGit.clone(inMemoryConsumer(), branchedRepo.projectRepositoryUrl()); Modification mod = branchedGit.latestModification().get(0); assertThat(mod.getUserName(), is("Chris Turner <cturner@thoughtworks.com>")); assertThat(mod.getComment(), is("Started foo branch")); assertThat(mod.getModifiedTime(), is(parseRFC822("Tue, 05 Feb 2009 14:28:08 -0800"))); assertThat(mod.getRevision(), is("b4fa7271c3cef91822f7fa502b999b2eab2a380d")); List<ModifiedFile> files = mod.getModifiedFiles(); assertThat(files.size(), is(1)); assertThat(files.get(0).getFileName(), is("first.txt")); assertThat(files.get(0).getAction(), is(ModifiedAction.modified)); }
private void assertRevisions(BuildAssignment buildAssignment, MaterialRevision expectedRevision) { MaterialRevision actualRevision = buildAssignment.materialRevisions().findRevisionFor(expectedRevision.getMaterial()); assertThat(actualRevision.getMaterial(), is(expectedRevision.getMaterial())); assertThat(actualRevision.getModifications().size(), is(expectedRevision.getModifications().size())); for (int i = 0; i < actualRevision.getModifications().size(); i++) { final Modification actualModification = actualRevision.getModifications().get(i); final Modification expectedModification = expectedRevision.getModifications().get(i); assertThat(actualModification.getRevision(), is(expectedModification.getRevision())); assertThat(actualModification.getModifiedFiles().isEmpty(), is(true)); } }
@Override void populateXmlForModifications(Modifications modifications, XmlWriterContext writerContext, Element modificationsTag) { for (Modification modification : modifications) { Element changeset = modificationsTag.addElement("changeset"); changeset.addAttribute("changesetUri", ScmMaterial.changesetUrl(modification, writerContext.getBaseUrl(), material.getId())); changeset.addElement("user").addCDATA(modification.getUserDisplayName()); changeset.addElement("checkinTime").addText(DateUtils.formatISO8601(modification.getModifiedTime())); changeset.addElement("revision").addCDATA(modification.getRevision()); changeset.addElement("message").addCDATA(modification.getComment()); List<ModifiedFile> modifiedFiles = modification.getModifiedFiles(); for (ModifiedFile modifiedFile : modifiedFiles) { changeset.addElement("file").addAttribute("name", modifiedFile.getFileName()).addAttribute("action", modifiedFile.getAction().toString()); } } } }