DebugLog.log("COMMIT: workspace created for: " + ws.getID());
    public long commit(String[] path, final String message, boolean recurse) throws ClientException {        if (path == null || path.length == 0) {            return -1;        }                try {            String commonRoot = PathUtil.getFSCommonRoot(path);            final ISVNWorkspace ws = createWorkspace(commonRoot);            String[] paths = new String[path.length];            for(int i = 0; i < path.length; i++) {                paths[i] = SVNUtil.getWorkspacePath(ws, path[i]);            }            DebugLog.log("COMMIT: workspace created for: " + ws.getID());            for(int i = 0; i < paths.length; i++) {                DebugLog.log("COMMIT: commiting path: " + paths[i]);            }            ws.addWorkspaceListener(new CommitWorkspaceListener(myNotify, ws));            return ws.commit(paths, new ISVNCommitHandler() {                public String handleCommit(SVNStatus[] tobeCommited) {                    if (myMessageHandler != null) {                        CommitItem[] items = new CommitItem[tobeCommited.length];                        for(int i = 0; i < items.length; i++) {                            SVNStatus status = tobeCommited[i];                            String fullPath = SVNUtil.getAbsolutePath(ws, status.getPath());                            int nodeKind = status.isDirectory() ? NodeKind.dir : NodeKind.file;                            int stateFlag = 0;                            if (status.getContentsStatus() == SVNStatus.DELETED) {                                stateFlag += CommitItemStateFlags.Delete;                             } else if (status.getContentsStatus() == SVNStatus.ADDED) {                                stateFlag += CommitItemStateFlags.Add;                             } else if (status.getContentsStatus() == SVNStatus.MODIFIED) {                                stateFlag += CommitItemStateFlags.TextMods;                             }                             if (status.getPropertiesStatus() == SVNStatus.MODIFIED) {                                stateFlag += CommitItemStateFlags.PropMods;                             }                            String copiedURL = null;                            Map properties = Collections.EMPTY_MAP;                            try {                                properties = ws.getProperties(status.getPath(), false, true);                            } catch (SVNException e) {}                            if (status.isAddedWithHistory()) {                                stateFlag += CommitItemStateFlags.IsCopy;                                copiedURL = (String) properties.get(SVNProperty.COPYFROM_URL);                            }                            long revision = SVNProperty.longValue((String) properties.get(SVNProperty.REVISION));                            items[i] = new CommitItem(fullPath, nodeKind, stateFlag, (String) properties.get(SVNProperty.URL), copiedURL, revision);                        }                        return myMessageHandler.getLogMessage(items);                    }                    return message;                }            }, recurse, true);        } catch (SVNException e) {            throwException(e);        }        return -1;    }