From 268913434074d8ccadb0a15f23531f3dec7f3352 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Fri, 7 Jul 2017 11:51:10 -0700 Subject: [PATCH] sparse: move post commit actions into core Instead of wrapping committablectx.markcommitted(), we inline the call into workingctx.markcommitted(). Per smf's review, workingctx is the proper location for this code, as committablectx is the shared base class for it and memctx. Since this code touches the working directory, it belongs in workingctx. --- hgext/sparse.py | 25 ------------------------- mercurial/context.py | 6 ++++++ mercurial/sparse.py | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/hgext/sparse.py b/hgext/sparse.py index c93ca5f524..26ee16940a 100644 --- a/hgext/sparse.py +++ b/hgext/sparse.py @@ -79,7 +79,6 @@ from mercurial.node import nullid from mercurial import ( cmdutil, commands, - context, dirstate, error, extensions, @@ -100,9 +99,6 @@ testedwith = 'ships-with-hg-core' cmdtable = {} command = registrar.command(cmdtable) -def uisetup(ui): - _setupcommit(ui) - def extsetup(ui): sparse.enabled = True @@ -134,27 +130,6 @@ def replacefilecache(cls, propname, replacement): raise AttributeError(_("type '%s' has no property '%s'") % (origcls, propname)) -def _setupcommit(ui): - def _refreshoncommit(orig, self, node): - """Refresh the checkout when commits touch .hgsparse - """ - orig(self, node) - repo = self._repo - - 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 = sparse.matcher(repo) - sparse.refreshwdir(repo, origstatus, origsparsematch, force=True) - - sparse.prunetemporaryincludes(repo) - - extensions.wrapfunction(context.committablectx, 'markcommitted', - _refreshoncommit) - def _setuplog(ui): entry = commands.table['^log|history'] entry[1].append(('', 'sparse', None, diff --git a/mercurial/context.py b/mercurial/context.py index 2264fce8bc..d1b604ccf1 100644 --- a/mercurial/context.py +++ b/mercurial/context.py @@ -38,6 +38,7 @@ from . import ( repoview, revlog, scmutil, + sparse, subrepo, util, ) @@ -1803,6 +1804,11 @@ class workingctx(committablectx): match.bad = bad return match + def markcommitted(self, node): + super(workingctx, self).markcommitted(node) + + sparse.aftercommit(self._repo, node) + class committablefilectx(basefilectx): """A committablefilectx provides common functionality for a file context that wants the ability to commit, e.g. workingfilectx or memfilectx.""" diff --git a/mercurial/sparse.py b/mercurial/sparse.py index f2498ae60e..0543ef354a 100644 --- a/mercurial/sparse.py +++ b/mercurial/sparse.py @@ -478,3 +478,19 @@ def refreshwdir(repo, origstatus, origsparsematch, force=False): dirstate.normallookup(file) return added, dropped, lookup + +def aftercommit(repo, node): + """Perform actions after a working directory commit.""" + # This function is called unconditionally, even if sparse isn't + # enabled. + ctx = repo[node] + + profiles = patternsforrev(repo, ctx.rev())[2] + + # profiles will only have data if sparse is enabled. + if set(profiles) & set(ctx.files()): + origstatus = repo.status() + origsparsematch = matcher(repo) + refreshwdir(repo, origstatus, origsparsematch, force=True) + + prunetemporaryincludes(repo)