[PATCH 10 of 13 sparse V2] sparse: move profile reading into core

Gregory Szorc gregory.szorc at gmail.com
Thu Jul 6 15:36:36 EDT 2017


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1499368452 25200
#      Thu Jul 06 12:14:12 2017 -0700
# Node ID bbca7c059359f585f8bb3b6ab1276769dbf1fc98
# Parent  e3662ac026a6db43875acb4b89507c0e9d77f16f
sparse: move profile reading into core

Our more step towards weaning off methods on repo instances and
moving code to core. While this function is only used once and
is simple, it needs to exist on its own so Facebook can monkeypatch
it to enable simplecache integration.

diff --git a/hgext/sparse.py b/hgext/sparse.py
--- a/hgext/sparse.py
+++ b/hgext/sparse.py
@@ -431,7 +431,7 @@ def _wraprepo(ui, repo):
                     visited.add(profile)
 
                     try:
-                        raw = self.getrawprofile(profile, rev)
+                        raw = sparse.readprofile(self, profile, rev)
                     except error.ManifestLookupError:
                         msg = (
                             "warning: sparse profile '%s' not found "
@@ -455,11 +455,6 @@ def _wraprepo(ui, repo):
                 includes.add('.hg*')
             return includes, excludes, profiles
 
-        def getrawprofile(self, profile, changeid):
-            # TODO add some kind of cache here because this incurs a manifest
-            # resolve and can be slow.
-            return self.filectx(profile, changeid=changeid).data()
-
         def _sparsechecksum(self, path):
             data = self.vfs.read(path)
             return hashlib.sha1(data).hexdigest()
diff --git a/mercurial/sparse.py b/mercurial/sparse.py
--- a/mercurial/sparse.py
+++ b/mercurial/sparse.py
@@ -46,3 +46,10 @@ def parseconfig(ui, raw):
             current.add(line)
 
     return includes, excludes, profiles
+
+# Exists as separate function to facilitate monkeypatching.
+def readprofile(repo, profile, changeid):
+    """Resolve the raw content of a sparse profile file."""
+    # TODO add some kind of cache here because this incurs a manifest
+    # resolve and can be slow.
+    return repo.filectx(profile, changeid=changeid).data()


More information about the Mercurial-devel mailing list