387977: avoid renameTo on *ix
diff --git a/org.eclipse.virgo.util.io/src/main/java/org/eclipse/virgo/util/io/FileSystemChecker.java b/org.eclipse.virgo.util.io/src/main/java/org/eclipse/virgo/util/io/FileSystemChecker.java
index 9f213c5..d51c35b 100644
--- a/org.eclipse.virgo.util.io/src/main/java/org/eclipse/virgo/util/io/FileSystemChecker.java
+++ b/org.eclipse.virgo.util.io/src/main/java/org/eclipse/virgo/util/io/FileSystemChecker.java
@@ -64,6 +64,8 @@
private final FilenameFilter includeFilter;
+ private static boolean WINDOWS = System.getProperty("os.name").startsWith("Windows");
+
/**
* Creates a new <code>FileSystemChecker</code>. Identifies changes on all files in <code>checkDir</code>.
*
@@ -161,7 +163,7 @@
if (size > monitorRecord.getSize()) {
// still being written? continue to track it
monitorRecord.setSize(size);
- } else if (file.renameTo(file)){
+ } else if (isUnlocked(file)){
// not changing anymore so if we can rename it we can announce it:
notifyListeners(this.key(file), monitorRecord.getEvent());
// do not monitor it anymore
@@ -202,6 +204,11 @@
}
}
+ public boolean isUnlocked(File file) {
+ // Heuristic check for the file not being locked on Windows. On *ix, assume the file is unlocked since we can't tell.
+ return !WINDOWS || file.renameTo(file);
+ }
+
private void debugState(final String heading, File[] files) {
if (logger!=null && logger.isDebugEnabled()) {
StringBuilder sb = new StringBuilder().append(this.checkDir).append(" - ").append(heading);