diff -r 41448fc51510 -r f7a106b3f089 hgext/sparse.py --- a/hgext/sparse.py Thu Jul 06 12:06:37 2017 -0700 +++ b/hgext/sparse.py Thu Jul 06 12:15:14 2017 -0700 @@ -250,14 +250,17 @@ """ orig(self, node) repo = self._repo - if util.safehasattr(repo, 'getsparsepatterns'): - ctx = repo[node] - _, _, profiles = repo.getsparsepatterns(ctx.rev()) - if set(profiles) & set(ctx.files()): - origstatus = repo.status() - origsparsematch = repo.sparsematch() - _refresh(repo.ui, repo, origstatus, origsparsematch, True) + + ctx = repo[node] + profiles = sparse.patternsforrev(repo, ctx.rev())[2] + # profiles will only have data if sparse is enabled. + if set(profiles) & set(ctx.files()): + origstatus = repo.status() + origsparsematch = repo.sparsematch() + _refresh(repo.ui, repo, origstatus, origsparsematch, True) + + if util.safehasattr(repo, 'prunetemporaryincludes'): repo.prunetemporaryincludes() extensions.wrapfunction(context.committablectx, 'markcommitted', @@ -410,53 +413,6 @@ def _wraprepo(ui, repo): class SparseRepo(repo.__class__): - def getsparsepatterns(self, rev): - """Returns the include/exclude patterns specified by the - given rev. - """ - raw = self.vfs.tryread('sparse') - if not raw: - return set(), set(), [] - if rev is None: - raise error.Abort(_("cannot parse sparse patterns from " + - "working copy")) - - includes, excludes, profiles = sparse.parseconfig(self.ui, raw) - - ctx = self[rev] - if profiles: - visited = set() - while profiles: - profile = profiles.pop() - if profile in visited: - continue - visited.add(profile) - - try: - raw = sparse.readprofile(self, profile, rev) - except error.ManifestLookupError: - msg = ( - "warning: sparse profile '%s' not found " - "in rev %s - ignoring it\n" % (profile, ctx)) - if self.ui.configbool( - 'sparse', 'missingwarning', True): - self.ui.warn(msg) - else: - self.ui.debug(msg) - continue - pincludes, pexcludes, subprofs = sparse.parseconfig( - self.ui, raw) - includes.update(pincludes) - excludes.update(pexcludes) - for subprofile in subprofs: - profiles.append(subprofile) - - profiles = visited - - if includes: - includes.add('.hg*') - return includes, excludes, profiles - def _sparsechecksum(self, path): data = self.vfs.read(path) return hashlib.sha1(data).hexdigest() @@ -521,7 +477,8 @@ matchers = [] for rev in revs: try: - includes, excludes, profiles = self.getsparsepatterns(rev) + includes, excludes, profiles = sparse.patternsforrev( + self, rev) if includes or excludes: # Explicitly include subdirectories of includes so @@ -566,7 +523,7 @@ activeprofiles = set() for rev in revs: - _, _, profiles = self.getsparsepatterns(rev) + _, _, profiles = sparse.patternsforrev(self, rev) activeprofiles.update(profiles) return activeprofiles @@ -817,7 +774,7 @@ # all active rules aincludes, aexcludes, aprofiles = set(), set(), set() for rev in revs: - rincludes, rexcludes, rprofiles = repo.getsparsepatterns(rev) + rincludes, rexcludes, rprofiles = sparse.patternsforrev(repo, rev) aincludes.update(rincludes) aexcludes.update(rexcludes) aprofiles.update(rprofiles)