kind = myRoot.checkNodeKind(path);
kind = myRoot.checkNodeKind(absPath);
    public boolean handleCommitPath(String path, ISVNEditor editor) throws SVNException {        while(myCopies.size() > 0) {            CopyInfo info = (CopyInfo) myCopies.getLast();            if (SVNPathUtil.isAncestor(info.myPath, path)) {                break;            }            myCopies.removeLast();        }                boolean isAdd = false;        boolean isDelete = false;                FSPathChange change = (FSPathChange) myChangedPaths.get(path);        if (change.getChangeKind() == FSPathChangeKind.FS_PATH_CHANGE_ADD) {            isAdd = true;        } else if (change.getChangeKind() == FSPathChangeKind.FS_PATH_CHANGE_DELETE) {            isDelete = true;        } else if (change.getChangeKind() == FSPathChangeKind.FS_PATH_CHANGE_REPLACE) {            isAdd = true;            isDelete = true;        }                if (isDelete) {            editor.deleteEntry(path, -1);        }                SVNNodeKind kind = null;        if (!isDelete || isAdd) {            kind = myRoot.checkNodeKind(path);            if (kind != SVNNodeKind.DIR && kind != SVNNodeKind.FILE) {                SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.FS_NOT_FOUND, "Filesystem path ''{0}'' is neither a file nor a directory", path);                SVNErrorManager.error(err);            }        }                String copyFromPath = null;        String realCopyFromPath = null;        FSRoot srcRoot = myCompareRoot;        String srcPath = srcRoot != null ? path : null;        boolean closeFile = false;        if (isAdd) {            FSRoot copyFromRoot = null;            FSRevisionNode copyfromNode = myRoot.getRevisionNode(path);            copyFromPath = copyfromNode.getCopyFromPath();            long copyFromRevision = copyfromNode.getCopyFromRevision();            if (copyFromPath != null && FSRepository.isValidRevision(copyFromRevision)) {                copyFromRoot = myOwner.createRevisionRoot(copyFromRevision);            }                        realCopyFromPath = copyFromPath;            if (copyFromPath != null) {                String relCopyFromPath = copyFromPath.substring(1);                boolean isWithinBasePath = "".equals(myBasePath) || (relCopyFromPath.startsWith(myBasePath) && (relCopyFromPath.charAt(myBasePath.length()) == '/' || relCopyFromPath.length() == myBasePath.length()));                if (!isWithinBasePath || myLowRevision > copyFromRevision) {                    copyFromPath = null;                    copyFromRevision = -1;                }            }                        if (kind == SVNNodeKind.DIR) {                if (realCopyFromPath != null && copyFromPath == null) {                    addSubdirectory(copyFromRoot, myRoot, editor, realCopyFromPath, path);                } else {                    editor.addDir(path, copyFromPath, copyFromRevision);                }            } else {                editor.addFile(path, copyFromPath, copyFromRevision);                closeFile = true;            }                        if (copyFromPath != null) {                if (kind == SVNNodeKind.DIR) {                    CopyInfo info = new CopyInfo(path, copyFromPath, copyFromRevision);                    myCopies.addLast(info);                }                srcRoot = copyFromRoot;                srcPath = copyFromPath;            } else {                if (kind == SVNNodeKind.DIR && myCopies.size() > 0) {                    CopyInfo info = new CopyInfo(path, null, -1);                    myCopies.addLast(info);                }                srcRoot = null;                srcPath = null;            }        } else if (!isDelete) {            if (kind == SVNNodeKind.DIR) {                if ("".equals(path)) {                    editor.openRoot(-1);                } else {                    editor.openDir(path, -1);                }            } else {                editor.openFile(path, -1);                closeFile = true;            }                        if (myCopies.size() > 0) {                CopyInfo info = (CopyInfo) myCopies.getLast();                if (info.myCopyFromPath != null) {                    srcRoot = myOwner.createRevisionRoot(info.myCopyFromRevision);                    srcPath = SVNPathUtil.append(info.myCopyFromPath, SVNPathUtil.pathIsChild(info.myPath, path));                } else {                    srcRoot = null;                    srcPath = null;                }            }         }                if (!isDelete || isAdd) {            if (change.arePropertiesModified()) {                if (myCompareRoot != null) {                    Map oldProps = null;                    if (srcRoot != null) {                        FSRevisionNode srcNode = srcRoot.getRevisionNode(srcPath);                        oldProps = srcNode.getProperties(myOwner);                    }                                        FSRevisionNode node = myRoot.getRevisionNode(path);                    Map newProps = node.getProperties(myOwner);                    Map propDiff = FSRepository.getPropsDiffs(oldProps, newProps);                    for (Iterator propNames = propDiff.keySet().iterator(); propNames.hasNext();) {                        String propName = (String) propNames.next();                        String propValue = (String) propDiff.get(propName);                        if (kind == SVNNodeKind.DIR) {                            editor.changeDirProperty(propName, propValue);                        } else if (kind == SVNNodeKind.FILE) {                            editor.changeFileProperty(path, propName, propValue);                        }                    }                } else {                    if (kind == SVNNodeKind.DIR) {                        editor.changeDirProperty("", null);                    } else if (kind == SVNNodeKind.FILE) {                        editor.changeFileProperty(path, "", null);                    }                }            }                        if (kind == SVNNodeKind.FILE && (change.isTextModified() || (realCopyFromPath != null && copyFromPath == null))) {                editor.applyTextDelta(path, null);                if (myCompareRoot != null) {                    InputStream sourceStream = null;                    InputStream targetStream = null;                    try {                        sourceStream = srcRoot.getFileStreamForPath(myDeltaCombiner, srcPath);                        targetStream = myRoot.getFileStreamForPath(myDeltaCombiner, path);                        myDeltaGenerator.sendDelta(path, sourceStream, 0, targetStream, editor, false);                    } finally {                        SVNFileUtil.closeFile(sourceStream);                        SVNFileUtil.closeFile(targetStream);                    }                }            }        }                if (closeFile) {            editor.closeFile(path, null);            return false;        }        return true;    }