changeset 19128:f4930b533d55 stable

hgignore: fix regression with hgignore directory matches (issue3921) If a directory matched a regex in hgignore but the files inside the directory did not match the regex, they would appear as deleted in hg status. This change fixes them to appear normally in hg status. Removing the ignore(nf) conditional here is ok because it just means we might stat more files than we had before. My testing on a large repo shows this causes no performance regression since the only additional files being stat'd are the ones that are missing (i.e. status=!), which are generally rare.
author Durham Goode <durham@fb.com>
date Fri, 03 May 2013 09:44:50 -0700
parents a6542a670ece
children bd19587a3347
files mercurial/dirstate.py tests/test-hgignore.t
diffstat 2 files changed, 11 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/dirstate.py	Thu May 02 11:26:43 2013 -0700
+++ b/mercurial/dirstate.py	Fri May 03 09:44:50 2013 -0700
@@ -700,7 +700,7 @@
                 for nf in iter(visit):
                     # Report ignored items in the dmap as long as they are not
                     # under a symlink directory.
-                    if ignore(nf) and audit_path.check(nf):
+                    if audit_path.check(nf):
                         try:
                             results[nf] = lstat(join(nf))
                         except OSError:
--- a/tests/test-hgignore.t	Thu May 02 11:26:43 2013 -0700
+++ b/tests/test-hgignore.t	Fri May 03 09:44:50 2013 -0700
@@ -124,3 +124,13 @@
   (?:(?:|.*/)[^/]*(?:/|$))
 
   $ cd ..
+
+Check patterns that match only the directory
+
+  $ echo "^dir\$" > .hgignore
+  $ hg status
+  A dir/b.o
+  ? .hgignore
+  ? a.c
+  ? a.o
+  ? syntax