public void closeFile(String textChecksum) throws SVNException {
public void closeFile(String commitPath, String textChecksum) throws SVNException {
    public void closeFile(String textChecksum) throws SVNException {        // check checksum.        String checksum = null;        if (myCurrentFile.myDiffWindows != null && textChecksum != null) {            File baseTmpFile = myCurrentFile.getDirectory().getBaseFile(myCurrentFile.Name, true);            checksum = SVNFileUtil.computeChecksum(baseTmpFile);            if (!textChecksum.equals(checksum)) {                SVNErrorManager.error(0, null);            }        }        SVNDirectory dir = myCurrentFile.getDirectory();        SVNLog log = myCurrentDirectory.getLog(true);                // merge props.        Map modifiedWCProps = myCurrentFile.getChangedWCProperties();        Map modifiedEntryProps = myCurrentFile.getChangedEntryProperties();        Map modifiedProps = myCurrentFile.getChangedProperties();        String name = myCurrentFile.Name;        String commitTime = myCurrentFile.CommitTime;        Map command = new HashMap();                SVNStatusType textStatus = SVNStatusType.UNCHANGED;        SVNStatusType lockStatus = SVNStatusType.LOCK_UNCHANGED;                boolean magicPropsChanged = false;        SVNProperties props = dir.getProperties(name, false);        Map locallyModifiedProps = dir.getBaseProperties(name, false).compareTo(props);        if (modifiedProps != null && !modifiedProps.isEmpty()) {            magicPropsChanged = modifiedProps.containsKey(SVNProperty.EXECUTABLE) ||                modifiedProps.containsKey(SVNProperty.NEEDS_LOCK) ||                modifiedProps.containsKey(SVNProperty.KEYWORDS) ||                modifiedProps.containsKey(SVNProperty.EOL_STYLE) ||                modifiedProps.containsKey(SVNProperty.SPECIAL);        }        SVNStatusType propStatus = dir.mergeProperties(name, modifiedProps, locallyModifiedProps, true, log);        if (modifiedEntryProps != null) {            lockStatus = log.logChangedEntryProperties(name, modifiedEntryProps);        }                // merge contents.        File textBase = dir.getBaseFile(name, false);        File textTmpBase = dir.getBaseFile(name, true);        String tmpPath = ".svn/tmp/text-base/" + name + ".svn-base";        String basePath = ".svn/text-base/" + name + ".svn-base";                if (!textTmpBase.exists() && magicPropsChanged) {            // only props were changed, but we have to retranslate file.            command.put(SVNLog.NAME_ATTR, name);            command.put(SVNLog.DEST_ATTR, tmpPath);            log.addCommand(SVNLog.COPY_AND_DETRANSLATE, command, false);            command.clear();            command.put(SVNLog.NAME_ATTR, tmpPath);            command.put(SVNLog.DEST_ATTR, name);            log.addCommand(SVNLog.COPY_AND_TRANSLATE, command, false);            command.clear();        }        // update entry.        command.put(SVNLog.NAME_ATTR, name);        command.put(SVNProperty.shortPropertyName(SVNProperty.KIND), SVNProperty.KIND_FILE);        command.put(SVNProperty.shortPropertyName(SVNProperty.REVISION), Long.toString(myTargetRevision));        command.put(SVNProperty.shortPropertyName(SVNProperty.DELETED), Boolean.FALSE.toString());        command.put(SVNProperty.shortPropertyName(SVNProperty.ABSENT), Boolean.FALSE.toString());        command.put(SVNProperty.shortPropertyName(SVNProperty.URL), myCurrentFile.URL);        log.addCommand(SVNLog.MODIFY_ENTRY, command, false);        command.clear();        boolean isLocallyModified = !myCurrentFile.IsAdded && dir.hasTextModifications(name, false);        File workingFile = dir.getFile(name, false);        if (textTmpBase.exists()) {            textStatus = SVNStatusType.CHANGED;            // there is a text replace working copy with.            if (!isLocallyModified || !workingFile.exists()) {                command.put(SVNLog.NAME_ATTR, tmpPath);                command.put(SVNLog.DEST_ATTR, name);                log.addCommand(SVNLog.COPY_AND_TRANSLATE, command, false);                command.clear();                        } else {                SVNEntries entries = dir.getEntries();                SVNEntry entry = entries.getEntry(name, true);                String oldRevisionStr = ".r" + entry.getRevision();                String newRevisionStr = ".r" + myTargetRevision;                entries.close();                command.put(SVNLog.NAME_ATTR, name);                command.put(SVNLog.ATTR1, basePath);                command.put(SVNLog.ATTR2, tmpPath);                command.put(SVNLog.ATTR3, oldRevisionStr);                command.put(SVNLog.ATTR4, newRevisionStr);                command.put(SVNLog.ATTR5, ".mine");                log.addCommand(SVNLog.MERGE, command, false);                command.clear();                // do test merge.                textStatus = dir.mergeText(name, basePath, tmpPath, "", "", "", true);                if (textStatus == SVNStatusType.UNCHANGED) {                    textStatus = SVNStatusType.MERGED;                }            }        } else if (lockStatus == SVNStatusType.LOCK_UNLOCKED) {            command.put(SVNLog.NAME_ATTR, name);            log.addCommand(SVNLog.MAYBE_READONLY, command, false);            command.clear();                    }        if (locallyModifiedProps == null || locallyModifiedProps.isEmpty()) {            command.put(SVNLog.NAME_ATTR, name);            command.put(SVNProperty.shortPropertyName(SVNProperty.PROP_TIME), SVNLog.WC_TIMESTAMP);            log.addCommand(SVNLog.MODIFY_ENTRY, command, false);            command.clear();                    }        if (textTmpBase.exists()) {            command.put(SVNLog.NAME_ATTR, tmpPath);            command.put(SVNLog.DEST_ATTR, basePath);            log.addCommand(SVNLog.MOVE, command, false);            command.clear();                        command.put(SVNLog.NAME_ATTR, basePath);            log.addCommand(SVNLog.READONLY, command, false);            command.clear();            command.put(SVNLog.NAME_ATTR, name);            command.put(SVNProperty.shortPropertyName(SVNProperty.CHECKSUM), checksum);            log.addCommand(SVNLog.MODIFY_ENTRY, command, false);            command.clear();        }        if (modifiedWCProps != null) {            log.logChangedWCProperties(name, modifiedWCProps);        }        if (!isLocallyModified) {            if (commitTime != null) {                command.put(SVNLog.NAME_ATTR, name);                command.put(SVNLog.TIMESTAMP_ATTR, commitTime);                log.addCommand(SVNLog.SET_TIMESTAMP, command, false);                command.clear();            }            if (textTmpBase.exists() || magicPropsChanged) {                command.put(SVNLog.NAME_ATTR, name);                command.put(SVNProperty.shortPropertyName(SVNProperty.TEXT_TIME), SVNLog.WC_TIMESTAMP);                log.addCommand(SVNLog.MODIFY_ENTRY, command, false);                command.clear();            }        }                // bump.        log.save();        myCurrentFile.myDiffWindows = null;        completeDirectory(myCurrentDirectory);        // notify.        SVNEventAction action = myCurrentFile.IsAdded ? SVNEventAction.UPDATE_ADD : SVNEventAction.UPDATE_UPDATE;        myWCAccess.svnEvent(SVNEventFactory.createUpdateModifiedEvent(myWCAccess, dir, myCurrentFile.Name, action, null,                 textStatus, propStatus, lockStatus));        myCurrentFile = null;    }