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.
--- 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