repo.status: also compare flags for files in the lookup list.
authorAlexis S. L. Carvalho <alexis@cecm.usp.br>
Thu, 21 Feb 2008 16:22:31 -0300
changeset 6158 23ffe82615d8
parent 6157 09b00faa8670
child 6159 bc784304fea1
repo.status: also compare flags for files in the lookup list. We might be able to do something smarter about this in dirstate.status for files in normallookup state, but that would require some extra care to keep backwards compatibility.
mercurial/localrepo.py
tests/test-execute-bit
tests/test-execute-bit.out
--- a/mercurial/localrepo.py	Thu Feb 21 16:22:31 2008 -0300
+++ b/mercurial/localrepo.py	Thu Feb 21 16:22:31 2008 -0300
@@ -1003,8 +1003,15 @@
                     fixup = []
                     # do a full compare of any files that might have changed
                     ctx = self.changectx()
+                    mexec = lambda f: 'x' in ctx.fileflags(f)
+                    mlink = lambda f: 'l' in ctx.fileflags(f)
+                    is_exec = util.execfunc(self.root, mexec)
+                    is_link = util.linkfunc(self.root, mlink)
+                    def flags(f):
+                        return is_link(f) and 'l' or is_exec(f) and 'x' or ''
                     for f in lookup:
-                        if f not in ctx or ctx[f].cmp(self.wread(f)):
+                        if (f not in ctx or flags(f) != ctx.fileflags(f)
+                            or ctx[f].cmp(self.wread(f))):
                             modified.append(f)
                         else:
                             fixup.append(f)
--- a/tests/test-execute-bit	Thu Feb 21 16:22:31 2008 -0300
+++ b/tests/test-execute-bit	Thu Feb 21 16:22:31 2008 -0300
@@ -4,12 +4,18 @@
 
 hg init
 echo a > a
-hg ci -d'0 0' -Am'not executable'
+hg ci -Am'not executable'
 
 chmod +x a
-hg ci -d'1 0' -m'executable'
+hg ci -m'executable'
 hg id
 
+echo '% make sure we notice the change of mode if the cached size == -1'
+hg rm a
+hg revert -r 0 a
+hg debugstate
+hg st
+
 hg up 0
 hg id
 test -x a && echo executable -- eek || echo not executable -- whew
--- a/tests/test-execute-bit.out	Thu Feb 21 16:22:31 2008 -0300
+++ b/tests/test-execute-bit.out	Thu Feb 21 16:22:31 2008 -0300
@@ -1,5 +1,8 @@
 adding a
-1549299e88d1 tip
+79abf14474dc tip
+% make sure we notice the change of mode if the cached size == -1
+n   0         -1 unset               a
+M a
 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 d69afc33ff8a
 not executable -- whew