[PATCH 11 of 11 sparse V3] sparse: move post commit actions into core
Gregory Szorc
gregory.szorc at gmail.com
Thu Jul 6 21:18:32 EDT 2017
# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1499379254 25200
# Thu Jul 06 15:14:14 2017 -0700
# Node ID fe47ebda0b384aa1d3002c6db3c4bace60472337
# Parent 1c1a25d842854cbb2a7516136f7bcaab0d9f4539
sparse: move post commit actions into core
Instead of wrapping committablectx.markcommitted(), we inline
the call into localrepository.commit(), which is the only place
we call markcommitted().
The APIs and distribution of duties between
localrepository.commit() and committablecontext.markcommitted()
are unclear to me. As is the proper order for certain operations
to be performed. There is room to improve this code.
diff --git a/hgext/sparse.py b/hgext/sparse.py
--- 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, repl
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/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -53,6 +53,7 @@ from . import (
revset,
revsetlang,
scmutil,
+ sparse,
store,
subrepo,
tags as tagsmod,
@@ -1742,6 +1743,7 @@ class localrepository(object):
# update bookmarks, dirstate and mergestate
bookmarks.update(self, [p1, p2], ret)
cctx.markcommitted(ret)
+ sparse.aftercommit(self, ret)
ms.reset()
tr.close()
diff --git a/mercurial/sparse.py b/mercurial/sparse.py
--- a/mercurial/sparse.py
+++ b/mercurial/sparse.py
@@ -478,3 +478,17 @@ def refreshwdir(repo, origstatus, origsp
dirstate.normallookup(file)
return added, dropped, lookup
+
+def aftercommit(repo, node):
+ """Perform actions after a working directory commit."""
+ 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)
More information about the Mercurial-devel
mailing list