private Revision latestRevision(HgMaterial material, File workingDir, TestSubprocessExecutionContext execCtx) { List<Modification> modifications = material.latestModification(workingDir, execCtx); return new Modifications(modifications).latestRevision(material); } }
public Modifications since(long sinceId) { Modifications laterRevisions = new Modifications(); for (Modification modification : this) { if (modification.getId() == sinceId) { return laterRevisions; } laterRevisions.add(modification); } throw new RuntimeException(String.format("Could not find modification %s in %s", sinceId, this)); }
@Test public void shouldNeverIgnorePackageMaterialModifications() { PackageMaterialConfig packageMaterialConfig = new PackageMaterialConfig(); Filter filter = packageMaterialConfig.filter(); MatcherAssert.assertThat(filter, is(notNullValue())); MatcherAssert.assertThat(new Modifications().shouldBeIgnoredByFilterIn(packageMaterialConfig), is(false)); }
public List<Modification> getModifications() { return new Modifications(fromRevision, toRevision); }
Modification findLatestModification(final MaterialInstance expandedInstance) { Modifications modifications = cachedModifications(expandedInstance); if (modifications != null && !modifications.isEmpty()) { return modifications.get(0); } String cacheKey = latestMaterialModificationsKey(expandedInstance); synchronized (cacheKey) { Modification modification = (Modification) getHibernateTemplate().execute((HibernateCallback) session -> { Query query = session.createQuery("FROM Modification WHERE materialId = ? ORDER BY id DESC"); query.setMaxResults(1); query.setLong(0, expandedInstance.getId()); return query.uniqueResult(); }); goCache.put(cacheKey, new Modifications(modification)); return modification; } }
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(); } } } }
@Test public void shouldReturnUnknownForEmptyList() { assertThat(new Modifications().getUsername(), is("Unknown")); }
public void insertLatestOrNewModifications(Material material, MaterialInstance materialInstance, File folder, Modifications list) { List<Modification> newChanges = list.isEmpty() ? materialChecker.findLatestModification(folder, material, subprocessExecutionContext) : materialService.modificationsSince(material, folder, list.latestRevision(material), subprocessExecutionContext); if (newChanges.isEmpty()) { LOGGER.debug("[Material Update] Did not find any new modifications for material '{}' with flyweight '{}' using working directory '{}'", material, material.getFingerprint(), folder.getAbsolutePath()); } else { LOGGER.info("[Material Update] Found '{}' modifications for material '{}' with flyweight '{}' using working directory '{}'", newChanges.size(), material, material.getFingerprint(), folder.getAbsolutePath()); materialRepository.saveModifications(materialInstance, newChanges); } }
@Test public void shouldReturnModificationsForAGivenMaterial() { MaterialRevisions oneMaterialRevision = new MaterialRevisions(new MaterialRevision(material, yesterdayMod)); assertThat(oneMaterialRevision.getModifications(material), is(new Modifications(yesterdayMod))); MaterialRevisions emptyMaterialRevision = new MaterialRevisions(); assertThat(emptyMaterialRevision.getModifications(material).isEmpty(), is(true)); MaterialRevisions differentMaterialRevision = new MaterialRevisions(new MaterialRevision(MaterialsMother.hgMaterial(), yesterdayMod)); assertThat(differentMaterialRevision.getModifications(material).isEmpty(), is(true)); }
@Test public void shouldReturnUnknownRevisionForEmptyList() { assertThat(new Modifications().getRevision(), is("Unknown")); }
@Test public void hasModifcationResults() { Modifications modifications = modificationWithIds(); assertThat(modifications.since(3), is(new Modifications(modifcation(4)))); assertThat(modifications.since(2), is(new Modifications(modifcation(4), modifcation(3)))); try { modifications.since(10); fail("should throw exception"); } catch (Exception e) { assertThat(e.getMessage(), is("Could not find modification 10 in " + modifications)); } try { modifications.since(6); fail("should throw exception"); } catch (Exception e) { assertThat(e.getMessage(), is("Could not find modification 6 in " + modifications)); } }
@Test public void shouldUnderstandIfContainsModificationWithSameRevision() { MaterialInstance materialInstance = MaterialsMother.hgMaterial().createMaterialInstance(); final Modification modification = modificationWith(materialInstance, "1"); final Modification sameModification = modificationWith(materialInstance, "1"); final Modification modificationWithDifferentRev = modificationWith(materialInstance, "2"); final Modification modificationWithDifferentMaterial = modificationWith(MaterialsMother.hgMaterial("http://foo.com").createMaterialInstance(), "1"); Modifications modifications = new Modifications(modification); assertThat(modifications.containsRevisionFor(modification), is(true)); assertThat(modifications.containsRevisionFor(sameModification), is(true)); assertThat(modifications.containsRevisionFor(modificationWithDifferentRev), is(false)); assertThat(modifications.containsRevisionFor(modificationWithDifferentMaterial), is(true)); //note that its checking for revision and not material instance }
private boolean shouldCache(Modifications modifications) { return modifications.size() <= latestModificationsCacheLimit; }
public Revision getRevision() { if (material == null) { return new NullRevision(); } return modifications.latestRevision(material); }
public boolean isMissingModifications() { if (isEmpty()) { return true; } for (MaterialRevision materialRevision : this) { if (materialRevision.getModifications().isEmpty()) { return true; } } return false; }
public Modification getModification(int i) { return modifications.get(i); }