##// END OF EJS Templates
context: move logic from changectx.__init__ to localrepo.__getitem__ (API)...
context: move logic from changectx.__init__ to localrepo.__getitem__ (API) My motivation for this change was to make repo[node] not load the dirstate (more about that in the next patch), but I think it makes more sense this way too. For example, raising RepoLookupError seems to belong better in the repo lookup function (i.e. localrepo.__getitem__). This makes the changectx constructor very simple -- it just assigns the given repo, revnum, and nodeid to properties. Differential Revision: https://phab.mercurial-scm.org/D4827

File last commit:

r39988:75452c1e default
r39994:3d35304b default
Show More
__init__.py
72 lines | 2.3 KiB | text/x-python | PythonLexer
# __init__.py - narrowhg extension
#
# Copyright 2017 Google, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
'''create clones which fetch history data for subset of files (EXPERIMENTAL)'''
from __future__ import absolute_import
# Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
# extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
# be specifying the version(s) of Mercurial they are tested with, or
# leave the attribute unspecified.
testedwith = 'ships-with-hg-core'
from mercurial import (
localrepo,
registrar,
repository,
)
from . import (
narrowbundle2,
narrowcommands,
narrowcopies,
narrowrepo,
narrowtemplates,
narrowwirepeer,
)
configtable = {}
configitem = registrar.configitem(configtable)
# Narrowhg *has* support for serving ellipsis nodes (which are used at
# least by Google's internal server), but that support is pretty
# fragile and has a lot of problems on real-world repositories that
# have complex graph topologies. This could probably be corrected, but
# absent someone needing the full support for ellipsis nodes in
# repositories with merges, it's unlikely this work will get done. As
# of this writining in late 2017, all repositories large enough for
# ellipsis nodes to be a hard requirement also enforce strictly linear
# history for other scaling reasons.
configitem('experimental', 'narrowservebrokenellipses',
default=False,
alias=[('narrow', 'serveellipses')],
)
# Export the commands table for Mercurial to see.
cmdtable = narrowcommands.table
def featuresetup(ui, features):
features.add(repository.NARROW_REQUIREMENT)
def uisetup(ui):
"""Wraps user-facing mercurial commands with narrow-aware versions."""
localrepo.featuresetupfuncs.add(featuresetup)
narrowbundle2.setup()
narrowcommands.setup()
narrowwirepeer.uisetup()
def reposetup(ui, repo):
"""Wraps local repositories with narrow repo support."""
if not repo.local():
return
if repository.NARROW_REQUIREMENT in repo.requirements:
narrowrepo.wraprepo(repo)
narrowcopies.setup(repo)
narrowwirepeer.reposetup(repo)
templatekeyword = narrowtemplates.templatekeyword
revsetpredicate = narrowtemplates.revsetpredicate