/** * Get all the next set of nodes from the iterator with the same path. * * @param iterator * @return */ private List<DiffEntry> nextPath(PeekingIterator<DiffEntry> iterator) { List<DiffEntry> entries = new ArrayList<DiffEntry>(); DiffEntry next = iterator.next(); entries.add(next); String name = next.oldName() != null ? next.oldName() : next.newName(); while (iterator.hasNext()) { DiffEntry peeked = iterator.peek(); String peekedName = peeked.oldName() != null ? peeked.oldName() : peeked.newName(); if (name.equals(peekedName)) { entries.add(iterator.next()); } else { break; } } return entries; }
@Override protected void export(final String refSpec, final DataStore targetStore, final String targetTableName, final ProgressListener progress) { Preconditions.checkArgument(oldRef != null, "Old ref not specified."); Preconditions.checkArgument(getSourceCommitish() != null, "New ref not specified."); changedNodes.clear(); InterchangeFormat format = new InterchangeFormat(geopackage, context()); try (final AutoCloseableIterator<DiffEntry> diff = context.command(DiffOp.class) .setOldVersion(oldRef).setNewVersion(getSourceCommitish()) .setFilter(targetTableName).call()) { while (diff.hasNext()) { DiffEntry entry = diff.next(); changedNodes.put(entry.newName() != null ? entry.newName() : entry.oldName(), entry.changeType()); } } super.export(refSpec, targetStore, targetTableName, progress); try { format.createFIDMappingTable(fidMappings, targetTableName); // create change log format.createChangeLog(targetTableName, changedNodes); } catch (SQLException | IOException e) { throw new RuntimeException(e); } }
@Test public void testAddUpdateWithPathFilter() throws Exception { insertAndAdd(points1); geogig.command(CommitOp.class).call(); insert(points1_modified); insert(lines1); // stage only Lines changed geogig.command(AddOp.class).setUpdateOnly(true).addPattern(pointsName).call(); List<DiffEntry> staged = toList(repo.index().getStaged(null)); assertEquals(2, staged.size()); assertEquals(pointsName, staged.get(0).newName()); assertEquals(idP1, staged.get(1).newName()); List<DiffEntry> unstaged = toList(repo.workingTree().getUnstaged(null)); assertEquals(2, unstaged.size()); assertEquals(linesName, unstaged.get(0).newName()); assertEquals(idL1, unstaged.get(1).newName()); geogig.command(AddOp.class).setUpdateOnly(true).addPattern("Points").call(); unstaged = toList(repo.workingTree().getUnstaged(null)); assertEquals(2, unstaged.size()); assertEquals(linesName, unstaged.get(0).newName()); assertEquals(idL1, unstaged.get(1).newName()); }
@Test public void testAddMultipleFeaturesWithPathFilter() throws Exception { insert(points1); insert(points2); insert(lines1); geogig.command(AddOp.class).addPattern("Points").call(); List<DiffEntry> unstaged = toList(repo.workingTree().getUnstaged(null)); assertEquals(2, unstaged.size()); assertEquals(linesName, unstaged.get(0).newName()); assertEquals(ChangeType.ADDED, unstaged.get(0).changeType()); assertEquals(TYPE.TREE, unstaged.get(0).getNewObject().getType()); }
@Test public void testAddNewPathUsingPathFilter() throws Exception { insert(points1); insert(points2); geogig.command(AddOp.class).addPattern("Points/Points.1").call(); List<DiffEntry> unstaged = toList(repo.index().getStaged(null)); assertEquals(unstaged.toString(), 2, unstaged.size()); assertEquals(ChangeType.ADDED, unstaged.get(0).changeType()); assertEquals(RevObject.TYPE.TREE, unstaged.get(0).getNewObject().getType()); assertEquals("Points", unstaged.get(0).newName()); RevFeatureType ft = RevFeatureType.builder().type(pointsType).build(); ObjectId expectedTreeMdId = ft.getId(); assertEquals(expectedTreeMdId, unstaged.get(0).getNewObject().getMetadataId()); assertEquals(ChangeType.ADDED, unstaged.get(1).changeType()); assertEquals(RevObject.TYPE.FEATURE, unstaged.get(1).getNewObject().getType()); assertEquals("Points.1", unstaged.get(1).newName()); assertFalse("feature node's metadata id should not be set, as it uses the parent tree one", unstaged.get(1).getNewObject().getNode().getMetadataId().isPresent()); }
@Test public void testAddUpdate() throws Exception { insert(points1); geogig.command(AddOp.class).call(); geogig.command(CommitOp.class).call(); insert(points1_modified); insert(lines1); geogig.command(AddOp.class).setUpdateOnly(true).call(); List<DiffEntry> unstaged = toList(repo.workingTree().getUnstaged(null)); assertEquals(2, unstaged.size()); assertEquals(linesName, unstaged.get(0).newName()); assertEquals(lines1.getIdentifier().getID(), unstaged.get(1).newName()); }
if (NodeRef.ROOT.equals(diff.newName()) || NodeRef.ROOT.equals(diff.oldName())) { continue;
@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()); }
assertEquals(ObjectId.NULL, entry.newObjectId()); assertEquals(ObjectId.NULL, entry.newMetadataId()); assertEquals(null, entry.newName()); assertEquals(null, entry.newObjectType()); assertEquals(null, entry.newPath()); assertEquals(node.getObjectId(), entry.newObjectId()); assertEquals(node.getMetadataId().get(), entry.newMetadataId()); assertEquals(node.getName(), entry.newName()); assertEquals(node.getType(), entry.newObjectType()); assertEquals(nodeRef.path(), entry.newPath()); assertEquals(node2.getObjectId(), entry.newObjectId()); assertEquals(node2.getMetadataId().get(), entry.newMetadataId()); assertEquals(node2.getName(), entry.newName()); assertEquals(node2.getType(), entry.newObjectType()); assertEquals(nodeRef2.path(), entry.newPath());