DebugLog.log("making file executable: " + wcFile);
    private void doSetLocalProperty(SVNDirectory anchor, String name, String propName, String propValue, boolean force, boolean recursive, ISVNPropertyHandler handler) throws SVNException {        SVNEntries entries = anchor.getEntries();        DebugLog.log("anchor: " + anchor.getRoot());        if (!"".equals(name)) {            SVNEntry entry = entries.getEntry(name, true);            DebugLog.log("entry in anchor: " + entry);            if (entry == null || (recursive && entry.isDeleted())) {                return;            }            if (entry.getKind() == SVNNodeKind.DIR) {                SVNDirectory dir = anchor.getChildDirectory(name);                if (dir != null) {                    doSetLocalProperty(dir, "", propName, propValue, force, recursive, handler);                }            } else if (entry.getKind() == SVNNodeKind.FILE) {                DebugLog.log("setting file property: " + propName + "=" + propValue);                if (SVNProperty.IGNORE.equals(propName) || SVNProperty.EXTERNALS.equals(propName)) {                    if (!recursive) {                        SVNErrorManager.error("svn: setting '" + propName + "' property is not supported for files");                    }                    return;                }                SVNProperties props = anchor.getProperties(name, false);                File wcFile = anchor.getFile(name, false);                if (SVNProperty.EXECUTABLE.equals(propName)) {                    DebugLog.log("making file executable: " + wcFile);                    SVNFileUtil.setExecutable(wcFile, propValue != null);                }                if (!force && SVNProperty.EOL_STYLE.equals(propName) && propValue != null) {                    if (SVNWCUtil.isBinaryMimetype(props.getPropertyValue(SVNProperty.MIME_TYPE))) {                        if (!recursive) {                            SVNErrorManager.error("svn: File '" + wcFile + "' has binary mime type property");                        }                        return;                    }                    if (!SVNTranslator.checkNewLines(wcFile)) {                        SVNErrorManager.error("svn: File '" + wcFile + "' has inconsistent newlines");                    }                                    }                props.setPropertyValue(propName, propValue);                if (SVNProperty.EOL_STYLE.equals(propName) || SVNProperty.KEYWORDS.equals(propName)) {                    entry.setTextTime(null);                    entries.save(false);                } else if (SVNProperty.NEEDS_LOCK.equals(propName) && propValue == null) {                    try {                        SVNFileUtil.setReadonly(wcFile, false);                    } catch (IOException e) {                    }                }                handler.handleProperty(anchor.getFile(name, false), new SVNPropertyData(propName, propValue));            }            entries.close();            return;        }        DebugLog.log("setting property (" + propName + ") on dir " + anchor.getRoot());        SVNProperties props = anchor.getProperties(name, false);        if (SVNProperty.KEYWORDS.equals(propName) || SVNProperty.EOL_STYLE.equals(propName) ||                SVNProperty.MIME_TYPE.equals(propName) ||                SVNProperty.EXECUTABLE.equals(propName)) {            if (!recursive) {                SVNErrorManager.error("svn: setting '" + propName + "' property is not supported for directories");            }        } else {            props.setPropertyValue(propName, propValue);            handler.handleProperty(anchor.getFile(name, false), new SVNPropertyData(propName, propValue));        }        if (!recursive) {            return;        }        for (Iterator ents = entries.entries(true); ents.hasNext();) {            SVNEntry entry = (SVNEntry) ents.next();            if ("".equals(entry.getName())) {                continue;            }            doSetLocalProperty(anchor, entry.getName(), propName, propValue, force, recursive, handler);        }    }