Mercurial > hg > mercurial-source
changeset 33850:5a51db8bf41b
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.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Mon, 26 Jun 2017 03:42:17 +0900 |
parents | cf0da12afe8a |
children | a15da610ea20 |
files | hgext/keyword.py |
diffstat | 1 files changed, 9 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/keyword.py +++ b/hgext/keyword.py @@ -88,6 +88,7 @@ import os import re import tempfile +import weakref from mercurial.i18n import _ from mercurial.hgweb import webcommands @@ -212,7 +213,7 @@ 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 @@ 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 @@ 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 @@ extensions.wrapfunction(cmdutil, 'dorecord', kw_dorecord) for c in nokwwebcommands.split(): extensions.wrapfunction(webcommands, c, kwweb_skip) - repo.__class__ = kwrepo