/** * @return the tree referenced by the old ref, or the head of the index. */ private RevTree getTree(@Nullable String refSpec, @Nullable ObjectId treeId) { checkState(refSpec == null || treeId == null); final RevTree headTree; Optional<ObjectId> resolved = refSpec == null ? Optional.of(treeId) : command(ResolveTreeish.class).setTreeish(refSpec).call(); if (resolved.isPresent()) { ObjectId headTreeId = resolved.get(); headTree = objectDatabase().getTree(headTreeId); } else { headTree = RevTree.EMPTY; } return headTree; }
@Override protected DiffObjectCount _call() { checkState(oldRefSpec != null || oldTreeId != null || oldTree != null, "old ref spec not provided"); checkState(newRefSpec != null || newTreeId != null || newTree != null, "new ref spec not provided"); final ObjectStore leftSource = this.leftSource == null ? objectDatabase() : this.leftSource; final ObjectStore rightSource = this.rightSource == null ? objectDatabase() : this.rightSource; final RevTree oldTree = getTree(oldRefSpec, oldTreeId, this.oldTree, leftSource); final RevTree newTree = getTree(newRefSpec, newTreeId, this.newTree, rightSource); DiffObjectCount diffCount; PreOrderDiffWalk visitor = new PreOrderDiffWalk(oldTree, newTree, leftSource, rightSource); DiffCountConsumer counter = new DiffCountConsumer(leftSource, rightSource); PreOrderDiffWalk.Consumer filter = counter; if (!pathFilters.isEmpty()) { filter = new PathFilteringDiffConsumer(pathFilters, counter); } visitor.walk(filter); diffCount = counter.get(); return diffCount; }
@Override protected DiffObjectCount _call() { checkState(oldRefSpec != null || oldTreeId != null, "old ref spec not provided"); checkState(newRefSpec != null || newTreeId != null, "new ref spec not provided"); final RevTree oldTree = getTree(oldRefSpec, oldTreeId); final RevTree newTree = getTree(newRefSpec, newTreeId); DiffObjectCount diffCount; ObjectDatabase index = objectDatabase(); PreOrderDiffWalk visitor = new PreOrderDiffWalk(oldTree, newTree, index, index); DiffCountConsumer counter = new DiffCountConsumer(index); PreOrderDiffWalk.Consumer filter = counter; if (!pathFilters.isEmpty()) { filter = new PathFilteringDiffConsumer(pathFilters, counter); } visitor.walk(filter); diffCount = counter.get(); return diffCount; }