diff -r 3748098d072a -r 50c44dee741a mercurial/filemerge.py --- a/mercurial/filemerge.py Sat Aug 05 05:25:36 2017 +0530 +++ b/mercurial/filemerge.py Sun Aug 06 01:13:57 2017 +0900 @@ -21,6 +21,7 @@ formatter, match, pycompat, + registrar, scmutil, simplemerge, tagmerge, @@ -44,10 +45,12 @@ # Merge tools to document. internalsdoc = {} +internaltool = registrar.internalmerge() + # internal tool merge types -nomerge = None -mergeonly = 'mergeonly' # just the full merge, no premerge -fullmerge = 'fullmerge' # both premerge and merge +nomerge = internaltool.nomerge +mergeonly = internaltool.mergeonly # just the full merge, no premerge +fullmerge = internaltool.fullmerge # both premerge and merge _localchangedotherdeletedmsg = _( "local%(l)s changed %(fd)s which other%(o)s deleted\n" @@ -104,21 +107,6 @@ def isabsent(self): return True -def internaltool(name, mergetype, onfailure=None, precheck=None): - '''return a decorator for populating internal merge tool table''' - def decorator(func): - fullname = ':' + name - func.__doc__ = (pycompat.sysstr("``%s``\n" % fullname) - + func.__doc__.strip()) - internals[fullname] = func - internals['internal:' + name] = func - internalsdoc[fullname] = func - func.mergetype = mergetype - func.onfailure = onfailure - func.precheck = precheck - return func - return decorator - def _findtool(ui, tool): if tool in internals: return tool @@ -743,5 +731,17 @@ def filemerge(repo, mynode, orig, fcd, fco, fca, labels=None): return _filemerge(False, repo, mynode, orig, fcd, fco, fca, labels=labels) +def loadinternalmerge(ui, extname, registrarobj): + """Load internal merge tool from specified registrarobj + """ + for name, func in registrarobj._table.iteritems(): + fullname = ':' + name + internals[fullname] = func + internals['internal:' + name] = func + internalsdoc[fullname] = func + +# load built-in merge tools explicitly to setup internalsdoc +loadinternalmerge(None, None, internaltool) + # tell hggettext to extract docstrings from these functions: i18nfunctions = internals.values()