# HG changeset patch # User Mateusz Kwapich # Date 1472595388 25200 # Node ID ba06562a06a25e7239ac82419bbc5573c6410258 # Parent 4d9999e43ff78dd97ac11a6777e6592fb58f2ead dirstate: rebuild should update dirstate properly Updating dirstate by simply adding and dropping files from self._map doesn't keep the other maps updated (think: _dirs, _copymap, _foldmap, _nonormalset) thus introducing cache inconsistency. This is also affecting the debugstate tests since now we don't even try to set correct mode and mtime for the files because they are marked dirty anyway and will be checked during next status call. diff -r 4d9999e43ff7 -r ba06562a06a2 mercurial/dirstate.py --- a/mercurial/dirstate.py Tue Sep 27 22:09:28 2016 -0700 +++ b/mercurial/dirstate.py Tue Aug 30 15:16:28 2016 -0700 @@ -680,21 +680,15 @@ self.clear() self._lastnormaltime = lastnormaltime - for f in changedfiles: - mode = 0o666 - if f in allfiles and 'x' in allfiles.flags(f): - mode = 0o777 - - if f in allfiles: - self._map[f] = dirstatetuple('n', mode, -1, 0) - else: - self._map.pop(f, None) - if f in self._nonnormalset: - self._nonnormalset.remove(f) - if self._origpl is None: self._origpl = self._pl self._pl = (parent, nullid) + for f in changedfiles: + if f in allfiles: + self.normallookup(f) + else: + self.drop(f) + self._dirty = True def write(self, tr): diff -r 4d9999e43ff7 -r ba06562a06a2 tests/test-rebuildstate.t --- a/tests/test-rebuildstate.t Tue Sep 27 22:09:28 2016 -0700 +++ b/tests/test-rebuildstate.t Tue Aug 30 15:16:28 2016 -0700 @@ -48,8 +48,8 @@ state dump after $ hg debugstate --nodates | sort - n 644 -1 set bar - n 644 -1 set foo + n 0 -1 unset bar + n 0 -1 unset foo $ hg debugadddrop --normal-lookup file1 file2 $ hg debugadddrop --drop bar @@ -57,7 +57,7 @@ $ hg debugstate --nodates n 0 -1 unset file1 n 0 -1 unset file2 - n 644 -1 set foo + n 0 -1 unset foo $ hg debugrebuildstate status @@ -115,7 +115,7 @@ $ hg debugrebuilddirstate --minimal $ hg debugdirstate --nodates r 0 0 * bar (glob) - n 644 -1 * foo (glob) + n 0 -1 * foo (glob) a 0 -1 * qux (glob) $ hg status -A A qux