[PATCH V2] dirstate: rebuild should update dirstate properly
Mateusz Kwapich
mitrandir at fb.com
Wed Aug 31 11:43:08 EDT 2016
I don’t think so. I’m not 100% sure that it doesn’t break any extension around
so I would prefer to release it with next major release.
On 8/30/16, 11:21 PM, "Matt Mackall" <mpm at selenic.com> wrote:
On Tue, 2016-08-30 at 15:17 -0700, Mateusz Kwapich wrote:
> # HG changeset patch
> # User Mateusz Kwapich <mitrandir at fb.com>
> # Date 1472595388 25200
> # Tue Aug 30 15:16:28 2016 -0700
> # Node ID aff2b9911d78a3d427e3ba18a565e76215971948
> # Parent 12f8bef59bfa2739d0c5d8425ab494fd2fe38a81
> dirstate: rebuild should update dirstate properly
Is this appropriate for stable?
> 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 --git a/mercurial/dirstate.py b/mercurial/dirstate.py
> --- a/mercurial/dirstate.py
> +++ b/mercurial/dirstate.py
> @@ -680,21 +680,15 @@ class dirstate(object):
> 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 --git a/tests/test-rebuildstate.t b/tests/test-rebuildstate.t
> --- a/tests/test-rebuildstate.t
> +++ b/tests/test-rebuildstate.t
> @@ -48,8 +48,8 @@ basic test for hg debugrebuildstate
> 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 @@ state dump after
> $ 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 @@ dirstate
> $ 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
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://urldefense.proofpoint.com/v2/url?u=https-3A__www.mercurial-2Dscm.org_mailman_listinfo_mercurial-2Ddevel&d=DQIDaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=dK7q_6fOymlfdGMBe3wUaA&m=1S1KyZ73GzbGz2eXFYN6bfgMYY5w9rRfQztW_y3lVe0&s=qWhJdNoJNUc0sObYEpXAFWkY6YZzuQY2o53OKYNwcpA&e=
--
Mathematics is the supreme nostalgia of our time.
More information about the Mercurial-devel
mailing list