hgext/sparse.py
changeset 33300 f7a106b3f089
parent 33299 41448fc51510
child 33301 ca4b78eb11e7
--- 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)