# HG changeset patch # User Alexis S. L. Carvalho # Date 2008-02-21 19:22:31 # Node ID 23ffe82615d80f97dc3ca029c82884c8620b598d # Parent 09b00faa867093f32ad17d1a8eabe75a61ddc9bc 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. diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1003,8 +1003,15 @@ class localrepository(repo.repository): 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) diff --git a/tests/test-execute-bit b/tests/test-execute-bit --- a/tests/test-execute-bit +++ b/tests/test-execute-bit @@ -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 diff --git a/tests/test-execute-bit.out b/tests/test-execute-bit.out --- a/tests/test-execute-bit.out +++ b/tests/test-execute-bit.out @@ -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