@Override public Set<Material> prune(Set<Material> materials, Map params) { HashSet<Material> prunedCollection = new HashSet<>(); String paramSCMName = (String) params.get(SCM_NAME); if (StringUtils.isNotBlank(paramSCMName)) { for (Material material : materials) { if (material instanceof PluggableSCMMaterial && paramSCMName.equalsIgnoreCase(((PluggableSCMMaterial) material).getScmConfig().getName())) { prunedCollection.add(material); } } } return prunedCollection; } }
public String getPluginId() { return getScmConfig().getPluginConfiguration().getId(); }
@Override public void updateFromConfig(MaterialConfig materialConfig) { super.updateFromConfig(materialConfig); this.getScmConfig().setConfiguration(((PluggableSCMMaterialConfig)materialConfig).getSCMConfig().getConfiguration()); } }
@Override public void prepare() { try { PluggableSCMMaterial material = (PluggableSCMMaterial) revision.getMaterial(); Modification latestModification = revision.getLatestModification(); SCMRevision scmRevision = new SCMRevision(latestModification.getRevision(), latestModification.getModifiedTime(), null, null, latestModification.getAdditionalDataMap(), null); File destinationFolder = material.workingDirectory(workingDirectory); Result result = scmExtension.checkout(material.getScmConfig().getPluginConfiguration().getId(), buildSCMPropertyConfigurations(material.getScmConfig()), destinationFolder.getAbsolutePath(), scmRevision); handleCheckoutResult(material, result); } catch (Exception e) { consumer.taggedErrOutput(PREP_ERR, String.format("Material %s checkout failed: %s", revision.getMaterial().getDisplayName(), e.getMessage())); throw e; } }
@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 shouldTakeValueOfIsAutoUpdateFromSCMConfig() throws Exception { PluggableSCMMaterial material = MaterialsMother.pluggableSCMMaterial(); material.getScmConfig().setAutoUpdate(true); assertThat(material.isAutoUpdate(), is(true)); material.getScmConfig().setAutoUpdate(false); assertThat(material.isAutoUpdate(), is(false)); }
private PluggableSCMMaterial createPluggableSCMMaterialWithSecureConfiguration() { PluggableSCMMaterial material = MaterialsMother.pluggableSCMMaterial(); material.getScmConfig().getConfiguration().get(1).handleSecureValueConfiguration(true); return material; } }
@Test public void shouldConvertMaterialInstanceToMaterial() { PluggableSCMMaterial material = MaterialsMother.pluggableSCMMaterial(); SCM scmConfig = material.getScmConfig(); PluggableSCMMaterialInstance materialInstance = new PluggableSCMMaterialInstance(JsonHelper.toJsonString(material), "flyweight"); materialInstance.setId(1L); PluggableSCMMaterial constructedMaterial = (PluggableSCMMaterial) materialInstance.toOldMaterial(null, null, null); assertThat(constructedMaterial.getId(), is(1L)); assertThat(constructedMaterial.getScmConfig().getPluginConfiguration().getId(), is(scmConfig.getPluginConfiguration().getId())); assertThat(constructedMaterial.getScmConfig().getConfiguration(), is(scmConfig.getConfiguration())); }
@Override public List<Modification> latestModification(final PluggableSCMMaterial material, File baseDir, SubprocessExecutionContext execCtx) { SCMPropertyConfiguration scmPropertyConfiguration = buildSCMPropertyConfigurations(material.getScmConfig()); final MaterialInstance materialInstance = materialRepository.findMaterialInstance(material); MaterialPollResult pollResult = scmExtension.getLatestRevision(material.getPluginId(), scmPropertyConfiguration, materialInstance.getAdditionalDataMap(), baseDir.getAbsolutePath()); final Map<String, String> materialData = pollResult.getMaterialData(); if (materialInstance.requiresUpdate(materialData)) { updateAdditionalData(materialInstance.getId(), materialData); } SCMRevision scmRevision = pollResult.getLatestRevision(); return scmRevision == null ? new Modifications() : new Modifications(getModification(scmRevision)); }
@Test public void shouldTestEqualsBasedOnConfiguration() { PluggableSCMMaterial material = MaterialsMother.pluggableSCMMaterial("scm-id", "scm-name", ConfigurationPropertyMother.create("key1", false, "value1")); MaterialInstance materialInstance = material.createMaterialInstance(); MaterialInstance materialInstanceCopy = material.createMaterialInstance(); material.getScmConfig().getConfiguration().add(ConfigurationPropertyMother.create("key2", false, "value2")); MaterialInstance newMaterialInstance = material.createMaterialInstance(); assertThat(materialInstance, is(materialInstanceCopy)); assertThat(materialInstance, is(not(newMaterialInstance))); }
@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); }
@Test public void shouldFailEqualsCheckIfFingerprintDiffers() { PluggableSCMMaterial material1 = MaterialsMother.pluggableSCMMaterial(); material1.getScmConfig().getConfiguration().first().setConfigurationValue(new ConfigurationValue("new-url")); PluggableSCMMaterial material2 = MaterialsMother.pluggableSCMMaterial(); assertThat(material1.equals(material2), is(false)); }
@Test public void shouldCorrectlyCheckIfUpgradeIsNecessary() { PluggableSCMMaterial material = MaterialsMother.pluggableSCMMaterial("scm-id", "scm-name", ConfigurationPropertyMother.create("key1", false, "value1")); PluggableSCMMaterialInstance materialInstance = (PluggableSCMMaterialInstance) material.createMaterialInstance(); materialInstance.setId(10L); PluggableSCMMaterialInstance materialInstanceCopy = (PluggableSCMMaterialInstance) material.createMaterialInstance(); material.getScmConfig().getConfiguration().add(ConfigurationPropertyMother.create("key2", false, "value2")); PluggableSCMMaterialInstance newMaterialInstance = (PluggableSCMMaterialInstance) material.createMaterialInstance(); assertThat(materialInstance.shouldUpgradeTo(materialInstanceCopy), is(false)); assertThat(materialInstance.shouldUpgradeTo(newMaterialInstance), is(true)); }
private Pipeline createPipeline() throws Exception { Pipeline pipeline = PipelineMother.pipelineWithAllTypesOfMaterials("pipeline-name", "stage-name", "job-name", "1"); List<MaterialRevision> materialRevisions = pipeline.getMaterialRevisions().getRevisions(); PackageDefinition packageDefinition = ((PackageMaterial) materialRevisions.get(6).getMaterial()).getPackageDefinition(); packageDefinition.getRepository().getConfiguration().get(1).handleSecureValueConfiguration(true); packageDefinition.getConfiguration().addNewConfigurationWithValue("k4", "package-v2", false); packageDefinition.getConfiguration().get(1).handleSecureValueConfiguration(true); SCM scm = ((PluggableSCMMaterial) materialRevisions.get(7).getMaterial()).getScmConfig(); scm.getConfiguration().get(1).handleSecureValueConfiguration(true); Stage stage = pipeline.getFirstStage(); stage.setId(1L); stage.setPipelineId(1L); stage.setCreatedTime(new Timestamp(getFixedDate().getTime())); stage.setLastTransitionedTime(new Timestamp(getFixedDate().getTime())); JobInstance job = stage.getJobInstances().get(0); job.setScheduledDate(getFixedDate()); job.getTransition(JobState.Completed).setStateChangeTime(getFixedDate()); return pipeline; } }
private Pipeline createPipeline() throws Exception { Pipeline pipeline = PipelineMother.pipelineWithAllTypesOfMaterials("pipeline-name", "stage-name", "job-name", "1"); List<MaterialRevision> materialRevisions = pipeline.getMaterialRevisions().getRevisions(); PackageDefinition packageDefinition = ((PackageMaterial) materialRevisions.get(6).getMaterial()).getPackageDefinition(); packageDefinition.getRepository().getConfiguration().get(1).handleSecureValueConfiguration(true); packageDefinition.getConfiguration().addNewConfigurationWithValue("k4", "package-v2", false); packageDefinition.getConfiguration().get(1).handleSecureValueConfiguration(true); SCM scm = ((PluggableSCMMaterial) materialRevisions.get(7).getMaterial()).getScmConfig(); scm.getConfiguration().get(1).handleSecureValueConfiguration(true); Stage stage = pipeline.getFirstStage(); stage.setId(1L); stage.setPipelineId(1L); stage.setCreatedTime(new Timestamp(getFixedDate().getTime())); stage.setLastTransitionedTime(new Timestamp(getFixedDate().getTime())); JobInstance job = stage.getJobInstances().get(0); job.setScheduledDate(getFixedDate()); job.getTransition(JobState.Assigned).setStateChangeTime(getFixedDate()); job.getTransition(JobState.Completed).setStateChangeTime(getFixedDate()); return pipeline; }
private Pipeline createPipeline() throws Exception { Pipeline pipeline = PipelineMother.pipelineWithAllTypesOfMaterials("pipeline-name", "stage-name", "job-name", "1"); List<MaterialRevision> materialRevisions = pipeline.getMaterialRevisions().getRevisions(); PackageDefinition packageDefinition = ((PackageMaterial) materialRevisions.get(6).getMaterial()).getPackageDefinition(); packageDefinition.getRepository().getConfiguration().get(1).handleSecureValueConfiguration(true); packageDefinition.getConfiguration().addNewConfigurationWithValue("k4", "package-v2", false); packageDefinition.getConfiguration().get(1).handleSecureValueConfiguration(true); SCM scm = ((PluggableSCMMaterial) materialRevisions.get(7).getMaterial()).getScmConfig(); scm.getConfiguration().get(1).handleSecureValueConfiguration(true); Stage stage = pipeline.getFirstStage(); stage.setId(1L); stage.setPipelineId(1L); stage.setCreatedTime(new Timestamp(getFixedDate().getTime())); stage.setLastTransitionedTime(new Timestamp(getFixedDate().getTime())); JobInstance job = stage.getJobInstances().get(0); job.setScheduledDate(getFixedDate()); job.getTransition(JobState.Assigned).setStateChangeTime(getFixedDate()); job.getTransition(JobState.Completed).setStateChangeTime(getFixedDate()); return pipeline; } }
private Pipeline createPipeline() throws Exception { Pipeline pipeline = PipelineMother.pipelineWithAllTypesOfMaterials("pipeline-name", "stage-name", "job-name", "1"); List<MaterialRevision> materialRevisions = pipeline.getMaterialRevisions().getRevisions(); PackageDefinition packageDefinition = ((PackageMaterial) materialRevisions.get(6).getMaterial()).getPackageDefinition(); packageDefinition.getRepository().getConfiguration().get(1).handleSecureValueConfiguration(true); packageDefinition.getConfiguration().addNewConfigurationWithValue("k4", "package-v2", false); packageDefinition.getConfiguration().get(1).handleSecureValueConfiguration(true); SCM scm = ((PluggableSCMMaterial) materialRevisions.get(7).getMaterial()).getScmConfig(); scm.getConfiguration().get(1).handleSecureValueConfiguration(true); Stage stage = pipeline.getFirstStage(); stage.setId(1L); stage.setPipelineId(1L); stage.setCreatedTime(new Timestamp(getFixedDate().getTime())); stage.setLastTransitionedTime(new Timestamp(getFixedDate().getTime())); stage.setPreviousStage(new StageIdentifier("pipeline-name", 1, "1", "previous-stage", "1")); JobInstance job = stage.getJobInstances().get(0); job.setScheduledDate(getFixedDate()); job.getTransition(JobState.Assigned).setStateChangeTime(getFixedDate()); job.getTransition(JobState.Completed).setStateChangeTime(getFixedDate()); return pipeline; }
@Test public void shouldUpdateMaterialFromMaterialConfig(){ PluggableSCMMaterial material = MaterialsMother.pluggableSCMMaterial(); PluggableSCMMaterialConfig materialConfig = MaterialConfigsMother.pluggableSCMMaterialConfig(); Configuration configuration = new Configuration(new ConfigurationProperty(new ConfigurationKey("new_key"), new ConfigurationValue("new_value"))); materialConfig.getSCMConfig().setConfiguration(configuration); material.updateFromConfig(materialConfig); assertThat(material.getScmConfig().getConfiguration().equals(materialConfig.getSCMConfig().getConfiguration()), is(true)); }