SVNDebugLog.getDefaultLog().info("closest copy: " + tempClCopy.getPath() + ", " + tempClCopy.getRevisionRoot().getRevision());
    public int getLocations(String path, long pegRevision, long[] revisions, ISVNLocationEntryHandler handler) throws SVNException {        assertValidRevision(pegRevision);        for (int i = 0; i < revisions.length; i++) {            assertValidRevision(revisions[i]);        }        try {            openRepository();            path = getRepositoryPath(path);            ArrayList locationEntries = new ArrayList(0);            long[] locationRevs = new long[revisions.length];            long revision;            Arrays.sort(revisions);            for (int i = 0; i < revisions.length; ++i) {                locationRevs[i] = revisions[revisions.length - (i + 1)];            }            int count = 0;            boolean isAncestor = false;                        for (count = 0; count < locationRevs.length && locationRevs[count] > pegRevision; ++count) {                isAncestor = FSNodeHistory.checkAncestryOfPegPath(path, pegRevision, locationRevs[count], myFSFS);                if (isAncestor) {                    break;                }            }                        if (count >= locationRevs.length) {                return 0;            }            revision = isAncestor ? locationRevs[count] : pegRevision;            FSRevisionRoot root = null;            while (count < revisions.length) {                SVNDebugLog.getDefaultLog().info("looking at rev: " + revision);                root = myFSFS.createRevisionRoot(revision);                FSClosestCopy tempClCopy = closestCopy(root, path);                SVNDebugLog.getDefaultLog().info("closest copy: " + tempClCopy.getPath() + ", " + tempClCopy.getRevisionRoot().getRevision());                if (tempClCopy == null) {                    break;                }                FSRevisionRoot croot = tempClCopy.getRevisionRoot();                if (croot == null) {                    break;                }                String cpath = tempClCopy.getPath();                long crev = croot.getRevision();                while ((count < revisions.length) && (locationRevs[count] >= crev)) {                    locationEntries.add(new SVNLocationEntry(locationRevs[count], path));                    ++count;                }                FSRevisionNode copyfromNode = croot.getRevisionNode(cpath);                String copyfromPath = copyfromNode.getCopyFromPath();                long copyfromRevision = copyfromNode.getCopyFromRevision();                while ((count < revisions.length) && locationRevs[count] > copyfromRevision) {                    ++count;                }                                String remainder = path.equals(cpath) ? "" : SVNPathUtil.pathIsChild(cpath, path);                path = SVNPathUtil.concatToAbs(copyfromPath, remainder);                revision = copyfromRevision;            }                        root = myFSFS.createRevisionRoot(revision);            FSRevisionNode curNode = root.getRevisionNode(path);            while (count < revisions.length) {                root = myFSFS.createRevisionRoot(locationRevs[count]);                if (root.checkNodeKind(path) == SVNNodeKind.NONE) {                    break;                }                FSRevisionNode currentNode = root.getRevisionNode(path);                if (!curNode.getId().isRelated(currentNode.getId())) {                    break;                }                locationEntries.add(new SVNLocationEntry(locationRevs[count], path));                ++count;            }                        for (count = 0; count < locationEntries.size(); count++) {                if (handler != null) {                    handler.handleLocationEntry((SVNLocationEntry) locationEntries.get(count));                }            }            return count;        } finally {            closeRepository();        }    }