@Override public void checkout(PluggableSCMMaterial material, File baseDir, Revision revision, SubprocessExecutionContext execCtx) { SCMPropertyConfiguration scmPropertyConfiguration = buildSCMPropertyConfigurations(material.getScmConfig()); MaterialInstance materialInstance = materialRepository.findMaterialInstance(material); PluggableSCMMaterialRevision pluggableSCMMaterialRevision = (PluggableSCMMaterialRevision) revision; SCMRevision scmRevision = new SCMRevision( pluggableSCMMaterialRevision.getRevision(), pluggableSCMMaterialRevision.getTimestamp(), null, null, pluggableSCMMaterialRevision.getData(), null); Result result = scmExtension.checkout(material.getPluginId(), scmPropertyConfiguration, baseDir.getAbsolutePath(), scmRevision); if(!result.isSuccessful()) throw new RuntimeException("Failed to perform checkout on pluggable SCM"); }
@Test public void shouldFindSCMMaterialRevisionEqual() { Date now = new Date(); PluggableSCMMaterialRevision revisionOne = new PluggableSCMMaterialRevision("go-agent-12.1.0", now); PluggableSCMMaterialRevision revisionTwo = new PluggableSCMMaterialRevision("go-agent-12.1.0", now); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.SECOND, 5); Date later = calendar.getTime(); PluggableSCMMaterialRevision revisionThree = new PluggableSCMMaterialRevision("go-agent-12.1.0", later); assertThat(revisionOne.equals(revisionTwo), is(true)); assertThat(revisionOne.equals(revisionThree), is(false)); } }
@Override public String getRevisionUrl() { return getRevision(); }
@Override public Revision oldestRevision(Modifications modifications) { if (modifications.isEmpty()) { return new NullRevision(); } Modification modification = modifications.get(modifications.size() - 1); return new PluggableSCMMaterialRevision(modification.getRevision(), modification.getModifiedTime()); }
@Test public void shouldGetJsonRepresentationForPluggableSCMMaterial() { ConfigurationProperty k1 = create("k1", false, "v1"); SCM scmConfig = SCMMother.create("scm-id", "scm-name", "pluginid", "version", new Configuration(k1)); PluggableSCMMaterial material = new PluggableSCMMaterial(); material.setSCMConfig(scmConfig); material.setFolder("folder"); Map<String, String> jsonMap = new LinkedHashMap<>(); material.toJson(jsonMap, new PluggableSCMMaterialRevision("rev123", new Date())); assertThat(jsonMap.get("scmType"), is("SCM")); assertThat(jsonMap.get("materialName"), is("scm-name")); assertThat(jsonMap.get("location"), is(material.getUriForDisplay())); assertThat(jsonMap.get("folder"), is("folder")); assertThat(jsonMap.get("action"), is("Modified")); }
@Override public List<Modification> modificationsSince(final PluggableSCMMaterial material, File baseDir, final Revision revision, SubprocessExecutionContext execCtx) { SCMPropertyConfiguration scmPropertyConfiguration = buildSCMPropertyConfigurations(material.getScmConfig()); MaterialInstance materialInstance = materialRepository.findMaterialInstance(material); PluggableSCMMaterialRevision pluggableSCMMaterialRevision = (PluggableSCMMaterialRevision) revision; SCMRevision previouslyKnownRevision = new SCMRevision(pluggableSCMMaterialRevision.getRevision(), pluggableSCMMaterialRevision.getTimestamp(), null, null, pluggableSCMMaterialRevision.getData(), null); MaterialPollResult pollResult = scmExtension.latestModificationSince(material.getPluginId(), scmPropertyConfiguration, materialInstance.getAdditionalDataMap(), baseDir.getAbsolutePath(), previouslyKnownRevision); final Map<String, String> materialData = pollResult.getMaterialData(); if (materialInstance.requiresUpdate(materialData)) { updateAdditionalData(materialInstance.getId(), materialData); } List<SCMRevision> scmRevisions = pollResult.getRevisions(); return getModifications(scmRevisions); }
public Revision latestRevision(Material material) { if (material instanceof SvnMaterial) { String revision = Modification.latestRevision(this).getRevision(); return new SubversionRevision(revision); } if (material instanceof DependencyMaterial) { Modification latestModification = this.get(0); String revision = latestModification.getRevision(); return DependencyMaterialRevision.create(revision, latestModification.getPipelineLabel()); } if (material instanceof PackageMaterial) { Modification latestModification = this.get(0); return new PackageMaterialRevision(latestModification.getRevision(), latestModification.getModifiedTime(), latestModification.getAdditionalDataMap()); } if (material instanceof PluggableSCMMaterial) { Modification latestModification = this.get(0); return new PluggableSCMMaterialRevision(latestModification.getRevision(), latestModification.getModifiedTime(), latestModification.getAdditionalDataMap()); } return Modification.latestRevision(this); }
@Test public void shouldGetLatestModificationsForPluggableSCMMaterial() { String revisionString = "123"; Date timestamp = new Date(); HashMap<String, String> data = new HashMap<>(); data.put("1", "one"); data.put("2", "two"); Modification modification = new Modification(null, null, null, timestamp, revisionString, JsonHelper.toJsonString(data)); Modifications modifications = new Modifications(modification); Revision revision = modifications.latestRevision(new PluggableSCMMaterial()); assertThat(revision instanceof PluggableSCMMaterialRevision, is(true)); PluggableSCMMaterialRevision pluggableSCMMaterialRevision = (PluggableSCMMaterialRevision) revision; assertThat(pluggableSCMMaterialRevision.getRevision(), is(revisionString)); assertThat(pluggableSCMMaterialRevision.getTimestamp(), is(timestamp)); assertThat(pluggableSCMMaterialRevision.getData().size(), is(data.size())); assertThat(pluggableSCMMaterialRevision.getData().get("1"), is(data.get("1"))); assertThat(pluggableSCMMaterialRevision.getData().get("2"), is(data.get("2"))); }