@Override public void write(ResponseWriter out) throws Exception { try (AutoCloseableIterator<DiffEntry> diff = geogig.command(DiffOp.class) .setOldVersion(oldRefSpec).setNewVersion(newRefSpec).setFilter(pathFilter) .setPreserveIterationOrder(true).call()) { out.start(); if (showGeometryChanges) { out.writeGeometryChanges(geogig, diff, page, elementsPerPage); } else { out.writeDiffEntries("diff", page * elementsPerPage, elementsPerPage, diff); } out.finish(); } } });
private AutoCloseableIterator<DiffEntry> buildEntries(GeogigCLI cli) { DiffOp diff = cli.getGeogig().command(DiffOp.class).setReportTrees(true); String oldVersion = resolveOldVersion(); String newVersion = resolveNewVersion(); diff.setOldVersion(oldVersion).setNewVersion(newVersion).setCompareIndex(cached); AutoCloseableIterator<DiffEntry> entries; if (paths.isEmpty()) { entries = diff.setProgressListener(cli.getProgressListener()).call(); } else { entries = AutoCloseableIterator.emptyIterator(); for (String path : paths) { AutoCloseableIterator<DiffEntry> moreEntries = diff.setFilter(path) .setProgressListener(cli.getProgressListener()).call(); entries = AutoCloseableIterator.concat(entries, moreEntries); } } return entries; }
private AutoCloseableIterator<DiffEntry> buildEntries(GeogigCLI cli, String oldVersion, String newVersion) { DiffOp diff = cli.getGeogig().command(DiffOp.class); diff.setOldVersion(oldVersion).setNewVersion(newVersion).setCompareIndex(cached); AutoCloseableIterator<DiffEntry> entries; if (paths.isEmpty()) { entries = diff.setProgressListener(cli.getProgressListener()).call(); } else { entries = AutoCloseableIterator.emptyIterator(); for (String path : paths) { AutoCloseableIterator<DiffEntry> moreEntries = diff.setFilter(path) .setProgressListener(cli.getProgressListener()).call(); entries = AutoCloseableIterator.concat(entries, moreEntries); } } return entries; }
public AutoCloseableIterator<DiffEntry> getAffectedFeatures(RepositoryProvider provider, String repoName, ObjectId commitId) { Repository repository = getRepository(provider, repoName); if (repository != null) { final RevCommit revCommit = repository.getCommit(commitId); if (revCommit.getParentIds() != null && revCommit.getParentIds().size() > 0) { ObjectId parentId = revCommit.getParentIds().get(0); return repository.command(DiffOp.class) .setOldVersion(parentId).setNewVersion(commitId).call(); } } return AutoCloseableIterator.emptyIterator(); }
@Test public void testChangedFeatureType() throws Exception { insertAndAdd(points1, points2); geogig.getRepository().workingTree().updateTypeTree(pointsName, modifiedPointsType); List<DiffEntry> difflist = toList(diffOp.setReportTrees(true).call()); assertNotNull(difflist); assertEquals(1, difflist.size()); }
/** * Returns an array with the features that are staged and ready to be commited. If noDeletions * is true, it doesn't include features to be removed, only those ones to be added or modified, * so it can be used to check the new data that will get commited into the repository * * @return */ public Feature[] getFeaturesToCommit(String path, boolean noDeletions) { DiffOp diffOp = repository.command(DiffOp.class); diffOp.setCompareIndex(true); diffOp.setFilter(path); List<Feature> list = Lists.newArrayList(); try (AutoCloseableIterator<DiffEntry> diffs = diffOp.call()) { while (diffs.hasNext()) { DiffEntry diff = diffs.next(); if (!diff.changeType().equals(ChangeType.REMOVED) || !noDeletions) { RevFeature revFeature = repository.command(RevObjectParse.class) .setObjectId(diff.newObjectId()).call(RevFeature.class).get(); RevFeatureType revFeatureType = repository.command(RevObjectParse.class) .setObjectId(diff.getNewObject().getMetadataId()) .call(RevFeatureType.class).get(); FeatureBuilder builder = new FeatureBuilder(revFeatureType); list.add(builder.build(diff.getNewObject().name(), revFeature)); } } } return list.toArray(new Feature[0]); }
@Test public void testEmptyRepo() throws Exception { try (AutoCloseableIterator<DiffEntry> difflist = diffOp .setOldVersion(ObjectId.NULL.toString()).call()) { assertNotNull(difflist); assertFalse(difflist.hasNext()); } }
@Override public AutoCloseableIterator<DiffEntry> iterator() { return call(); }
@Test public void testCreatePatchUsingIndex() throws Exception { insertAndAdd(points1, points2); geogig.command(CommitOp.class).setAll(true).call(); final String featureId = points1.getIdentifier().getID(); final Feature modifiedFeature = feature((SimpleFeatureType) points1.getType(), featureId, "changedProp", new Integer(1500), null); insertAndAdd(modifiedFeature); insertAndAdd(points3); deleteAndAdd(points2); delete(points3); DiffOp op = geogig.command(DiffOp.class); op.setCompareIndex(true); try (AutoCloseableIterator<DiffEntry> diffs = op.call()) { Patch patch = geogig.command(CreatePatchOp.class).setDiffs(diffs).call(); assertEquals(3, patch.count()); assertEquals(1, patch.getAddedFeatures().size()); assertEquals(1, patch.getRemovedFeatures().size()); assertEquals(1, patch.getModifiedFeatures().size()); assertEquals(RevFeatureTypeBuilder.build(pointsType), patch.getFeatureTypes().get(0)); assertEquals(NodeRef.appendChild(pointsName, idP2), patch.getRemovedFeatures().get(0).getPath()); assertEquals(NodeRef.appendChild(pointsName, idP3), patch.getAddedFeatures().get(0).getPath()); } }
/** * @param treeishOid the new {@link ObjectId} to compare against * @return {@code this} */ public DiffOp setNewVersion(ObjectId treeishOid) { return setNewVersion(treeishOid.toString()); }
/** * @param treeishOid the old {@link ObjectId} to compare against * @return {@code this} */ public DiffOp setOldVersion(ObjectId treeishOid) { return setOldVersion(treeishOid.toString()); }
private AutoCloseableIterator<DiffEntry> resolveDiff(Context geogig, PullResult result) { AutoCloseableIterator<DiffEntry> iter; if (result.getOldRef() != null && result.getOldRef().equals(result.getNewRef())) { iter = null; } else { if (result.getOldRef() == null) { iter = geogig.command(DiffOp.class).setNewVersion(result.getNewRef().getObjectId()) .setOldVersion(ObjectId.NULL).call(); } else { iter = geogig.command(DiffOp.class).setNewVersion(result.getNewRef().getObjectId()) .setOldVersion(result.getOldRef().getObjectId()).call(); } } return iter; } }
@Test public void testChangedFeatureType() throws Exception { insertAndAdd(points1, points2); geogig.getRepository().workingTree().updateTypeTree(pointsName, modifiedPointsType); List<DiffEntry> difflist = toList(diffOp.setReportTrees(true).call()); assertNotNull(difflist); assertEquals(1, difflist.size()); }
@Test public void testEmptyRepo() throws Exception { try (AutoCloseableIterator<DiffEntry> difflist = diffOp .setOldVersion(ObjectId.NULL.toString()).call()) { assertNotNull(difflist); assertFalse(difflist.hasNext()); } }
@Override public AutoCloseableIterator<DiffEntry> iterator() { return call(); }
@Test public void testCreatePatchUsingIndex() throws Exception { insertAndAdd(points1, points2); geogig.command(CommitOp.class).setAll(true).call(); final String featureId = points1.getIdentifier().getID(); final Feature modifiedFeature = feature((SimpleFeatureType) points1.getType(), featureId, "changedProp", new Integer(1500), null); insertAndAdd(modifiedFeature); insertAndAdd(points3); deleteAndAdd(points2); delete(points3); DiffOp op = geogig.command(DiffOp.class); op.setCompareIndex(true); try (AutoCloseableIterator<DiffEntry> diffs = op.call()) { Patch patch = geogig.command(CreatePatchOp.class).setDiffs(diffs).call(); assertEquals(3, patch.count()); assertEquals(1, patch.getAddedFeatures().size()); assertEquals(1, patch.getRemovedFeatures().size()); assertEquals(1, patch.getModifiedFeatures().size()); assertEquals(RevFeatureType.builder().type(pointsType).build(), patch.getFeatureTypes().get(0)); assertEquals(NodeRef.appendChild(pointsName, idP2), patch.getRemovedFeatures().get(0).getPath()); assertEquals(NodeRef.appendChild(pointsName, idP3), patch.getAddedFeatures().get(0).getPath()); } }
/** * @param treeishOid the new {@link ObjectId} to compare against * @return {@code this} */ public DiffOp setNewVersion(ObjectId treeishOid) { return setNewVersion(treeishOid.toString()); }
/** * @param treeishOid the old {@link ObjectId} to compare against * @return {@code this} */ public DiffOp setOldVersion(ObjectId treeishOid) { return setOldVersion(treeishOid.toString()); }
@Override protected FilteredDiffIterator getFilteredChanges(final Repository local, RevCommit commit) { ObjectId parent = ObjectId.NULL; if (commit.getParentIds().size() > 0) { parent = commit.getParentIds().get(0); } AutoCloseableIterator<DiffEntry> changes = remoteRepo.command(DiffOp.class) .setNewVersion(commit.getId()).setOldVersion(parent).setReportTrees(true).call(); Optional<RepositoryFilter> filter = RepositoryImpl.getFilter(local); checkState(filter.isPresent(), "No filter found for sparse clone."); return new LocalFilteredDiffIterator(changes, remoteRepo, local, filter.get()); }
.setOldVersion(commit.parentN(0).or(ObjectId.NULL)) .setNewVersion(commit.getId()).call()) { DiffEntry diffEntry; sb.append("changes\n");