hgext/keyword.py
changeset 33067 5a51db8bf41b
parent 33065 0afdc1a4f925
child 33068 a15da610ea20
equal deleted inserted replaced
33066:cf0da12afe8a 33067:5a51db8bf41b
    86 from __future__ import absolute_import
    86 from __future__ import absolute_import
    87 
    87 
    88 import os
    88 import os
    89 import re
    89 import re
    90 import tempfile
    90 import tempfile
       
    91 import weakref
    91 
    92 
    92 from mercurial.i18n import _
    93 from mercurial.i18n import _
    93 from mercurial.hgweb import webcommands
    94 from mercurial.hgweb import webcommands
    94 
    95 
    95 from mercurial import (
    96 from mercurial import (
   210     provides keyword substitution functions.
   211     provides keyword substitution functions.
   211     '''
   212     '''
   212 
   213 
   213     def __init__(self, ui, repo, inc, exc):
   214     def __init__(self, ui, repo, inc, exc):
   214         self.ui = ui
   215         self.ui = ui
   215         self.repo = repo
   216         self._repo = weakref.ref(repo)
   216         self.match = match.match(repo.root, '', [], inc, exc)
   217         self.match = match.match(repo.root, '', [], inc, exc)
   217         self.restrict = kwtools['hgcmd'] in restricted.split()
   218         self.restrict = kwtools['hgcmd'] in restricted.split()
   218         self.postcommit = False
   219         self.postcommit = False
   219 
   220 
   220         kwmaps = self.ui.configitems('keywordmaps')
   221         kwmaps = self.ui.configitems('keywordmaps')
   221         if kwmaps: # override default templates
   222         if kwmaps: # override default templates
   222             self.templates = dict(kwmaps)
   223             self.templates = dict(kwmaps)
   223         else:
   224         else:
   224             self.templates = _defaultkwmaps(self.ui)
   225             self.templates = _defaultkwmaps(self.ui)
       
   226 
       
   227     @property
       
   228     def repo(self):
       
   229         return self._repo()
   225 
   230 
   226     @util.propertycache
   231     @util.propertycache
   227     def escape(self):
   232     def escape(self):
   228         '''Returns bar-separated and escaped keywords.'''
   233         '''Returns bar-separated and escaped keywords.'''
   229         return '|'.join(map(re.escape, self.templates.keys()))
   234         return '|'.join(map(re.escape, self.templates.keys()))
   656                         kwt.overwrite(ctx, added, True, False)
   661                         kwt.overwrite(ctx, added, True, False)
   657                     return ret
   662                     return ret
   658                 finally:
   663                 finally:
   659                     kwt.restrict = origrestrict
   664                     kwt.restrict = origrestrict
   660 
   665 
       
   666     repo.__class__ = kwrepo
       
   667     repo._keywordkwt = kwt
       
   668 
   661     # monkeypatches
   669     # monkeypatches
   662     def kwpatchfile_init(orig, self, ui, gp, backend, store, eolmode=None):
   670     def kwpatchfile_init(orig, self, ui, gp, backend, store, eolmode=None):
   663         '''Monkeypatch/wrap patch.patchfile.__init__ to avoid
   671         '''Monkeypatch/wrap patch.patchfile.__init__ to avoid
   664         rejects or conflicts due to expanded keywords in working dir.'''
   672         rejects or conflicts due to expanded keywords in working dir.'''
   665         orig(self, ui, gp, backend, store, eolmode)
   673         orig(self, ui, gp, backend, store, eolmode)
   766     extensions.wrapfunction(cmdutil, 'amend', kw_amend)
   774     extensions.wrapfunction(cmdutil, 'amend', kw_amend)
   767     extensions.wrapfunction(cmdutil, 'copy', kw_copy)
   775     extensions.wrapfunction(cmdutil, 'copy', kw_copy)
   768     extensions.wrapfunction(cmdutil, 'dorecord', kw_dorecord)
   776     extensions.wrapfunction(cmdutil, 'dorecord', kw_dorecord)
   769     for c in nokwwebcommands.split():
   777     for c in nokwwebcommands.split():
   770         extensions.wrapfunction(webcommands, c, kwweb_skip)
   778         extensions.wrapfunction(webcommands, c, kwweb_skip)
   771     repo.__class__ = kwrepo