[PATCH] inotify: check all components of filenames against hgignore (issue884)

Renato Cunha renatoc at gmail.com
Tue Jul 6 20:25:17 CDT 2010


# HG changeset patch
# User Renato Cunha <renatoc at gmail.com>
# Date 1278465738 10800
# Branch stable
# Node ID dfa28e8156126e572493f7b740537f8683d27794
# Parent  ccd37cd53b5395a9a86b93c359f962e97c3ee20b
inotify: check all components of filenames against hgignore (issue884)

With inotify enabled, files that should be ignored could be detected as
untracked by mercurial. This behavior was wrong because inotify's filestatus
implementation only matched filenames against ignore patterns, instead of
checking if other elements of their paths matched them. This patch fixes the
behavior by checking the file paths against the ignore patterns.

A new test has also been added to the main inotify test to prevent any
regressions.

diff --git a/hgext/inotify/server.py b/hgext/inotify/server.py
--- a/hgext/inotify/server.py
+++ b/hgext/inotify/server.py
@@ -213,7 +213,9 @@
             if time != int(st_mtime):
                 return 'l'
             return 'n'
-        if type_ == '?' and self.dirstate._ignore(fn):
+        if type_ == '?' and self.dirstate._dirignore(fn):
+            # we must check not only if the file is ignored, but if any part
+            # of its path match an ignore pattern
             return 'i'
         return type_
 
diff --git a/tests/test-inotify b/tests/test-inotify
--- a/tests/test-inotify
+++ b/tests/test-inotify
@@ -97,4 +97,17 @@
 echo b >> 1844/foo
 hg ci 1844 -m 'broken'
 
+# Test for issue884: "Build products not ignored until .hgignore is touched"
+echo '^build$' > .hgignore
+hg add .hgignore
+hg ci .hgignore -m 'ignorelist'
+
+# Now, lets add some build products...
+mkdir build
+touch build/x
+touch build/y
+
+# build/x & build/y shouldn't appear in "hg st"
+hg st
+
 kill `cat hg.pid`


More information about the Mercurial-devel mailing list