Mercurial > public > mercurial-scm > hg
comparison mercurial/scmutil.py @ 40087:1d09ba0d2ed3
narrow: move remaining narrow-limited dirstate walks to core
In most places we now filter at a higher level (the context object),
but there are few places that relied on the dirstate walk to be
filtered by the narrowspec. The important cases are those used by `hg
add` and `hg addremove`. This patch updates them to pass in a matcher
instead of relying on the dirstate to do the filtering. The dirstate
filtering is also dropped in narrowdirstate.py.
Not always filtering in the dirstate should be useful for a future `hg
status --include-outside-narrow` option.
These places now end up doing an unrestricted dirstate walk after this
patch:
* debugfileset
* perfwalk
* sparse (but restricted to sparse config)
* largefiles
I'll let anyone who cares about these cases adapt them to work with
narrow if necessary.
Differential Revision: https://phab.mercurial-scm.org/D4901
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Mon, 01 Oct 2018 14:31:15 -0700 |
parents | ca9d0c93acea |
children | c554dc0cc16e |
comparison
equal
deleted
inserted
replaced
40086:41fcdfe3bfeb | 40087:1d09ba0d2ed3 |
---|---|
1096 added, unknown, deleted, removed, forgotten = [], [], [], [], [] | 1096 added, unknown, deleted, removed, forgotten = [], [], [], [], [] |
1097 audit_path = pathutil.pathauditor(repo.root, cached=True) | 1097 audit_path = pathutil.pathauditor(repo.root, cached=True) |
1098 | 1098 |
1099 ctx = repo[None] | 1099 ctx = repo[None] |
1100 dirstate = repo.dirstate | 1100 dirstate = repo.dirstate |
1101 matcher = repo.narrowmatch(matcher, includeexact=True) | |
1101 walkresults = dirstate.walk(matcher, subrepos=sorted(ctx.substate), | 1102 walkresults = dirstate.walk(matcher, subrepos=sorted(ctx.substate), |
1102 unknown=True, ignored=False, full=False) | 1103 unknown=True, ignored=False, full=False) |
1103 for abs, st in walkresults.iteritems(): | 1104 for abs, st in walkresults.iteritems(): |
1104 dstate = dirstate[abs] | 1105 dstate = dirstate[abs] |
1105 if dstate == '?' and audit_path.check(abs): | 1106 if dstate == '?' and audit_path.check(abs): |