}
long textTime = 0;
if (!implicit && !getThisDirName().equals(fileName)) {
File tmpFile = getBaseFile(fileName, true);
SVNFileType fileType = SVNFileType.getType(tmpFile);
if (fileType == SVNFileType.FILE || fileType == SVNFileType.SYMLINK) {
boolean modified = false;
File workingFile = getFile(fileName);
File tmpFile2 = SVNFileUtil.createUniqueFile(tmpFile.getParentFile(), fileName, ".tmp", true);
try {
String tmpFile2Path = SVNFileUtil.getBasePath(tmpFile2);
SVNTranslator.translate(this, fileName, fileName, tmpFile2Path, false);
modified = !SVNFileUtil.compareFiles(tmpFile, tmpFile2, null);
} catch (SVNException svne) {
SVNErrorMessage err = SVNErrorMessage.create(errorCode, "Error comparing ''{0}'' and ''{1}''", new Object[] {workingFile, tmpFile});
SVNErrorManager.error(err, svne, SVNLogType.WC);
} finally {
tmpFile2.delete();
}
textTime = modified ? tmpFile.lastModified() : workingFile.lastModified();
}
}
if (!implicit && entry.isScheduledForReplacement()) {
SVNFileUtil.deleteFile(getBasePropertiesFile(fileName, false));
}
long propTime = 0;
boolean setReadWrite = false;
boolean setNotExecutable = false;
SVNVersionedProperties baseProps = getBaseProperties(fileName);
SVNVersionedProperties wcProps = getProperties(fileName);
//TODO: to work properly we must create a tmp working props file
//instead of tmp base props one
File tmpPropsFile = getPropertiesFile(fileName, true);
File wcPropsFile = getPropertiesFile(fileName, false);
File basePropertiesFile = getBasePropertiesFile(fileName, false);
SVNFileType tmpPropsType = SVNFileType.getType(tmpPropsFile);
// tmp may be missing when there were no prop change at all!
if (tmpPropsType == SVNFileType.FILE) {
SVNWCProperties working = new SVNWCProperties(wcPropsFile, null);
SVNWCProperties workingTmp = new SVNWCProperties(tmpPropsFile, null);
SVNProperties pDiff = working.compareTo(workingTmp);
boolean equals = pDiff == null || pDiff.isEmpty();
propTime = equals ? wcPropsFile.lastModified() : tmpPropsFile.lastModified();
if (!getThisDirName().equals(fileName)) {
SVNVersionedProperties propDiff = baseProps.compareTo(wcProps);
setReadWrite = propDiff != null && propDiff.containsProperty(SVNProperty.NEEDS_LOCK)
&& propDiff.getPropertyValue(SVNProperty.NEEDS_LOCK) == null;
setNotExecutable = propDiff != null
&& propDiff.containsProperty(SVNProperty.EXECUTABLE)
&& propDiff.getPropertyValue(SVNProperty.EXECUTABLE) == null;
}
try {
if (!tmpPropsFile.exists() || tmpPropsFile.length() <= 4) {
SVNFileUtil.deleteFile(basePropertiesFile);
} else {
SVNFileUtil.copyFile(tmpPropsFile, basePropertiesFile, true);
SVNFileUtil.setReadonly(basePropertiesFile, true);
}
} finally {
SVNFileUtil.deleteFile(tmpPropsFile);
}
} else if (entry.getPropTime() == null && !wcProps.isEmpty()) {
propTime = wcPropsFile.lastModified();
}
if (!getThisDirName().equals(fileName) && !implicit) {
File tmpFile = getBaseFile(fileName, true);
File baseFile = getBaseFile(fileName, false);
File wcFile = getFile(fileName);
File tmpFile2 = null;
try {
tmpFile2 = SVNFileUtil.createUniqueFile(tmpFile.getParentFile(), fileName, ".tmp", false);
boolean overwritten = false;
SVNFileType fileType = SVNFileType.getType(tmpFile);
boolean special = getProperties(fileName).getPropertyValue(SVNProperty.SPECIAL) != null;
if (!SVNFileUtil.symlinksSupported() || !special) {
if (fileType == SVNFileType.FILE) {
SVNTranslator.translate(this, fileName,
SVNFileUtil.getBasePath(tmpFile), SVNFileUtil.getBasePath(tmpFile2), true);