changeset 6158:23ffe82615d8

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.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Thu, 21 Feb 2008 16:22:31 -0300
parents 09b00faa8670
children bc784304fea1
files mercurial/localrepo.py tests/test-execute-bit tests/test-execute-bit.out
diffstat 3 files changed, 20 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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