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() |