D5275: tests: update store narrowspec when narrowspec, not dirstate, is accessed
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Wed Nov 14 20:21:34 UTC 2018
martinvonz created this revision.
Herald added a reviewer: durin42.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
test-narrow-expanddirstate.t mimics a Google-internal extension that
updates the narrowspec whenever the dirstate is accessed. Since
https://phab.mercurial-scm.org/rHG1d09ba0d2ed3d19f1ca1b116591cc413eb87ac65 (narrow: move remaining narrow-limited dirstate walks to
core, 2018-10-01) and a few commits before it, we now 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.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5275
AFFECTED FILES
tests/test-narrow-expanddirstate.t
CHANGE DETAILS
diff --git a/tests/test-narrow-expanddirstate.t b/tests/test-narrow-expanddirstate.t
--- a/tests/test-narrow-expanddirstate.t
+++ b/tests/test-narrow-expanddirstate.t
@@ -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):
To: martinvonz, durin42, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list