DebugLog.log("COPY: delete: " + deletePath);
    public void move(String srcPath, String destPath, String message, Revision revision, boolean force) throws ClientException {        if (isURL(srcPath) && isURL(destPath)) {            ISVNEditor editor = null;            try {                String root = PathUtil.getCommonRoot(new String[] {destPath, srcPath});                SVNRepository repository = createRepository(root);                long revNumber = getRevisionNumber(revision, repository, null, null);                String deletePath = srcPath.substring(root.length());                destPath = destPath.substring(root.length());                deletePath = PathUtil.removeLeadingSlash(deletePath);                destPath = PathUtil.removeLeadingSlash(destPath);                deletePath = PathUtil.decode(deletePath);                destPath = PathUtil.decode(destPath);                                SVNNodeKind srcNodeKind = repository.checkPath(deletePath, revNumber);                SVNNodeKind dstNodeKind = repository.checkPath(destPath, revNumber);                List parentDstDirs = new LinkedList();                for(StringTokenizer tokens = new StringTokenizer(destPath, "/"); tokens.hasMoreTokens();) {                	parentDstDirs.add(tokens.nextToken());                }                if (dstNodeKind == SVNNodeKind.NONE) {                	// dst doesn't exist will be created.                	parentDstDirs.remove(parentDstDirs.size() - 1);                } else if (dstNodeKind ==SVNNodeKind.DIR) {                	destPath = PathUtil.append(destPath, PathUtil.tail(srcPath));                	destPath = PathUtil.removeLeadingSlash(destPath);                } else if (dstNodeKind == SVNNodeKind.FILE) {                	throwException(new SVNException("destination already exists and its a file"));                 }                                // create list of dirs to be opened before add                // if dst exists and its a dir, add a                // create list of dirs to be opened before delete                                editor = repository.getCommitEditor(message, null);                editor.openRoot(-1);                                String dir = "";                for (Iterator dirs = parentDstDirs.iterator(); dirs.hasNext();) {					dir = PathUtil.append(dir, (String) dirs.next());					dir = PathUtil.removeLeadingSlash(dir);										editor.openDir(dir, -1);				}                if (srcNodeKind == SVNNodeKind.DIR) {                	editor.addDir(destPath, deletePath, revNumber);                	editor.closeDir();                } else {                	editor.addFile(destPath, deletePath, revNumber);                	editor.closeFile(null);                }                for (Iterator dirs = parentDstDirs.iterator(); dirs.hasNext();) {                	dirs.next();					editor.closeDir();				}                editor.deleteEntry(deletePath, revNumber);                                editor.closeDir();                editor.closeEdit();            } catch (SVNException e) {                if (editor != null) {                    try {                        editor.abortEdit();                    } catch (SVNException es) {}                }                throwException(e);            }        } else if (!isURL(srcPath) && !isURL(destPath)) {            try {            	String wsRoot = PathUtil.getCommonRoot(new String[] {srcPath, destPath});                ISVNWorkspace ws = createWorkspace(wsRoot);                ws.addWorkspaceListener(new LocalWorkspaceListener(myNotify, ws));                ws.copy(SVNUtil.getWorkspacePath(ws, srcPath), SVNUtil.getWorkspacePath(ws, destPath), true);            } catch (SVNException e) {                throwException(e);            }        } else {            throw new ClientException("only WC->WC or URL->URL move is supported", "", 0);        }    }