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

login
register
mail settings
Submitter Gregory Szorc
Date July 6, 2017, 7:36 p.m.
Message ID <bbca7c059359f585f8bb.1499369796@ubuntu-vm-main>
Download mbox | patch
Permalink /patch/22042/
State Accepted
Headers show

Comments

Gregory Szorc - July 6, 2017, 7:36 p.m.
# HG changeset patch
# User Gregory Szorc <gregory.szorc@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.

Patch

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()