doAnnotate(path.getAbsolutePath(), startRev, tmpFile, repos, endRev, handler);
doAnnotate(path.getAbsolutePath(), startRev, tmpFile, repos, endRev, handler, null);
    public void doAnnotate(File path, SVNRevision pegRevision, SVNRevision startRevision, SVNRevision endRevision, ISVNAnnotateHandler handler) throws SVNException {        if (startRevision == null || !startRevision.isValid()) {            startRevision = SVNRevision.create(1);        }        SVNRepository repos = createRepository(null, path, pegRevision, endRevision);        long endRev = getRevisionNumber(endRevision, repos, path);        long startRev = getRevisionNumber(startRevision, repos, path);        if (endRev < startRev) {            SVNErrorManager.error(SVNErrorMessage.create(SVNErrorCode.CLIENT_BAD_REVISION, "Start revision must precede end revision"));        }        File tmpFile = new File(path.getParentFile(), SVNFileUtil.getAdminDirectoryName());        tmpFile = new File(tmpFile, "tmp/text-base");        if (!tmpFile.isDirectory()) {            tmpFile = SVNFileUtil.createTempDirectory("annotate");        }        doAnnotate(path.getAbsolutePath(), startRev, tmpFile, repos, endRev, handler);    }