@Test public void testDeleteAll() { leftTree = createHeadTree(// repoTree("roads", EMPTY_ID, null, 0), // repoTree("roads/highways", "a2", "d1", 10), // repoTree("roads/streets", "a3", "d2", 10), // repoTree("buildings", EMPTY_ID, null, 0), // repoTree("buildings/stores", "a5", "d3", 5), // repoTree("buildings/unknown", "a6", "d4", 5), // repoTree("buildings/towers", "a7", "d5", 5)// ); rightTree = createStageHeadTree(); final ObjectId newRepoRoot = command.call(); assertNotNull(newRepoRoot); ImmutableMap<String, NodeRef> refsByPath = getTreeRefsByPath(newRepoRoot); assertEquals(set(), refsByPath.keySet()); }
@Test public void testEmptyRepoSingleStagedTree() { rightTree = createStageHeadTree(// indexTree("roads", "a1", "d1", 10)// ); ObjectId newRepoRoot = command.call(); assertNotNull(newRepoRoot); // print(newRepoRoot); // check all blobs have been moved from the index to the object database verifyRepositoryTree(NodeRef.ROOT, newRepoRoot); ImmutableMap<String, NodeRef> refsByPath = getTreeRefsByPath(newRepoRoot); assertEquals(1, refsByPath.size()); assertTrue(refsByPath.keySet().contains("roads")); }
@Test public void testPathFilteringSingleFeature() { leftTree = createHeadTree(// repoTree("roads", "a1", null, 2), // repoTree("roads/highways", "a2", "d1", 1)// ); rightTree = createStageHeadTree(// repoTree("roads", "a11", null, 1), // deleted 1 feature repoTree("roads/highways", "a21", "d1", 3)// added 2 features ); MapDifference<String, NodeRef> difference; Set<String> onlyOnLeft; Set<String> onlyOnRight; difference = runWithPathFilter(leftTree, rightTree, "roads/roads.1"); onlyOnLeft = difference.entriesOnlyOnLeft().keySet(); onlyOnRight = difference.entriesOnlyOnRight().keySet(); assertEquals(set(), onlyOnLeft); assertEquals(set("roads/highways/highways.1", "roads/highways/highways.2"), onlyOnRight); assertEquals(set("roads/highways/highways.0", "roads/roads.0"), difference.entriesInCommon().keySet()); }
private void verifyTree(ObjectStore objectDb, String path, ObjectId repoTreeId) { assertTrue(String.format("tree '%s' (%s) is not present", path, repoTreeId), objectDb.exists(repoTreeId)); RevTree tree = objectDb.getTree(repoTreeId); Iterator<Node> children = RevObjects.children(tree, CanonicalNodeOrder.INSTANCE); while (children.hasNext()) { final Node node = children.next(); if (TYPE.TREE.equals(node.getType())) { path = NodeRef.appendChild(path, node.getName()); ObjectId objectId = node.getObjectId(); verifyRepositoryTree(path, objectId); } else if (TYPE.FEATURE.equals(node.getType())) { verifyFeature(node); } else { throw new IllegalStateException(node.getType().toString()); } verifyMetadata(node); } if (tree.bucketsSize() > 0) { for (Bucket b : tree.getBuckets()) { ObjectId bucketTreeId = b.getObjectId(); verifyRepositoryTree(path + "/" + bucketTreeId.toString().substring(0, 8), bucketTreeId); } } }
private RevTree createHeadTree(NodeRef... treeRefs) { RevTree root = createFromRefs(objectDb, treeRefs); objectDb.put(root); CommitBuilder cb = new CommitBuilder(geogig.getPlatform()); ObjectId treeId = root.getId(); RevCommit commit = cb.setTreeId(treeId).setCommitter("Gabriel Roldan") .setAuthor("Gabriel Roldan").build(); objectDb.put(commit); SymRef head = (SymRef) geogig.command(RefParse.class).setName(Ref.HEAD).call().get(); final String currentBranch = head.getTarget(); geogig.command(UpdateRef.class).setName(currentBranch).setNewValue(commit.getId()).call(); verifyRepositoryTree(NodeRef.ROOT, treeId); verifyTreeStructure(treeId, treeRefs); return root; }
/** * @return the differences between the given right tree(staged) and the resulting tree after * running {@link WriteTree2} with the given filters. The result's left refs are the * ones in the new tree, and the right refs the same as given in the rightTree */ private MapDifference<String, NodeRef> runWithPathFilter(RevTree leftTree, RevTree rightTree, String... filters) { // print(leftTree.getId()); // print(rightTree.getId()); final ObjectId newRepoRoot = command.setPathFilter(Arrays.asList(filters)).call(); assertNotNull(newRepoRoot); // print(newRepoRoot); // check all blobs have been moved from the index to the object database verifyRepositoryTree(NodeRef.ROOT, newRepoRoot); final boolean includeFeatures = true; ImmutableMap<String, NodeRef> stagedRefs = getRefsByPath(rightTree.getId(), includeFeatures); ImmutableMap<String, NodeRef> resultRefs = getRefsByPath(newRepoRoot, includeFeatures); MapDifference<String, NodeRef> difference = Maps.difference(resultRefs, stagedRefs); return difference; }
Preconditions.checkArgument(numFeatures != 0 || EMPTY_ID.equals(id), "for zero features trees use RevTree.EMPTY_TREE_ID"); final ObjectId treeId = id(id); final ObjectId metadataId = id(mdId); final String feturePrefix = NodeRef.nodeFromPath(path); RevTreeBuilder b = CanonicalTreeBuilder.create(db); if (numFeatures > 0) { for (int i = 0; i < numFeatures; i++) { Node fn = feature(db, feturePrefix, i); b.put(fn); RevTree fakenId = forceTreeId(b, treeId); if (!db.exists(fakenId.getId())) { db.put(fakenId);
private void verifyTreeStructure(ObjectId treeId, NodeRef... treeRefs) { Set<String> expectedPaths = ImmutableSet .copyOf(Iterables.transform(Arrays.asList(treeRefs), (nr) -> nr.path())); ImmutableMap<String, NodeRef> refs = getTreeRefsByPath(treeId); assertEquals(expectedPaths, refs.keySet()); }
@Test public void testEmptyRepo() { ObjectId root = command.call(); assertNotNull(root); assertEquals(RevTree.EMPTY_TREE_ID, root); }
private void verifyMetadata(Node node) { if (node.getMetadataId().isPresent()) { ObjectId mdId = node.getMetadataId().get(); String msg = "RevFeatureType " + mdId + " is not present (from " + node.getName() + ")"; assertTrue(msg, objectDb.exists(mdId)); } }
private RevTree createStageHeadTree(NodeRef... treeRefs) { RevTree root = createFromRefs(objectDb, treeRefs); geogig.command(UpdateRef.class).setName(Ref.STAGE_HEAD).setNewValue(root.getId()).call(); return root; }
@Override protected void setUpInternal() throws Exception { geogig = getGeogig(); command = geogig.command(WriteTree2.class); objectDb = geogig.getRepository().objectDatabase(); }
@Test public void testPathFilteringSingleFeature() { leftTree = createHeadTree(// repoTree("roads", "a1", null, 2), // repoTree("roads/highways", "a2", "d1", 1)// ); rightTree = createStageHeadTree(// repoTree("roads", "a11", null, 1), // deleted 1 feature repoTree("roads/highways", "a21", "d1", 3)// added 2 features ); MapDifference<String, NodeRef> difference; Set<String> onlyOnLeft; Set<String> onlyOnRight; difference = runWithPathFilter(leftTree, rightTree, "roads/roads.1"); onlyOnLeft = difference.entriesOnlyOnLeft().keySet(); onlyOnRight = difference.entriesOnlyOnRight().keySet(); assertEquals(set(), onlyOnLeft); assertEquals(set("roads/highways/highways.1", "roads/highways/highways.2"), onlyOnRight); assertEquals(set("roads/highways/highways.0", "roads/roads.0"), difference.entriesInCommon().keySet()); }
private void verifyTree(ObjectStore objectDb, String path, ObjectId repoTreeId) { assertTrue(String.format("tree '%s' (%s) is not present", path, repoTreeId), objectDb.exists(repoTreeId)); RevTree tree = objectDb.getTree(repoTreeId); Iterator<Node> children = RevObjects.children(tree, CanonicalNodeOrder.INSTANCE); while (children.hasNext()) { final Node node = children.next(); if (TYPE.TREE.equals(node.getType())) { path = NodeRef.appendChild(path, node.getName()); ObjectId objectId = node.getObjectId(); verifyRepositoryTree(path, objectId); } else if (TYPE.FEATURE.equals(node.getType())) { verifyFeature(node); } else { throw new IllegalStateException(node.getType().toString()); } verifyMetadata(node); } if (!tree.buckets().isEmpty()) { ImmutableCollection<Bucket> buckets = tree.buckets().values(); for (Bucket b : buckets) { ObjectId bucketTreeId = b.getObjectId(); verifyRepositoryTree(path + "/" + bucketTreeId.toString().substring(0, 8), bucketTreeId); } } }
private RevTree createHeadTree(NodeRef... treeRefs) { RevTree root = createFromRefs(objectDb, treeRefs); objectDb.put(root); RevCommitBuilder cb = RevCommit.builder().platform(geogig.getPlatform()); ObjectId treeId = root.getId(); RevCommit commit = cb.treeId(treeId).committer("Gabriel Roldan").author("Gabriel Roldan") .build(); objectDb.put(commit); SymRef head = (SymRef) geogig.command(RefParse.class).setName(Ref.HEAD).call().get(); final String currentBranch = head.getTarget(); geogig.command(UpdateRef.class).setName(currentBranch).setNewValue(commit.getId()).call(); verifyRepositoryTree(NodeRef.ROOT, treeId); verifyTreeStructure(treeId, treeRefs); return root; }
/** * @return the differences between the given right tree(staged) and the resulting tree after * running {@link WriteTree2} with the given filters. The result's left refs are the * ones in the new tree, and the right refs the same as given in the rightTree */ private MapDifference<String, NodeRef> runWithPathFilter(RevTree leftTree, RevTree rightTree, String... filters) { // print(leftTree.getId()); // print(rightTree.getId()); final ObjectId newRepoRoot = command.setPathFilter(Arrays.asList(filters)).call(); assertNotNull(newRepoRoot); // print(newRepoRoot); // check all blobs have been moved from the index to the object database verifyRepositoryTree(NodeRef.ROOT, newRepoRoot); final boolean includeFeatures = true; ImmutableMap<String, NodeRef> stagedRefs = getRefsByPath(rightTree.getId(), includeFeatures); ImmutableMap<String, NodeRef> resultRefs = getRefsByPath(newRepoRoot, includeFeatures); MapDifference<String, NodeRef> difference = Maps.difference(resultRefs, stagedRefs); return difference; }
Preconditions.checkArgument(numFeatures != 0 || EMPTY_ID.equals(id), "for zero features trees use RevTree.EMPTY_TREE_ID"); final ObjectId treeId = id(id); final ObjectId metadataId = id(mdId); final String feturePrefix = NodeRef.nodeFromPath(path); RevTreeBuilder b = RevTreeBuilder.builder(db); if (numFeatures > 0) { for (int i = 0; i < numFeatures; i++) { Node fn = feature(db, feturePrefix, i); b.put(fn); RevTree fakenId = forceTreeId(b, treeId); if (!db.exists(fakenId.getId())) { db.put(fakenId);
private void verifyTreeStructure(ObjectId treeId, NodeRef... treeRefs) { Set<String> expectedPaths = ImmutableSet .copyOf(Iterables.transform(Arrays.asList(treeRefs), (nr) -> nr.path())); ImmutableMap<String, NodeRef> refs = getTreeRefsByPath(treeId); assertEquals(expectedPaths, refs.keySet()); }
@Test public void testEmptyRepo() { ObjectId root = command.call(); assertNotNull(root); assertEquals(RevTree.EMPTY_TREE_ID, root); }
private void verifyMetadata(Node node) { if (node.getMetadataId().isPresent()) { ObjectId mdId = node.getMetadataId().get(); String msg = "RevFeatureType " + mdId + " is not present (from " + node.getName() + ")"; assertTrue(msg, objectDb.exists(mdId)); } }