comparison mercurial/filemerge.py @ 33699:50c44dee741a

filemerge: move decorator definition for internal merge tools to registrar This patch also adds extra loading entry for internal merge tools to extensions.py, for similarity to other decorators defined in registrar.py. This patch uses "internalmerge" for decorator class name, instead of original "internaltool", because the latter is too generic. BTW, after this patch, 4-spaces indentation is added to the 1st line of internal merge tool description docstring, and this may make already translated entries in *.po fuzzy. Even though this indentation is required for "definition list" in reST syntax, absence of it has been overlooked, because help.makeitemsdoc() forcibly inserts it at generation of online help. But this forcible insertion causes formatting issue (I'll send another patch series for this). Therefore, this additional indentation should be reasonable.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Sun, 06 Aug 2017 01:13:57 +0900
parents 11025c4f1016
children db3e9f7c91aa
comparison
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()