@Test public void testSingleDeletion() throws Exception { final ObjectId featureContentId = insertAndAdd(points1); final RevCommit addCommit = geogig.command(CommitOp.class).setAll(true).call(); assertTrue(deleteAndAdd(points1)); final RevCommit deleteCommit = geogig.command(CommitOp.class).setAll(true).call(); List<DiffEntry> difflist = toList( diffOp.setOldVersion(addCommit.getId()).setNewVersion(deleteCommit.getId()).call()); final String path = NodeRef.appendChild(pointsName, points1.getIdentifier().getID()); assertNotNull(difflist); assertEquals(1, difflist.size()); DiffEntry de = difflist.get(0); assertEquals(path, de.oldPath()); assertEquals(DiffEntry.ChangeType.REMOVED, de.changeType()); assertEquals(featureContentId, de.oldObjectId()); assertEquals(ObjectId.NULL, de.newObjectId()); }
@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 testReportTreesEmptyTreeFromFeatureDeletion() throws Exception { insert(lines1); delete(lines1); List<DiffEntry> difflist = toList(diffOp.setReportTrees(true).setOldVersion(ObjectId.NULL) .setNewVersion(Ref.WORK_HEAD).call()); assertNotNull(difflist); assertEquals(1, difflist.size()); assertEquals(linesName, difflist.get(0).newName()); DiffEntry de = difflist.get(0); assertNull(de.getOldObject()); assertNotNull(de.getNewObject()); assertEquals(linesName, de.newPath()); assertEquals(DiffEntry.ChangeType.ADDED, de.changeType()); assertEquals(ObjectId.NULL, de.oldObjectId()); assertFalse(de.getNewObject().getMetadataId().isNull()); }
@Test public void testTreeModifiedByAddingExtraFeature() throws Exception { insertAndAdd(points1, points2); insert(points3); List<DiffEntry> difflist = toList(diffOp.setReportTrees(true).call()); assertNotNull(difflist); assertEquals(2, difflist.size()); assertEquals(ChangeType.MODIFIED, difflist.get(0).changeType()); assertEquals(TYPE.TREE, difflist.get(0).getOldObject().getType()); assertEquals(ChangeType.ADDED, difflist.get(1).changeType()); assertEquals(TYPE.FEATURE, difflist.get(1).getNewObject().getType()); }
@Test public void testReportRename() throws Exception { insertAndAdd(lines1); final RevCommit commit1 = geogig.command(CommitOp.class).setAll(true).call(); Feature lines1B = feature(linesType, idL2, "StringProp2_1", new Integer(1000), "LINESTRING (1 1, 2 2)"); delete(lines1); // insert(lines2); WorkingTree workTree = repo.workingTree(); Name name = lines1.getType().getName(); String parentPath = name.getLocalPart(); workTree.insert(featureInfo(parentPath, lines1B)); geogig.command(AddOp.class).call(); RevCommit commit2 = geogig.command(CommitOp.class).setAll(true).call(); List<DiffEntry> diffs; diffOp.setOldVersion(commit1.getId()); diffOp.setNewVersion(commit2.getId()); diffs = toList(diffOp.call()); assertEquals(2, diffs.size()); // this is reported as an addition and a removal, with both // nodes pointing to same ObjectId assertEquals(diffs.get(0).newObjectId(), diffs.get(1).oldObjectId()); assertEquals(diffs.get(1).newObjectId(), diffs.get(0).oldObjectId()); }
@Test public void testDiffPreconditions() throws Exception { try (AutoCloseableIterator<DiffEntry> difflist = geogig.command(DiffOp.class).call()) { assertNotNull(difflist); assertFalse(difflist.hasNext()); } final ObjectId oid1 = insertAndAdd(points1); final RevCommit commit1_1 = geogig.command(CommitOp.class).call(); try { diffOp.setOldVersion(oid1.toString()).setNewVersion(Ref.HEAD).call(); fail("Expected IAE as oldVersion is not a commit"); } catch (IllegalArgumentException e) { assertTrue(e.getMessage(), e.getMessage().contains(oid1.toString())); assertTrue(e.getMessage(), e.getMessage().contains("doesn't resolve to a tree-ish object")); } try { diffOp.setOldVersion(commit1_1.getId().toString()).setNewVersion(oid1.toString()) .call(); fail("Expected IAE as newVersion is not a commit"); } catch (IllegalArgumentException e) { assertTrue(e.getMessage(), e.getMessage().contains(oid1.toString())); assertTrue(e.getMessage(), e.getMessage().contains("doesn't resolve to a tree-ish object")); } }
@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 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 testEmptyRepo() throws Exception { try (AutoCloseableIterator<DiffEntry> difflist = diffOp .setOldVersion(ObjectId.NULL.toString()).call()) { assertNotNull(difflist); assertFalse(difflist.hasNext()); } }
@Test public void testTreeModifiedByAddingExtraFeature() throws Exception { insertAndAdd(points1, points2); insert(points3); List<DiffEntry> difflist = toList(diffOp.setReportTrees(true).call()); assertNotNull(difflist); assertEquals(2, difflist.size()); assertEquals(ChangeType.MODIFIED, difflist.get(0).changeType()); assertEquals(TYPE.TREE, difflist.get(0).getOldObject().getType()); assertEquals(ChangeType.ADDED, difflist.get(1).changeType()); assertEquals(TYPE.FEATURE, difflist.get(1).getNewObject().getType()); }
@Test public void testReportRename() throws Exception { insertAndAdd(lines1); final RevCommit commit1 = geogig.command(CommitOp.class).setAll(true).call(); Feature lines1B = feature(linesType, idL2, "StringProp2_1", new Integer(1000), "LINESTRING (1 1, 2 2)"); delete(lines1); // insert(lines2); WorkingTree workTree = repo.workingTree(); Name name = lines1.getType().getName(); String parentPath = name.getLocalPart(); workTree.insert(featureInfo(parentPath, lines1B)); geogig.command(AddOp.class).call(); RevCommit commit2 = geogig.command(CommitOp.class).setAll(true).call(); List<DiffEntry> diffs; diffOp.setOldVersion(commit1.getId()); diffOp.setNewVersion(commit2.getId()); diffs = toList(diffOp.call()); assertEquals(2, diffs.size()); // this is reported as an addition and a removal, with both // nodes pointing to same ObjectId assertEquals(diffs.get(0).newObjectId(), diffs.get(1).oldObjectId()); assertEquals(diffs.get(1).newObjectId(), diffs.get(0).oldObjectId()); }
@Test public void testDiffPreconditions() throws Exception { try (AutoCloseableIterator<DiffEntry> difflist = geogig.command(DiffOp.class).call()) { assertNotNull(difflist); assertFalse(difflist.hasNext()); } final ObjectId oid1 = insertAndAdd(points1); final RevCommit commit1_1 = geogig.command(CommitOp.class).call(); try { diffOp.setOldVersion(oid1.toString()).setNewVersion(Ref.HEAD).call(); fail("Expected IAE as oldVersion is not a commit"); } catch (IllegalArgumentException e) { assertTrue(e.getMessage(), e.getMessage().contains(oid1.toString())); assertTrue(e.getMessage(), e.getMessage().contains("doesn't resolve to a tree-ish object")); } try { diffOp.setOldVersion(commit1_1.getId().toString()).setNewVersion(oid1.toString()) .call(); fail("Expected IAE as newVersion is not a commit"); } catch (IllegalArgumentException e) { assertTrue(e.getMessage(), e.getMessage().contains(oid1.toString())); assertTrue(e.getMessage(), e.getMessage().contains("doesn't resolve to a tree-ish object")); } }
@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 testEmptyRepo() throws Exception { try (AutoCloseableIterator<DiffEntry> difflist = diffOp .setOldVersion(ObjectId.NULL.toString()).call()) { assertNotNull(difflist); assertFalse(difflist.hasNext()); } }
@SuppressWarnings("unused") @Test public void testTreeDeletes() throws Exception { // two commits on different trees final ObjectId oid11 = insertAndAdd(points1); final ObjectId oid12 = insertAndAdd(points2); final ObjectId oid13 = insertAndAdd(points3); final RevCommit commit1 = geogig.command(CommitOp.class).setAll(true).call(); final ObjectId oid21 = insertAndAdd(lines1); final ObjectId oid22 = insertAndAdd(lines2); final RevCommit commit2 = geogig.command(CommitOp.class).setAll(true).call(); deleteAndAdd(points1); deleteAndAdd(points2); deleteAndAdd(points3); final RevCommit commit3 = geogig.command(CommitOp.class).setAll(true).call(); List<DiffEntry> diffs; // filter on namespace1, no changes between commit1 and commit2 diffOp.setOldVersion(commit1.getId()); diffOp.setNewVersion(Ref.HEAD); diffOp.setFilter(pointsName); diffs = toList(diffOp.call()); assertEquals(3, diffs.size()); }
@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 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 testReportTreesEmptyTreeFromFeatureDeletion() throws Exception { insert(lines1); delete(lines1); List<DiffEntry> difflist = toList(diffOp.setReportTrees(true).setOldVersion(ObjectId.NULL) .setNewVersion(Ref.WORK_HEAD).call()); assertNotNull(difflist); assertEquals(1, difflist.size()); assertEquals(linesName, difflist.get(0).newName()); DiffEntry de = difflist.get(0); assertNull(de.getOldObject()); assertNotNull(de.getNewObject()); assertEquals(linesName, de.newPath()); assertEquals(DiffEntry.ChangeType.ADDED, de.changeType()); assertEquals(ObjectId.NULL, de.oldObjectId()); assertFalse(de.getNewObject().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()); } }