mercurial/registrar.py
changeset 33699 50c44dee741a
parent 33132 c467d13334ee
child 34273 b0790bebfcf8
equal deleted inserted replaced
33698:3748098d072a 33699:50c44dee741a
   306     """
   306     """
   307     _getname = _funcregistrarbase._parsefuncdecl
   307     _getname = _funcregistrarbase._parsefuncdecl
   308 
   308 
   309     def _extrasetup(self, name, func, argspec=None):
   309     def _extrasetup(self, name, func, argspec=None):
   310         func._argspec = argspec
   310         func._argspec = argspec
       
   311 
       
   312 class internalmerge(_funcregistrarbase):
       
   313     """Decorator to register in-process merge tool
       
   314 
       
   315     Usage::
       
   316 
       
   317         internalmerge = registrar.internalmerge()
       
   318 
       
   319         @internalmerge('mymerge', internalmerge.mergeonly,
       
   320                        onfailure=None, precheck=None):
       
   321         def mymergefunc(repo, mynode, orig, fcd, fco, fca,
       
   322                         toolconf, files, labels=None):
       
   323             '''Explanation of this internal merge tool ....
       
   324             '''
       
   325             return 1, False # means "conflicted", "no deletion needed"
       
   326 
       
   327     The first string argument is used to compose actual merge tool name,
       
   328     ":name" and "internal:name" (the latter is historical one).
       
   329 
       
   330     The second argument is one of merge types below:
       
   331 
       
   332     ========== ======== ======== =========
       
   333     merge type precheck premerge fullmerge
       
   334     ========== ======== ======== =========
       
   335     nomerge     x        x        x
       
   336     mergeonly   o        x        o
       
   337     fullmerge   o        o        o
       
   338     ========== ======== ======== =========
       
   339 
       
   340     Optional argument 'onfalure' is the format of warning message
       
   341     to be used at failure of merging (target filename is specified
       
   342     at formatting). Or, None or so, if warning message should be
       
   343     suppressed.
       
   344 
       
   345     Optional argument 'precheck' is the function to be used
       
   346     before actual invocation of internal merge tool itself.
       
   347     It takes as same arguments as internal merge tool does, other than
       
   348     'files' and 'labels'. If it returns false value, merging is aborted
       
   349     immediately (and file is marked as "unresolved").
       
   350 
       
   351     'internalmerge' instance in example above can be used to
       
   352     decorate multiple functions.
       
   353 
       
   354     Decorated functions are registered automatically at loading
       
   355     extension, if an instance named as 'internalmerge' is used for
       
   356     decorating in extension.
       
   357 
       
   358     Otherwise, explicit 'filemerge.loadinternalmerge()' is needed.
       
   359     """
       
   360     _docformat = "``:%s``\n    %s"
       
   361 
       
   362     # merge type definitions:
       
   363     nomerge = None
       
   364     mergeonly = 'mergeonly'  # just the full merge, no premerge
       
   365     fullmerge = 'fullmerge'  # both premerge and merge
       
   366 
       
   367     def _extrasetup(self, name, func, mergetype,
       
   368                     onfailure=None, precheck=None):
       
   369         func.mergetype = mergetype
       
   370         func.onfailure = onfailure
       
   371         func.precheck = precheck