# HG changeset patch # User Pierre-Yves David # Date 1635435898 -7200 # Node ID 500260410bb83710b479251efbdc4f904f0a7e77 # Parent 91f07430db8c829ccb4884fccb86c252a3882eda dirstate: make sure that status does not overlook the fallback flags Without this extra checks, file with fallback flags change as the only change would be overlooked. In the future we might store proper data in the dirstate and do less lookup. However, for now this will do to make sure that 6.0 is forward compatible with later version. Differential Revision: https://phab.mercurial-scm.org/D11729 diff -r 91f07430db8c -r 500260410bb8 mercurial/dirstate.py --- a/mercurial/dirstate.py Thu Oct 28 17:26:03 2021 +0200 +++ b/mercurial/dirstate.py Thu Oct 28 17:44:58 2021 +0200 @@ -1359,6 +1359,7 @@ mexact = match.exact dirignore = self._dirignore checkexec = self._checkexec + checklink = self._checklink copymap = self._map.copymap lastnormaltime = self._lastnormaltime @@ -1391,7 +1392,17 @@ elif t.removed: radd(fn) elif t.tracked: - if ( + if not checklink and t.has_fallback_symlink: + # If the file system does not support symlink, the mode + # might not be correctly stored in the dirstate, so do not + # trust it. + ladd(fn) + elif not checkexec and t.has_fallback_exec: + # If the file system does not support exec bits, the mode + # might not be correctly stored in the dirstate, so do not + # trust it. + ladd(fn) + elif ( size >= 0 and ( (size != st.st_size and size != st.st_size & _rangemask) diff -r 91f07430db8c -r 500260410bb8 mercurial/helptext/internals/dirstate-v2.txt --- a/mercurial/helptext/internals/dirstate-v2.txt Thu Oct 28 17:26:03 2021 +0200 +++ b/mercurial/helptext/internals/dirstate-v2.txt Thu Oct 28 17:44:58 2021 +0200 @@ -523,12 +523,18 @@ this indicates whether the file’s own is expected to have execute permission. + Beware that on system without fs support for this information, the value + stored in the dirstate might be wrong and should not be relied on. + `MODE_IS_SYMLINK` Must be unset if `HAS_MODE_AND_SIZE` is unset. If `HAS_MODE_AND_SIZE` is set, this indicates whether the file is expected to be a symlink as opposed to a normal file. + Beware that on system without fs support for this information, the value + stored in the dirstate might be wrong and should not be relied on. + `EXPECTED_STATE_IS_MODIFIED` Must be unset for untracked nodes. For: