hgext3rd/topic/__init__.py
changeset 2928 6275808e89ef
parent 2924 430fb1758d28
child 2930 7932a0deae18
equal deleted inserted replaced
2927:01cf426bd458 2928:6275808e89ef
    56 import time
    56 import time
    57 
    57 
    58 from mercurial.i18n import _
    58 from mercurial.i18n import _
    59 from mercurial import (
    59 from mercurial import (
    60     bookmarks,
    60     bookmarks,
       
    61     changelog,
    61     cmdutil,
    62     cmdutil,
    62     commands,
    63     commands,
    63     context,
    64     context,
    64     error,
    65     error,
    65     extensions,
    66     extensions,
   305     repo._topics = None
   306     repo._topics = None
   306     if util.safehasattr(repo, 'names'):
   307     if util.safehasattr(repo, 'names'):
   307         repo.names.addnamespace(namespaces.namespace(
   308         repo.names.addnamespace(namespaces.namespace(
   308             'topics', 'topic', namemap=_namemap, nodemap=_nodemap,
   309             'topics', 'topic', namemap=_namemap, nodemap=_nodemap,
   309             listnames=lambda repo: repo.topics))
   310             listnames=lambda repo: repo.topics))
       
   311     # Wrap workingctx extra to return the topic name
       
   312     extensions.wrapfunction(context.workingctx, '__init__', wrapinit)
       
   313     # Wrap changelog.add to drop empty topic
       
   314     extensions.wrapfunction(changelog.changelog, 'add', wrapadd)
       
   315 
       
   316 def wrapinit(orig, self, repo, *args, **kwargs):
       
   317     orig(self, repo, *args, **kwargs)
       
   318     if repo.currenttopic:
       
   319         self._extra[constants.extrakey] = repo.currenttopic
       
   320     else:
       
   321         # Empty key will be dropped from extra by another hack at the changegroup level
       
   322         self._extra[constants.extrakey] = ''
       
   323 
       
   324 def wrapadd(orig, cl, manifest, files, desc, transaction, p1, p2, user,
       
   325             date=None, extra=None):
       
   326     if constants.extrakey in extra and not extra[constants.extrakey]:
       
   327         extra = extra.copy()
       
   328         del extra[constants.extrakey]
       
   329     return orig(cl, manifest, files, desc, transaction, p1, p2, user,
       
   330                 date=date, extra=extra)
   310 
   331 
   311 # revset predicates are automatically registered at loading via this symbol
   332 # revset predicates are automatically registered at loading via this symbol
   312 revsetpredicate = topicrevset.revsetpredicate
   333 revsetpredicate = topicrevset.revsetpredicate
   313 
   334 
   314 @command('topics', [
   335 @command('topics', [