SVNCopyClient.copyProperties(srcAccess, dstAccess, dstAccess.getTargetName());
    public void doVirtualCopy(File src, File dst, boolean move) throws SVNException {        SVNFileType srcType  = SVNFileType.getType(src);        SVNFileType dstType  = SVNFileType.getType(dst);                String opName = move ? "move" : "copy";        if (move && srcType != SVNFileType.NONE) {            SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.ENTRY_EXISTS, "Cannot perform 'virtual' {0}: ''{1}'' still exists", new Object[] {opName, src});            SVNErrorManager.error(err);        }        if (dstType == SVNFileType.NONE) {            SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.ENTRY_NOT_FOUND, "Cannot perform 'virtual' {0}: ''{1}'' does not exist", new Object[] {opName, dst});            SVNErrorManager.error(err);        }        if (dstType == SVNFileType.DIRECTORY) {            SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.ILLEGAL_TARGET, "Cannot perform 'virtual' {0}: ''{1}'' is a directory", new Object[] {opName, dst});            SVNErrorManager.error(err);        }        if (!move && srcType == SVNFileType.DIRECTORY) {            SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.ILLEGAL_TARGET, "Cannot perform 'virtual' {0}: ''{1}'' is a directory", new Object[] {opName, src});            SVNErrorManager.error(err);        }        SVNWCAccess dstAccess = createWCAccess(dst);        try {            dstAccess.open(true, false);            SVNEntry dstEntry = dstAccess.getTargetEntry();            if (dstEntry != null) {                SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.ENTRY_EXISTS, "''{0}'' is already under version control", dst);                SVNErrorManager.error(err);                            }        } finally {            dstAccess.close(true);        }                SVNWCAccess srcAccess = createWCAccess(src);        String cfURL = null;        boolean added = false;        long cfRevision = -1;        try {            srcAccess.open(false, false);            SVNEntry srcEntry = srcAccess.getTargetEntry();            if (srcEntry == null) {                SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.ENTRY_NOT_FOUND, "''{0}'' is not under version control", src);                SVNErrorManager.error(err);            }            if (srcEntry.isCopied() && !srcEntry.isScheduledForAddition()) {                cfURL = getCopyFromURL(src.getParentFile(), SVNEncodingUtil.uriEncode(src.getName()));                cfRevision = getCopyFromRevision(src.getParentFile());                if (cfURL == null || cfRevision < 0) {                    SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.ENTRY_NOT_FOUND, "Cannot locate copied directory root for ''{0}''", src);                    SVNErrorManager.error(err);                }                added = false;            } else {                cfURL = srcEntry.isCopied() ? srcEntry.getCopyFromURL() : srcEntry.getURL();                cfRevision = srcEntry.isCopied() ? srcEntry.getCopyFromRevision() : srcEntry.getRevision();                added = srcEntry.isScheduledForAddition() && !srcEntry.isCopied();            }        } finally {            srcAccess.close(false);        }        if (!move) {            myWCClient.doDelete(src, true, false);        }        if (added) {            myWCClient.doAdd(dst, true, false, false, false);                        return;        }        dstAccess = createWCAccess(dst);        try {            dstAccess.open(true, false);            SVNEntry dstEntry = dstAccess.getTargetEntry();            if (dstEntry != null) {                SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.ENTRY_EXISTS, "''{0}'' is already under version control", dst);                SVNErrorManager.error(err);                            }            dstEntry = dstAccess.getAnchor().getEntries().addEntry(dst.getName());            dstEntry.setCopyFromURL(cfURL);            dstEntry.setCopyFromRevision(cfRevision);            dstEntry.setCopied(true);            dstEntry.setKind(SVNNodeKind.FILE);            dstEntry.scheduleForAddition();                        dstAccess.getAnchor().getEntries().save(true);        } finally {            dstAccess.close(true);        }            }