public boolean isValidBuildCause(PipelineConfig pipelineConfig, BuildCause buildCause) { for (MaterialRevision materialRevision : buildCause.getMaterialRevisions()) { if (materialRevision.isChanged()) { return true; } } return false; }
public MaterialRevision firstModifiedMaterialRevision() { for (MaterialRevision revision : revisions) { if (revision.isChanged()) { return revision; } } return revisions.isEmpty() ? new NullMaterialRevision() : revisions.get(0); }
public void populateEnvironmentVariables(EnvironmentVariableContext context, File workingDir) { material.populateEnvironmentContext(context, this, workingDir); String materialNameForEnvironmentVariable = material.getMaterialNameForEnvironmentVariable(); if(StringUtils.isNotBlank(materialNameForEnvironmentVariable)){ context.setPropertyWithEscape(format("GO_MATERIAL_%s_HAS_CHANGED", materialNameForEnvironmentVariable), Boolean.toString(isChanged())); }else { context.setPropertyWithEscape("GO_MATERIAL_HAS_CHANGED", Boolean.toString(isChanged())); } }
boolean hasAnyUnsharedMaterialChanged(PipelineConfigDependencyGraph dependencyGraph, MaterialRevisions originalMaterialRevisions) { for (MaterialConfig materialConfig : dependencyGraph.unsharedMaterialConfigs()) { MaterialRevision revision = originalMaterialRevisions.findRevisionFor(materialConfig); if (revision == null) { String message = String.format("Couldn't find material-revision for material '%s' while auto-scheduling pipeline named '%s'", materialConfig, pipelineName); RuntimeException exception = new NullPointerException(message); LOGGER.error(message, exception); throw exception; } if (revision.isChanged()) { return true; } } return false; }
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); }
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 Set<String> calculateFor(Stage stage) { Set<String> breakersForChangedMaterials = new HashSet<>(); Set<String> breakersForMaterialsWithNoChange = new HashSet<>(); if (stage.getResult() == StageResult.Failed) { MaterialRevisions materialRevisions = materialRepository.findMaterialRevisionsForPipeline(stage.getPipelineId()); for (MaterialRevision materialRevision : materialRevisions) { if (materialRevision.isChanged()) { addToBreakers(breakersForChangedMaterials, materialRevision); } else { addToBreakers(breakersForMaterialsWithNoChange, materialRevision); } } } return breakersForChangedMaterials.isEmpty() ? breakersForMaterialsWithNoChange : breakersForChangedMaterials; }
@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(); } }
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; } }
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; } }
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); } } } }
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); attributes.put("fingerprint", currentRevision.getMaterial().getFingerprint()); ArrayList<StageNotificationDTO.ModificationDTO> modifications = new ArrayList<>(); for (Modification modification : currentRevision.getModifications()) { modifications.add(new StageNotificationDTO.ModificationDTO(modification.getRevision(), DateUtil.dateToString(modification.getModifiedTime()), modification.getAdditionalDataMap())); } revisions.add(new StageNotificationDTO.MaterialRevisionDTO(attributes, currentRevision.isChanged(), modifications)); } return revisions; } }
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(), DateUtil.dateToString(modification.getModifiedTime()), modification.getAdditionalDataMap())); } revisions.add(new StageNotificationDTO.MaterialRevisionDTO(attributes, currentRevision.isChanged(), modifications)); } return revisions; } }
private MaterialRevisions restoreOriginalMaterialConfigAndMaterialOrderUsingFingerprint(MaterialRevisions actualRevisions, MaterialRevisions computedRevisions) { MaterialRevisions orderedComputedRevisions = new MaterialRevisions(); for (MaterialRevision actualRevision : actualRevisions) { MaterialRevision revisionForMaterial = computedRevisions.findRevisionUsingMaterialFingerprintFor(actualRevision.getMaterial()); MaterialRevision materialRevisionWithRestoredMaterialConfig = new MaterialRevision(actualRevision.getMaterial(), revisionForMaterial.isChanged(), revisionForMaterial.getModifications()); orderedComputedRevisions.addRevision(materialRevisionWithRestoredMaterialConfig); } return orderedComputedRevisions; }
@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 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()); }
@Test public void shouldRecomputeIsChanged() throws Exception { MaterialRevision original = createHgMaterialWithMultipleRevisions(1, oneModifiedFile("rev2"), oneModifiedFile("rev1")).getMaterialRevision(0); MaterialRevision recomputed = createHgMaterialWithMultipleRevisions(1, oneModifiedFile("rev1")).getMaterialRevision(0); MaterialRevision recomputedAnother = createHgMaterialWithMultipleRevisions(1, oneModifiedFile("rev0")).getMaterialRevision(0); recomputed.updateRevisionChangedStatus(original); recomputedAnother.updateRevisionChangedStatus(original); assertThat(recomputed.isChanged(), is(false)); assertThat(recomputedAnother.isChanged(), is(false)); original.markAsChanged(); recomputed.updateRevisionChangedStatus(original); recomputedAnother.updateRevisionChangedStatus(original); assertThat(recomputed.isChanged(), is(true)); assertThat(recomputedAnother.isChanged(), is(false)); }
@Test public void shouldMarkRevisionAsChanged() throws Exception { MaterialRevision original = new MaterialRevision(hgMaterial, hgMaterial.modificationsSince(workingFolder, REVISION_0, new TestSubprocessExecutionContext())); checkInFiles(hgMaterial, "user.doc"); MaterialRevision newRev = findNewRevision(original, hgMaterial, workingFolder, new TestSubprocessExecutionContext()); assertThat(newRev.isChanged(), is(true)); }
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()); } }))); } }
@Test public void shouldMarkRevisionAsNotChanged() throws Exception { List<Modification> modifications = hgMaterial.latestModification(workingFolder, new TestSubprocessExecutionContext()); MaterialRevision original = new MaterialRevision(hgMaterial, modifications); checkInFiles(hgMaterial, "user.doc"); original = findNewRevision(original, hgMaterial, workingFolder, new TestSubprocessExecutionContext()); MaterialRevision newRev = findNewRevision(original, hgMaterial, workingFolder, new TestSubprocessExecutionContext()); assertThat(newRev.isChanged(), is(false)); }