mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 23:38:50 +03:00
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.
This commit is contained in:
parent
f2b2c89b93
commit
2689134340
@ -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,
|
||||
|
@ -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."""
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user