public static void verifyAllReachableContents(Repository repo, RevTree tree, Stack<String> pathToObject, Set<ObjectId> allIds) { ObjectStore store = repo.objectDatabase(); Set<Node> nodes = RevObjectTestSupport.getTreeNodes(tree, store); for (Node node : nodes) { pathToObject.push(node.getName()); Optional<ObjectId> metadataId = node.getMetadataId(); if (metadataId.isPresent()) { pathToObject.push("metadata"); verifyAllReachableContents(repo, metadataId.get(), pathToObject, allIds); pathToObject.pop(); } verifyAllReachableContents(repo, node.getObjectId(), pathToObject, allIds); pathToObject.pop(); } tree.getBuckets().forEach(bucket -> { pathToObject.push("bucket[" + bucket.getIndex() + "]"); verifyAllReachableContents(repo, bucket.getObjectId(), pathToObject, allIds); pathToObject.pop(); }); } }
public static void verifyAllReachableContents(Repository repo, RevTree tree, Stack<String> pathToObject, Set<ObjectId> allIds) { ObjectStore store = repo.objectDatabase(); Set<Node> nodes = RevObjectTestSupport.getTreeNodes(tree, store); for (Node node : nodes) { pathToObject.push(node.getName()); Optional<ObjectId> metadataId = node.getMetadataId(); if (metadataId.isPresent()) { pathToObject.push("metadata"); verifyAllReachableContents(repo, metadataId.get(), pathToObject, allIds); pathToObject.pop(); } verifyAllReachableContents(repo, node.getObjectId(), pathToObject, allIds); pathToObject.pop(); } tree.buckets().forEach((index, bucket) -> { pathToObject.push("bucket[" + index + "]"); verifyAllReachableContents(repo, bucket.getObjectId(), pathToObject, allIds); pathToObject.pop(); }); } }
private static Set<ObjectId> veifyRepositoryContents(Repository repo, Map<String, Ref> allRefs) { Set<ObjectId> allIds = Sets.newConcurrentHashSet(); for (Ref ref : allRefs.values()) { if (ref instanceof SymRef) { Ref target = ref.peel(); assertTrue(format("symref points to a non existent ref: %s", ref), allRefs.containsKey(target.getName())); } else { Stack<String> pathToObject = new Stack<>(); pathToObject.push(ref.getName()); verifyAllReachableContents(repo, ref.getObjectId(), pathToObject, allIds); pathToObject.pop(); } } return allIds; }
/** * Verifies that all the reachable objects from all the refs in the repo exist in the repo's * database */ public static Set<ObjectId> verifyRepositoryContents(Repository repo) { Map<String, Ref> allRefs = Maps.uniqueIndex(repo.command(ForEachRef.class).call(), (r) -> r.getName()); allRefs = Maps.filterKeys(allRefs, (k) -> !k.equals(Ref.STAGE_HEAD) && !k.equals(Ref.WORK_HEAD)); Set<ObjectId> allIds = Sets.newConcurrentHashSet(); for (Ref ref : allRefs.values()) { if (ref instanceof SymRef) { Ref target = ref.peel(); assertTrue(format("symref points to a non existent ref: %s", ref), allRefs.containsKey(target.getName())); } else { Stack<String> pathToObject = new Stack<>(); pathToObject.push(ref.getName()); verifyAllReachableContents(repo, ref.getObjectId(), pathToObject, allIds); pathToObject.pop(); } } return allIds; }
verifyAllReachableContents(repo, ((RevTag) obj).getCommitId(), pathToObject, allIds); break; case COMMIT: assertTrue("no graph entry found for commit " + obj, repo.graphDatabase().exists(obj.getId())); verifyAllReachableContents(repo, ((RevCommit) obj).getTreeId(), pathToObject, allIds); break; case TREE: verifyAllReachableContents(repo, (RevTree) obj, pathToObject, allIds); break; case FEATURE:
verifyAllReachableContents(repo, ((RevTag) obj).getCommitId(), pathToObject, allIds); break; case COMMIT: assertTrue("no graph entry found for commit " + obj, repo.graphDatabase().exists(obj.getId())); verifyAllReachableContents(repo, ((RevCommit) obj).getTreeId(), pathToObject, allIds); break; case TREE: verifyAllReachableContents(repo, (RevTree) obj, pathToObject, allIds); break; case FEATURE: