Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/filemerge.py @ 33725: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
33724:3748098d072a | 33725: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() |