public long doCopy(File srcPath, SVNRevision srcPegRevision, SVNRevision srcRevision, File dstPath, SVNRevision dstPegRevision, SVNRevision dstRevision,
public SVNCommitInfo doCopy(File srcPath, SVNRevision srcPegRevision, SVNRevision srcRevision, File dstPath, SVNRevision dstPegRevision, SVNRevision dstRevision,
    public long doCopy(File srcPath, SVNRevision srcPegRevision, SVNRevision srcRevision, File dstPath, SVNRevision dstPegRevision, SVNRevision dstRevision,                       boolean force, boolean move, String commitMessage) throws SVNException {        if (srcRevision == null || !srcRevision.isValid()) {            srcRevision = SVNRevision.WORKING;        }        if (dstRevision == null || !dstRevision.isValid()) {            dstRevision = SVNRevision.WORKING;        }        if (dstRevision != SVNRevision.HEAD && dstRevision != SVNRevision.WORKING) {            SVNErrorManager.error("svn: Only HEAD or WORKING revision could be specified as copy or move target revision");        }        if (srcRevision == SVNRevision.WORKING && dstRevision == SVNRevision.WORKING) {            // wc->wc            wc2wcCopy(srcPath, dstPath, force, move);        } else if (srcRevision == SVNRevision.WORKING) {            // wc->url            if (move) {                SVNErrorManager.error("svn: Only WC to WC or URL to URL move is supported");            }            SVNWCAccess dstAccess = createWCAccess(srcPath);            String dstURL = dstAccess.getTargetEntryProperty(SVNProperty.URL);            if (dstPegRevision == null || !dstPegRevision.isValid()) {                dstPegRevision = SVNRevision.parse(dstAccess.getTargetEntryProperty(SVNProperty.REVISION));            }            dstURL = getURL(dstURL, dstPegRevision, SVNRevision.HEAD);            return wc2urlCopy(srcPath, dstURL, commitMessage);        } else if (dstRevision == SVNRevision.WORKING) {            // url->wc            if (move) {                SVNErrorManager.error("svn: Only WC to WC or URL to URL move is supported");            }            SVNWCAccess srcAccess = createWCAccess(srcPath);            String srcURL = srcAccess.getTargetEntryProperty(SVNProperty.URL);            if (srcPegRevision == null || !srcPegRevision.isValid()) {                srcPegRevision = SVNRevision.parse(srcAccess.getTargetEntryProperty(SVNProperty.REVISION));            }            long srcRevNumber = getRevisionNumber(srcPath, srcRevision);            srcURL = getURL(srcURL, srcPegRevision, SVNRevision.create(srcRevNumber));            url2wcCopy(srcURL, srcRevNumber, dstPath);        } else {            // url->url            SVNWCAccess srcAccess = createWCAccess(srcPath);            SVNWCAccess dstAccess = createWCAccess(srcPath);            String srcURL = srcAccess.getTargetEntryProperty(SVNProperty.URL);            String dstURL = dstAccess.getTargetEntryProperty(SVNProperty.URL);            if (srcPegRevision == null || !srcPegRevision.isValid()) {                srcPegRevision = SVNRevision.parse(srcAccess.getTargetEntryProperty(SVNProperty.REVISION));            }            if (dstPegRevision == null || !dstPegRevision.isValid()) {                dstPegRevision = SVNRevision.parse(dstAccess.getTargetEntryProperty(SVNProperty.REVISION));            }            long srcRevNumber = getRevisionNumber(srcPath, srcRevision);            srcURL = getURL(srcURL, srcPegRevision, SVNRevision.create(srcRevNumber));            dstURL = getURL(dstURL, dstPegRevision, SVNRevision.HEAD);            return url2urlCopy(srcURL, srcRevNumber, dstURL, commitMessage, move);        }        return -1;    }