mirror of
https://github.com/facebook/sapling.git
synced 2024-10-08 07:49:11 +03:00
keyword: make wrapped repository and kwtemplater refer to each other
Wrapper functions of keyword extension are defined in reposetup(), because they refer to kwtemplater instantiated in reposetup(). But these functions can be defined statically, if kwtemplater can be obtained via repository at runtime. This is a part of preparations for defining them statically. To avoid cyclic reference, this patch makes kwtemplater use weakref to refer related repository instance.
This commit is contained in:
parent
58b53f952e
commit
5ed9c1efe5
@ -88,6 +88,7 @@ from __future__ import absolute_import
|
||||
import os
|
||||
import re
|
||||
import tempfile
|
||||
import weakref
|
||||
|
||||
from mercurial.i18n import _
|
||||
from mercurial.hgweb import webcommands
|
||||
@ -212,7 +213,7 @@ class kwtemplater(object):
|
||||
|
||||
def __init__(self, ui, repo, inc, exc):
|
||||
self.ui = ui
|
||||
self.repo = repo
|
||||
self._repo = weakref.ref(repo)
|
||||
self.match = match.match(repo.root, '', [], inc, exc)
|
||||
self.restrict = kwtools['hgcmd'] in restricted.split()
|
||||
self.postcommit = False
|
||||
@ -223,6 +224,10 @@ class kwtemplater(object):
|
||||
else:
|
||||
self.templates = _defaultkwmaps(self.ui)
|
||||
|
||||
@property
|
||||
def repo(self):
|
||||
return self._repo()
|
||||
|
||||
@util.propertycache
|
||||
def escape(self):
|
||||
'''Returns bar-separated and escaped keywords.'''
|
||||
@ -658,6 +663,9 @@ def reposetup(ui, repo):
|
||||
finally:
|
||||
kwt.restrict = origrestrict
|
||||
|
||||
repo.__class__ = kwrepo
|
||||
repo._keywordkwt = kwt
|
||||
|
||||
# monkeypatches
|
||||
def kwpatchfile_init(orig, self, ui, gp, backend, store, eolmode=None):
|
||||
'''Monkeypatch/wrap patch.patchfile.__init__ to avoid
|
||||
@ -768,4 +776,3 @@ def reposetup(ui, repo):
|
||||
extensions.wrapfunction(cmdutil, 'dorecord', kw_dorecord)
|
||||
for c in nokwwebcommands.split():
|
||||
extensions.wrapfunction(webcommands, c, kwweb_skip)
|
||||
repo.__class__ = kwrepo
|
||||
|
Loading…
Reference in New Issue
Block a user