# HG changeset patch # User Renato Cunha # Date 1278465738 10800 # Node ID db9d162337871e3110f3c45dd994db3d28614ba0 # Parent be5e86c80628491d012a605276280e7784d6453c 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 -r be5e86c80628 -r db9d16233787 hgext/inotify/server.py --- a/hgext/inotify/server.py Fri Jul 02 15:05:21 2010 +0900 +++ b/hgext/inotify/server.py Tue Jul 06 22:22:18 2010 -0300 @@ -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 -r be5e86c80628 -r db9d16233787 tests/test-inotify --- a/tests/test-inotify Fri Jul 02 15:05:21 2010 +0900 +++ b/tests/test-inotify Tue Jul 06 22:22:18 2010 -0300 @@ -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`