hgext3rd/topic/__init__.py
changeset 5183 9ac6779d608c
parent 5164 3a2a17b1985c
child 5193 a4d081923c81
equal deleted inserted replaced
5182:df5e6e3884bc 5183:9ac6779d608c
   153     phases,
   153     phases,
   154     pycompat,
   154     pycompat,
   155     registrar,
   155     registrar,
   156     scmutil,
   156     scmutil,
   157     templatefilters,
   157     templatefilters,
   158     templatekw,
       
   159     util,
   158     util,
   160 )
   159 )
   161 
   160 
   162 from . import (
   161 from . import (
   163     common,
   162     common,
   256                 or not ui._knownconfig[b'devel'].get(b'random')):
   255                 or not ui._knownconfig[b'devel'].get(b'random')):
   257             extraitem(b'devel', b'randomseed',
   256             extraitem(b'devel', b'randomseed',
   258                       default=None,
   257                       default=None,
   259             )
   258             )
   260 
   259 
   261 # we need to do old style declaration for <= 4.5
       
   262 templatekeyword = registrar.templatekeyword()
       
   263 post45template = r'requires=' in templatekeyword.__doc__
       
   264 
       
   265 def _contexttopic(self, force=False):
   260 def _contexttopic(self, force=False):
   266     if not (force or self.mutable()):
   261     if not (force or self.mutable()):
   267         return b''
   262         return b''
   268     return self.extra().get(constants.extrakey, b'')
   263     return self.extra().get(constants.extrakey, b'')
   269 context.basectx.topic = _contexttopic
   264 context.basectx.topic = _contexttopic
   371     except (KeyError, AttributeError):
   366     except (KeyError, AttributeError):
   372         pass
   367         pass
   373 
   368 
   374     cmdutil.summaryhooks.add(b'topic', summaryhook)
   369     cmdutil.summaryhooks.add(b'topic', summaryhook)
   375 
   370 
   376     if not post45template:
       
   377         templatekw.keywords[b'topic'] = topickw
       
   378         templatekw.keywords[b'topicidx'] = topicidxkw
       
   379     # Wrap workingctx extra to return the topic name
   371     # Wrap workingctx extra to return the topic name
   380     extensions.wrapfunction(context.workingctx, '__init__', wrapinit)
   372     extensions.wrapfunction(context.workingctx, '__init__', wrapinit)
   381     # Wrap changelog.add to drop empty topic
   373     # Wrap changelog.add to drop empty topic
   382     extensions.wrapfunction(changelog.changelog, 'add', wrapadd)
   374     extensions.wrapfunction(changelog.changelog, 'add', wrapadd)
   383 
   375 
   590     if util.safehasattr(repo, 'names'):
   582     if util.safehasattr(repo, 'names'):
   591         repo.names.addnamespace(namespaces.namespace(
   583         repo.names.addnamespace(namespaces.namespace(
   592             b'topics', b'topic', namemap=_namemap, nodemap=_nodemap,
   584             b'topics', b'topic', namemap=_namemap, nodemap=_nodemap,
   593             listnames=lambda repo: repo.topics))
   585             listnames=lambda repo: repo.topics))
   594 
   586 
   595 if post45template:
   587 templatekeyword = registrar.templatekeyword()
   596     @templatekeyword(b'topic', requires={b'ctx'})
   588 
   597     def topickw(context, mapping):
   589 @templatekeyword(b'topic', requires={b'ctx'})
   598         """:topic: String. The topic of the changeset"""
   590 def topickw(context, mapping):
   599         ctx = context.resource(mapping, b'ctx')
   591     """:topic: String. The topic of the changeset"""
   600         return ctx.topic()
   592     ctx = context.resource(mapping, b'ctx')
   601 
   593     return ctx.topic()
   602     @templatekeyword(b'topicidx', requires={b'ctx'})
   594 
   603     def topicidxkw(context, mapping):
   595 @templatekeyword(b'topicidx', requires={b'ctx'})
   604         """:topicidx: Integer. Index of the changeset as a stack alias"""
   596 def topicidxkw(context, mapping):
   605         ctx = context.resource(mapping, b'ctx')
   597     """:topicidx: Integer. Index of the changeset as a stack alias"""
   606         return ctx.topicidx()
   598     ctx = context.resource(mapping, b'ctx')
   607 else:
   599     return ctx.topicidx()
   608     def topickw(**args):
       
   609         """:topic: String. The topic of the changeset"""
       
   610         return args[b'ctx'].topic()
       
   611 
       
   612     def topicidxkw(**args):
       
   613         """:topicidx: Integer. Index of the changeset as a stack alias"""
       
   614         return args[b'ctx'].topicidx()
       
   615 
   600 
   616 def wrapinit(orig, self, repo, *args, **kwargs):
   601 def wrapinit(orig, self, repo, *args, **kwargs):
   617     orig(self, repo, *args, **kwargs)
   602     orig(self, repo, *args, **kwargs)
   618     if not hastopicext(repo):
   603     if not hastopicext(repo):
   619         return
   604         return