/** * @param treeishOid the old {@link ObjectId} to compare against * @return {@code this} */ public DiffOp setOldVersion(ObjectId treeishOid) { return setOldVersion(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()); }
@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()); }
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(); }
@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(); } } });
@Test public void testReportTrees() throws Exception { insert(points1); insert(lines1); List<DiffEntry> difflist = toList(diffOp.setReportTrees(true).setOldVersion(ObjectId.NULL) .setNewVersion(Ref.WORK_HEAD).call()); assertNotNull(difflist); assertEquals(4, difflist.size()); Set<String> expected = ImmutableSet.of(linesName, pointsName, NodeRef.appendChild(linesName, idL1), NodeRef.appendChild(pointsName, idP1)); Set<String> actual = Sets.newHashSet(Collections2.transform(difflist, (e) -> e.newPath())); assertEquals(expected, actual); }
@Test public void testReportTrees() throws Exception { insert(points1); insert(lines1); List<DiffEntry> difflist = toList(diffOp.setReportTrees(true).setOldVersion(ObjectId.NULL) .setNewVersion(Ref.WORK_HEAD).call()); assertNotNull(difflist); assertEquals(4, difflist.size()); Set<String> expected = ImmutableSet.of(linesName, pointsName, NodeRef.appendChild(linesName, idL1), NodeRef.appendChild(pointsName, idP1)); Set<String> actual = Sets.newHashSet(Collections2.transform(difflist, (e) -> e.newPath())); assertEquals(expected, actual); }
@Test public void testEmptyRepo() throws Exception { try (AutoCloseableIterator<DiffEntry> difflist = diffOp .setOldVersion(ObjectId.NULL.toString()).call()) { assertNotNull(difflist); assertFalse(difflist.hasNext()); } }
@Test public void testEmptyRepo() throws Exception { try (AutoCloseableIterator<DiffEntry> difflist = diffOp .setOldVersion(ObjectId.NULL.toString()).call()) { assertNotNull(difflist); assertFalse(difflist.hasNext()); } }
@Test public void testNoChangeSameCommit() throws Exception { insertAndAdd(points1); final RevCommit commit = geogig.command(CommitOp.class).setAll(true).call(); assertFalse(diffOp.setOldVersion(commit.getId().toString()) .setNewVersion(commit.getId().toString()).call().hasNext()); }
@Test public void testNoChangeSameCommit() throws Exception { insertAndAdd(points1); final RevCommit commit = geogig.command(CommitOp.class).setAll(true).call(); assertFalse(diffOp.setOldVersion(commit.getId().toString()) .setNewVersion(commit.getId().toString()).call().hasNext()); }
@Test public void testSingleAdditionReverseOrder() throws Exception { final ObjectId newOid = insertAndAdd(points1); final RevCommit commit = geogig.command(CommitOp.class).setAll(true).call(); List<DiffEntry> difflist = toList( diffOp.setOldVersion(commit.getId()).setNewVersion(ObjectId.NULL).call()); assertNotNull(difflist); assertEquals(1, difflist.size()); DiffEntry de = difflist.get(0); assertNull(de.getNewObject()); assertNotNull(de.getOldObject()); assertEquals(DiffEntry.ChangeType.REMOVED, de.changeType()); assertEquals(ObjectId.NULL, de.newObjectId()); assertEquals(newOid, de.oldObjectId()); assertFalse(de.getOldObject().getMetadataId().isNull()); }
@Test public void testFilterNamespaceNoChanges() throws Exception { // two commits on different trees insertAndAdd(points1); final RevCommit commit1 = geogig.command(CommitOp.class).setAll(true).call(); insertAndAdd(lines1); final RevCommit commit2 = geogig.command(CommitOp.class).setAll(true).call(); diffOp.setOldVersion(commit1.getId()).setNewVersion(commit2.getId()); diffOp.setFilter(pointsName); try (AutoCloseableIterator<DiffEntry> diffs = diffOp.call()) { assertFalse(diffs.hasNext()); } }
@Test public void testFilterTypeNameNoChanges() throws Exception { // two commits on different trees insertAndAdd(points1); final RevCommit commit1 = geogig.command(CommitOp.class).setAll(true).call(); insertAndAdd(lines1); final RevCommit commit2 = geogig.command(CommitOp.class).setAll(true).call(); diffOp.setOldVersion(commit1.getId()).setNewVersion(commit2.getId()); diffOp.setFilter(pointsName); try (AutoCloseableIterator<DiffEntry> diffs = diffOp.call()) { assertFalse(diffs.hasNext()); } }
@Test public void testFilterNamespaceNoChanges() throws Exception { // two commits on different trees insertAndAdd(points1); final RevCommit commit1 = geogig.command(CommitOp.class).setAll(true).call(); insertAndAdd(lines1); final RevCommit commit2 = geogig.command(CommitOp.class).setAll(true).call(); diffOp.setOldVersion(commit1.getId()).setNewVersion(commit2.getId()); diffOp.setFilter(pointsName); try (AutoCloseableIterator<DiffEntry> diffs = diffOp.call()) { assertFalse(diffs.hasNext()); } }
@Test public void testFilterTypeNameNoChanges() throws Exception { // two commits on different trees insertAndAdd(points1); final RevCommit commit1 = geogig.command(CommitOp.class).setAll(true).call(); insertAndAdd(lines1); final RevCommit commit2 = geogig.command(CommitOp.class).setAll(true).call(); diffOp.setOldVersion(commit1.getId()).setNewVersion(commit2.getId()); diffOp.setFilter(pointsName); try (AutoCloseableIterator<DiffEntry> diffs = diffOp.call()) { assertFalse(diffs.hasNext()); } }
@Test public void testFilterDidntMatchAnything() throws Exception { // two commits on different trees insertAndAdd(points1); final RevCommit commit1 = geogig.command(CommitOp.class).setAll(true).call(); insertAndAdd(lines1); final RevCommit commit2 = geogig.command(CommitOp.class).setAll(true).call(); // set a filter that doesn't produce any match diffOp.setOldVersion(commit1.getId()).setNewVersion(commit2.getId()); diffOp.setFilter(NodeRef.appendChild(pointsName, "nonExistentId")); try (AutoCloseableIterator<DiffEntry> diffs = diffOp.call()) { assertNotNull(diffs); assertFalse(diffs.hasNext()); } }
@Test public void testFilterFeatureIdNoChanges() throws Exception { // two commits on different trees insertAndAdd(points1); final RevCommit commit1 = geogig.command(CommitOp.class).setAll(true).call(); insertAndAdd(lines1); final RevCommit commit2 = geogig.command(CommitOp.class).setAll(true).call(); // filter on feature1_1, it didn't change between commit2 and commit1 diffOp.setOldVersion(commit1.getId()).setNewVersion(commit2.getId()); diffOp.setFilter(NodeRef.appendChild(pointsName, points1.getIdentifier().getID())); try (AutoCloseableIterator<DiffEntry> diffs = diffOp.call()) { assertFalse(diffs.hasNext()); } }
@Test public void testFilterFeatureIdNoChanges() throws Exception { // two commits on different trees insertAndAdd(points1); final RevCommit commit1 = geogig.command(CommitOp.class).setAll(true).call(); insertAndAdd(lines1); final RevCommit commit2 = geogig.command(CommitOp.class).setAll(true).call(); // filter on feature1_1, it didn't change between commit2 and commit1 diffOp.setOldVersion(commit1.getId()).setNewVersion(commit2.getId()); diffOp.setFilter(NodeRef.appendChild(pointsName, points1.getIdentifier().getID())); try (AutoCloseableIterator<DiffEntry> diffs = diffOp.call()) { assertFalse(diffs.hasNext()); } }