SVNDebugLog.logInfo("fetched: " + url);
    protected SVNRepositoryLocation[] getLocations(SVNURL url, File path, SVNRevision revision, SVNRevision start, SVNRevision end) throws SVNException {        if (!revision.isValid() || !start.isValid()) {            SVNErrorManager.error("svn: Bad revision '" + revision + "' or '" + start + "'");        }        long pegRevisionNumber = -1;        long startRevisionNumber;        long endRevisionNumber;                if (path != null && url == null) {            SVNWCAccess wcAccess = createWCAccess(path);            SVNEntry entry = wcAccess.getTargetEntry();            if (entry.getCopyFromURL() != null && revision == SVNRevision.WORKING) {                url = entry.getCopyFromSVNURL();                pegRevisionNumber = entry.getCopyFromRevision();            } else if (entry.getURL() != null){                url = entry.getSVNURL();            } else {                SVNErrorManager.error("svn: '" + path + "' has no URL");            }        }        SVNRepository repository = createRepository(url);        if (pegRevisionNumber < 0) {            pegRevisionNumber = getRevisionNumber(revision, repository, path);        }        startRevisionNumber = getRevisionNumber(start, repository, path);        if (!end.isValid()) {            endRevisionNumber = startRevisionNumber;        } else {            endRevisionNumber = getRevisionNumber(end, repository, path);        }        SVNURL rootURL = repository.getRepositoryRoot(true);        long[] revisionsRange = startRevisionNumber == endRevisionNumber ?                 new long[] {startRevisionNumber} : new long[] {startRevisionNumber, endRevisionNumber};                                Map locations = repository.getLocations("", (Map) null, pegRevisionNumber, revisionsRange);        SVNLocationEntry startPath = (SVNLocationEntry) locations.get(new Long(startRevisionNumber));        SVNLocationEntry endPath = (SVNLocationEntry) locations.get(new Long(endRevisionNumber));                if (startPath == null) {            Object source = path != null ? (Object) path : (Object) url;            SVNErrorManager.error("svn: Unable to find repository location for '" + source + "' in revision " + startRevisionNumber);        }        if (endPath == null) {            Object source = path != null ? (Object) path : (Object) url;            SVNErrorManager.error("The location for '" + source + "' for revision " + endRevisionNumber +" does not exist in the " +                                    "repository or refers to an unrelated object");                    }                SVNRepositoryLocation[] result = new SVNRepositoryLocation[2];        SVNURL startURL = SVNURL.parseURIEncoded(SVNPathUtil.append(rootURL.toString(), SVNEncodingUtil.uriEncode(startPath.getPath())));        result[0] = new SVNRepositoryLocation(startURL, startRevisionNumber);        if (end.isValid()) {            SVNURL endURL = SVNURL.parseURIEncoded(SVNPathUtil.append(rootURL.toString(), SVNEncodingUtil.uriEncode(endPath.getPath())));            result[1] = new SVNRepositoryLocation(endURL, endRevisionNumber);        }        return result;    }