IDEA-109028 (fsnotifier to not panic on incorrect paths)
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Mon, 17 Jun 2013 14:34:59 +0000 (18:34 +0400)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Mon, 17 Jun 2013 16:01:06 +0000 (20:01 +0400)
bin/linux/fsnotifier
bin/linux/fsnotifier64
native/fsNotifier/linux/inotify.c
native/fsNotifier/linux/main.c
platform/platform-tests/testSrc/com/intellij/openapi/vfs/local/FileWatcherTest.java

index 85973cc4aa1eab686793da29be2f88f18a418726..134573032b57faa6bade55415eeda2fc13211b2c 100755 (executable)
Binary files a/bin/linux/fsnotifier and b/bin/linux/fsnotifier differ
index e4b3e5637b1f101deacfdded1f83b2c6cbb90325..0fae80c30ceda372578fca3fe3a01b7588849cd7 100755 (executable)
Binary files a/bin/linux/fsnotifier64 and b/bin/linux/fsnotifier64 differ
index 444a5bf978a0fc4c004bded2f38d8f502ee2397c..77536dc3dcba4970d4fea9d1c6bd230eb7aa55f6 100644 (file)
@@ -305,14 +305,17 @@ int watch(const char* root, array* mounts) {
 
   struct stat st;
   if (stat(root, &st) != 0) {
-    if (errno == EACCES) {
-      return ERR_IGNORE;
-    }
-    else if (errno == ENOENT) {
+    if (errno == ENOENT) {
       return ERR_MISSING;
     }
-    userlog(LOG_ERR, "stat(%s): %s", root, strerror(errno));
-    return ERR_ABORT;
+    else if (errno == EACCES || errno == ELOOP || errno == ENAMETOOLONG || errno == ENOTDIR) {
+      userlog(LOG_INFO, "stat(%s): %s", root, strerror(errno));
+      return ERR_CONTINUE;
+    }
+    else {
+      userlog(LOG_ERR, "stat(%s): %s", root, strerror(errno));
+      return ERR_ABORT;
+    }
   }
 
   if (S_ISREG(st.st_mode)) {
index de87fad9479da29de92e7ff2b2b1918c893dbf61..5b9ee0933b3d122a193fd300a8151487355ad4bd 100644 (file)
@@ -36,7 +36,7 @@
 #define LOG_ENV_ERROR "error"
 #define LOG_ENV_OFF "off"
 
-#define VERSION "20130415.2136"
+#define VERSION "20130617.1827"
 #define VERSION_MSG "fsnotifier " VERSION "\n"
 
 #define USAGE_MSG \
index c5fb489f5ce997fd2a49ed575d3fc1488b141e8c..c133139644dbf6885d20b1b3e7cda2b206064231 100644 (file)
@@ -292,6 +292,26 @@ public class FileWatcherTest extends PlatformLangTestCase {
     }
   }
 
+  public void testIncorrectPath() throws Exception {
+    File topDir = createTestDir("top");
+    File file = createTestFile(topDir, "file.zip");
+    File subDir = new File(file, "sub/zip");
+    refresh(topDir);
+
+    LocalFileSystem.WatchRequest request = watch(subDir, false);
+    try {
+      myTimeout = 10 * INTER_RESPONSE_DELAY;
+      myAccept = true;
+      FileUtil.writeToFile(file, "new content");
+      assertEvent(VFileEvent.class);
+      myTimeout = NATIVE_PROCESS_DELAY;
+    }
+    finally {
+      unwatch(request);
+      delete(topDir);
+    }
+  }
+
   public void testDirectoryOverlapping() throws Exception {
     File topDir = createTestDir("top");
     File fileInTopDir = createTestFile(topDir, "file1.txt");