tests: update narrowspec when narrowspec, not dirstate, is accessed
test-narrow-expanddirstate.t mimics a Google-internal extension that
updates the narrowspec whenever the dirstate is accessed. Since
1d09ba0d2ed3 (narrow: move remaining narrow-limited dirstate walks to
core, 2018-10-01) and a few commits before it, we no longer restrict
repo.dirstate.walk() to the narrowspec. It is instead done at a higher
level (e.g. context.status()). We were running into problems with the
Google-internal extension when importing those commits. The issue was
that the narrowspec was read before the first dirstate access. I
believe the right fix is to instead update the narrowspec when trying
to read it (not when reading the dirstate), so that's what this patch
does.
Differential Revision: https://phab.mercurial-scm.org/D5275
--- a/tests/test-narrow-expanddirstate.t Fri Dec 21 09:48:30 2018 -0800
+++ b/tests/test-narrow-expanddirstate.t Sat Oct 27 22:56:31 2018 -0700
@@ -56,9 +56,13 @@
> from mercurial import patch
> from mercurial import util as hgutil
>
+ > narrowspecexpanded = False
> def expandnarrowspec(ui, repo, newincludes=None):
> if not newincludes:
> return
+ > if getattr(repo, '_narrowspecexpanded', False):
+ > return
+ > repo._narrowspecexpanded = True
> import sys
> newincludes = set([newincludes])
> includes, excludes = repo.narrowpats
@@ -72,24 +76,14 @@
> for f in repo[b'.'].manifest().walk(added):
> repo.dirstate.normallookup(f)
>
- > def wrapds(ui, repo, ds):
- > class expandingdirstate(ds.__class__):
- > @hgutil.propertycache
- > def _map(self):
- > ret = super(expandingdirstate, self)._map
+ > def reposetup(ui, repo):
+ > class expandingrepo(repo.__class__):
+ > def narrowmatch(self, *args, **kwargs):
> with repo.wlock(), repo.lock(), repo.transaction(
> b'expandnarrowspec'):
> expandnarrowspec(ui, repo,
> encoding.environ.get(b'DIRSTATEINCLUDES'))
- > return ret
- > ds.__class__ = expandingdirstate
- > return ds
- >
- > def reposetup(ui, repo):
- > class expandingrepo(repo.__class__):
- > def _makedirstate(self):
- > dirstate = super(expandingrepo, self)._makedirstate()
- > return wrapds(ui, repo, dirstate)
+ > return super(expandingrepo, self).narrowmatch(*args, **kwargs)
> repo.__class__ = expandingrepo
>
> def extsetup(unused_ui):