hgext3rd/topic/__init__.py
changeset 3157 f286eefbd20d
parent 3150 95c77ef938ef
child 3158 678a9802c56b
equal deleted inserted replaced
3156:31493a1b0e39 3157:f286eefbd20d
    61     topic-mode = warning # print a warning
    61     topic-mode = warning # print a warning
    62     topic-mode = enforce # abort the commit (except for merge)
    62     topic-mode = enforce # abort the commit (except for merge)
    63     topic-mode = enforce-all # abort the commit (even for merge)
    63     topic-mode = enforce-all # abort the commit (even for merge)
    64     topic-mode = random # use a randomized generated topic (except for merge)
    64     topic-mode = random # use a randomized generated topic (except for merge)
    65     topic-mode = random-all # use a randomized generated topic (even for merge)
    65     topic-mode = random-all # use a randomized generated topic (even for merge)
       
    66 
       
    67 Single head enforcing
       
    68 =====================
       
    69 
       
    70 The extensions come with an option to enforce that there is only one heads for
       
    71 each name in the repository at any time.
       
    72 
       
    73     [experimental]
       
    74     enforce-single-head = yes
    66 """
    75 """
    67 
    76 
    68 from __future__ import absolute_import
    77 from __future__ import absolute_import
    69 
    78 
    70 import functools
    79 import functools
    97 )
   106 )
    98 
   107 
    99 from . import (
   108 from . import (
   100     compat,
   109     compat,
   101     constants,
   110     constants,
       
   111     flow,
   102     revset as topicrevset,
   112     revset as topicrevset,
   103     destination,
   113     destination,
   104     stack,
   114     stack,
   105     topicmap,
   115     topicmap,
   106     discovery,
   116     discovery,
   150     configitem = registrar.configitem(configtable)
   160     configitem = registrar.configitem(configtable)
   151 
   161 
   152     configitem('experimental', 'enforce-topic',
   162     configitem('experimental', 'enforce-topic',
   153                default=False,
   163                default=False,
   154     )
   164     )
       
   165     configitem('experimental', 'enforce-single-head',
       
   166                default=False,
       
   167     )
   155     configitem('experimental', 'topic-mode',
   168     configitem('experimental', 'topic-mode',
   156                default=None,
   169                default=None,
   157     )
   170     )
   158     configitem('_internal', 'keep-topic',
   171     configitem('_internal', 'keep-topic',
   159                default=False,
   172                default=False,
   365         def transaction(self, desc, *a, **k):
   378         def transaction(self, desc, *a, **k):
   366             ctr = self.currenttransaction()
   379             ctr = self.currenttransaction()
   367             tr = super(topicrepo, self).transaction(desc, *a, **k)
   380             tr = super(topicrepo, self).transaction(desc, *a, **k)
   368             if desc in ('strip', 'repair') or ctr is not None:
   381             if desc in ('strip', 'repair') or ctr is not None:
   369                 return tr
   382                 return tr
       
   383 
       
   384             if repo.ui.configbool('experimental', 'enforce-single-head'):
       
   385                 reporef = weakref.ref(self)
       
   386                 origvalidator = tr.validator
       
   387 
       
   388                 def validator(tr2):
       
   389                     repo = reporef()
       
   390                     flow.enforcesinglehead(repo, tr2)
       
   391                     origvalidator(tr2)
       
   392                 tr.validator = validator
   370 
   393 
   371             # real transaction start
   394             # real transaction start
   372             ct = self.currenttopic
   395             ct = self.currenttopic
   373             if not ct:
   396             if not ct:
   374                 return tr
   397                 return tr