private Collection<MaterialRevision> getMaterialsFromCurrentPipeline(List<MaterialRevision> finalRevisionsForScmChildren, MaterialRevisions actualRevisions) { List<MaterialRevision> updatedRevisions = new ArrayList<>(); for (MaterialRevision revisionsForScmChild : finalRevisionsForScmChildren) { MaterialRevision originalRevision = actualRevisions.findRevisionUsingMaterialFingerprintFor(revisionsForScmChild.getMaterial()); updatedRevisions.add(new MaterialRevision(originalRevision.getMaterial(), revisionsForScmChild.isChanged(), revisionsForScmChild.getModifications())); } return updatedRevisions; } }
public static void toJSON(OutputWriter jsonOutputWriter, MaterialRevision model) { jsonOutputWriter .add("material_type", model.getMaterialType()) .add("material_name", model.getMaterialName()) .add("changed", model.isChanged()) .addChildList("modifications", listWriter -> model.getModifications().forEach(modification -> listWriter.addChild(childWriter -> { if (model.getMaterial() instanceof DependencyMaterial) { PipelineDependencyModificationRepresenter.toJSON(jsonOutputWriter, modification, (DependencyMaterialRevision) model.getRevision()); } else { ModificationRepresenter.toJSON(jsonOutputWriter, modification, model.getMaterial()); } }))); } }
public PipelineMaterialRevision(long pipelineId, MaterialRevision revision, Long actualFromModificationId) { this(CaseInsensitiveString.str(revision.getMaterial().getName()), revision.getMaterial().getFolder(), pipelineId, revision.getOldestModification(), revision.getLatestModification(), revision.isChanged(), actualFromModificationId); recomputeFromModification(revision.getMaterial()); }
@Deprecated //used only in triangle dependency case of fan-in off - Srini public void updateRevisionChangedStatus(MaterialRevision revisionFor) { if (revisionFor.isChanged() && revisionFor.hasModification(getLatestModification())) { markAsChanged(); } else { markAsNotChanged(); } }
@Override public int hashCode() { int result; result = (materialRevision.getMaterial() != null ? materialRevision.getMaterial().getFingerprint().hashCode() : 0); result = 31 * result + (materialRevision.getModifications() != null ? materialRevision.getModifications().hashCode() : 0); return result; }
private ArrayList<StageNotificationDTO.MaterialRevisionDTO> createBuildCause(BuildCause buildCause) { ArrayList<StageNotificationDTO.MaterialRevisionDTO> revisions = new ArrayList<>(); for (MaterialRevision currentRevision : buildCause.getMaterialRevisions()) { Map<String, Object> attributes = currentRevision.getMaterial().getAttributes(false); ArrayList<StageNotificationDTO.ModificationDTO> modifications = new ArrayList<>(); for (Modification modification : currentRevision.getModifications()) { modifications.add(new StageNotificationDTO.ModificationDTO(modification.getRevision(), modification.getModifiedTime(), modification.getAdditionalDataMap())); } revisions.add(new StageNotificationDTO.MaterialRevisionDTO(attributes, currentRevision.isChanged(), modifications)); } return revisions; } }
public Map<CaseInsensitiveString, String> getNamedRevisions() { Map<CaseInsensitiveString, String> results = new HashMap<>(); for (MaterialRevision mr : revisions) { CaseInsensitiveString materialName = mr.getMaterial().getName(); if (!CaseInsensitiveString.isBlank(materialName)) { results.put(materialName, getRevisionValueOf(mr.getRevision())); } } return results; }
private void overrideCommonMaterialRevisions(PipelineConfigDependencyGraph graph, MaterialRevisions actualRevisions, MaterialRevisions computedRevisions) { Queue<PipelineConfigDependencyGraph.PipelineConfigQueueEntry> configQueue = graph.buildQueue(); for (MaterialRevision actualRevision : actualRevisions) { if (actualRevision.getMaterial() instanceof DependencyMaterial && actualRevision.isChanged()) { DependencyMaterialRevision revision = (DependencyMaterialRevision) actualRevision.getRevision(); for (PipelineConfigDependencyGraph.PipelineConfigQueueEntry configQueueEntry : configQueue) { populateRevisionsUsingUpstream(actualRevisions, computedRevisions, revision, configQueueEntry); } } } }
public void visit(MaterialRevision revision) { this.revision = revision; modificationsJson = new ArrayList(); materialJson = new LinkedHashMap(); materialJson.put("revision", revision.getRevision().getRevision()); materialJson.put("revision_href", revision.getRevision().getRevisionUrl()); materialJson.put("user", revision.buildCausedBy()); materialJson.put("date", formatISO8601(revision.getDateOfLatestModification())); materialJson.put("changed", valueOf(revision.isChanged())); materialJson.put("modifications", modificationsJson); materials.add(materialJson); }
public void updateChangedRevisions(CaseInsensitiveString pipelineName, BuildCause buildCause) { for (MaterialRevision materialRevision : buildCause.getMaterialRevisions()) { Long latestModificationRunByPipeline = materialRepository.latestModificationRunByPipeline(pipelineName, materialRevision.getMaterial()); Modifications revised = new Modifications(); for (Modification modification : materialRevision.getModifications()) { if(modification.getId() > latestModificationRunByPipeline) revised.add(modification); } if(!revised.isEmpty()) { materialRevision.replaceModifications(revised); materialRevision.markAsChanged(); } else{ materialRevision.markAsNotChanged(); } } } }
@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; } }
@Test public void shouldMarkRevisionChangeFalseIfNoNewChangesAvailable() throws Exception { Modification modificationForRevisionTip = new Modification(new Date(), REVISION_2.getRevision(), "MOCK_LABEL-12", null); MaterialRevision revision = new MaterialRevision(hgMaterial, modificationForRevisionTip); MaterialRevision unchangedRevision = findNewRevision(revision, hgMaterial, workingFolder, new TestSubprocessExecutionContext()); assertThat(unchangedRevision.isChanged(), is(false)); }
public MaterialRevision findRevisionForFingerPrint(String fingerprint) {//TODO: pass material in, it has a method to equate fingerprints(this is bad encapsulation) -jj/shilpa for (MaterialRevision revision : revisions) { if (fingerprint.equals(revision.getMaterial().getFingerprint())) { return revision; } } return null; }
public void useMaterialRevision(MaterialRevision materialRevision) { setFromModification(materialRevision.getOldestModification()); setToModification(materialRevision.getLatestModification()); recomputeFromModification(materialRevision.getMaterial()); }
@Test public void shouldDetectChangesAfterACheckin() throws Exception { MaterialRevision original = new MaterialRevision(hgMaterial, hgMaterial.modificationsSince(workingFolder, REVISION_0, new TestSubprocessExecutionContext())); checkInOneFile(hgMaterial); checkInOneFile(hgMaterial); checkInOneFile(hgMaterial); final MaterialRevision after = findNewRevision(original, hgMaterial, workingFolder, new TestSubprocessExecutionContext()); assertThat(after, not(original)); assertThat(after.numberOfModifications(), is(3)); assertThat(after.getRevision(), is(not(original.getRevision()))); assertThat(after.hasChangedSince(original), is(true)); }
public DependencyMaterialRevision findDependencyMaterialRevision(String pipelineName) { for (MaterialRevision materialRevision : this) { Revision revision = materialRevision.getRevision(); if (revision instanceof DependencyMaterialRevision) { DependencyMaterialRevision dependencyMaterialRevision = (DependencyMaterialRevision) revision; if (dependencyMaterialRevision.getPipelineName().equalsIgnoreCase(pipelineName)) { return dependencyMaterialRevision; } } } return null; }
public MaterialRevision findNewRevision(MaterialRevision materialRevision, HgMaterial material, File workingFolder, final SubprocessExecutionContext execCtx) { List<Modification> newModifications = material.modificationsSince(workingFolder, materialRevision.getRevision(), execCtx); return materialRevision.latestChanges(material, materialRevision.getModifications(), newModifications); } }
@Test public void shouldReturnNullRevisionWhenThereIsNoMaterial() throws Exception { Revision revision = new MaterialRevision(null).getRevision(); assertThat(revision, is(not(nullValue()))); assertThat(revision.getRevision(), is("")); }
@Override public void populateEnvironmentContext(EnvironmentVariableContext context, MaterialRevision materialRevision, File workingDir) { context.setProperty(getEnvironmentVariableKey("GO_SCM_%s_%s", "LABEL"), materialRevision.getRevision().getRevision(), false); for (ConfigurationProperty configurationProperty : scmConfig.getConfiguration()) { context.setProperty(getEnvironmentVariableKey("GO_SCM_%s_%s", configurationProperty.getConfigurationKey().getName()), configurationProperty.getValue(), configurationProperty.isSecure()); } HashMap<String, String> additionalData = materialRevision.getLatestModification().getAdditionalDataMap(); if (additionalData != null) { for (Map.Entry<String, String> entry : additionalData.entrySet()) { boolean isSecure = false; for (EnvironmentVariableContext.EnvironmentVariable secureEnvironmentVariable : context.getSecureEnvironmentVariables()) { String urlEncodedValue = null; try { urlEncodedValue = URLEncoder.encode(secureEnvironmentVariable.value(), "UTF-8"); } catch (UnsupportedEncodingException e) { } boolean isSecureEnvironmentVariableEncoded = !StringUtils.isBlank(urlEncodedValue) && !secureEnvironmentVariable.value().equals(urlEncodedValue); if (isSecureEnvironmentVariableEncoded && entry.getValue().contains(urlEncodedValue)) { isSecure = true; break; } } String key = entry.getKey(); String value = entry.getValue(); context.setProperty(getEnvironmentVariableKey("GO_SCM_%s_%s", key), value, isSecure); } } }
private static Consumer<OutputWriter> materialRevision(MaterialRevision revision) { return revisionWriter -> { if (revision != null) { revisionWriter.addIfNotNull("date", revision.getDateOfLatestModification()) .addIfNotNull("user", revision.getLatestUser()) .addIfNotNull("comment", revision.getLatestComment()) .addIfNotNull("last_run_revision", revision.getLatestRevisionString()); } }; } }