mercurial/filemerge.py
changeset 33699 50c44dee741a
parent 33523 11025c4f1016
child 33827 db3e9f7c91aa
equal deleted inserted replaced
33698:3748098d072a 33699:50c44dee741a
    19     encoding,
    19     encoding,
    20     error,
    20     error,
    21     formatter,
    21     formatter,
    22     match,
    22     match,
    23     pycompat,
    23     pycompat,
       
    24     registrar,
    24     scmutil,
    25     scmutil,
    25     simplemerge,
    26     simplemerge,
    26     tagmerge,
    27     tagmerge,
    27     templatekw,
    28     templatekw,
    28     templater,
    29     templater,
    42 
    43 
    43 internals = {}
    44 internals = {}
    44 # Merge tools to document.
    45 # Merge tools to document.
    45 internalsdoc = {}
    46 internalsdoc = {}
    46 
    47 
       
    48 internaltool = registrar.internalmerge()
       
    49 
    47 # internal tool merge types
    50 # internal tool merge types
    48 nomerge = None
    51 nomerge = internaltool.nomerge
    49 mergeonly = 'mergeonly'  # just the full merge, no premerge
    52 mergeonly = internaltool.mergeonly # just the full merge, no premerge
    50 fullmerge = 'fullmerge'  # both premerge and merge
    53 fullmerge = internaltool.fullmerge # both premerge and merge
    51 
    54 
    52 _localchangedotherdeletedmsg = _(
    55 _localchangedotherdeletedmsg = _(
    53     "local%(l)s changed %(fd)s which other%(o)s deleted\n"
    56     "local%(l)s changed %(fd)s which other%(o)s deleted\n"
    54     "use (c)hanged version, (d)elete, or leave (u)nresolved?"
    57     "use (c)hanged version, (d)elete, or leave (u)nresolved?"
    55     "$$ &Changed $$ &Delete $$ &Unresolved")
    58     "$$ &Changed $$ &Delete $$ &Unresolved")
   101     def isbinary(self):
   104     def isbinary(self):
   102         return False
   105         return False
   103 
   106 
   104     def isabsent(self):
   107     def isabsent(self):
   105         return True
   108         return True
   106 
       
   107 def internaltool(name, mergetype, onfailure=None, precheck=None):
       
   108     '''return a decorator for populating internal merge tool table'''
       
   109     def decorator(func):
       
   110         fullname = ':' + name
       
   111         func.__doc__ = (pycompat.sysstr("``%s``\n" % fullname)
       
   112                         + func.__doc__.strip())
       
   113         internals[fullname] = func
       
   114         internals['internal:' + name] = func
       
   115         internalsdoc[fullname] = func
       
   116         func.mergetype = mergetype
       
   117         func.onfailure = onfailure
       
   118         func.precheck = precheck
       
   119         return func
       
   120     return decorator
       
   121 
   109 
   122 def _findtool(ui, tool):
   110 def _findtool(ui, tool):
   123     if tool in internals:
   111     if tool in internals:
   124         return tool
   112         return tool
   125     return findexternaltool(ui, tool)
   113     return findexternaltool(ui, tool)
   741     return _filemerge(True, repo, mynode, orig, fcd, fco, fca, labels=labels)
   729     return _filemerge(True, repo, mynode, orig, fcd, fco, fca, labels=labels)
   742 
   730 
   743 def filemerge(repo, mynode, orig, fcd, fco, fca, labels=None):
   731 def filemerge(repo, mynode, orig, fcd, fco, fca, labels=None):
   744     return _filemerge(False, repo, mynode, orig, fcd, fco, fca, labels=labels)
   732     return _filemerge(False, repo, mynode, orig, fcd, fco, fca, labels=labels)
   745 
   733 
       
   734 def loadinternalmerge(ui, extname, registrarobj):
       
   735     """Load internal merge tool from specified registrarobj
       
   736     """
       
   737     for name, func in registrarobj._table.iteritems():
       
   738         fullname = ':' + name
       
   739         internals[fullname] = func
       
   740         internals['internal:' + name] = func
       
   741         internalsdoc[fullname] = func
       
   742 
       
   743 # load built-in merge tools explicitly to setup internalsdoc
       
   744 loadinternalmerge(None, None, internaltool)
       
   745 
   746 # tell hggettext to extract docstrings from these functions:
   746 # tell hggettext to extract docstrings from these functions:
   747 i18nfunctions = internals.values()
   747 i18nfunctions = internals.values()