306 """ |
306 """ |
307 _getname = _funcregistrarbase._parsefuncdecl |
307 _getname = _funcregistrarbase._parsefuncdecl |
308 |
308 |
309 def _extrasetup(self, name, func, argspec=None): |
309 def _extrasetup(self, name, func, argspec=None): |
310 func._argspec = argspec |
310 func._argspec = argspec |
|
311 |
|
312 class internalmerge(_funcregistrarbase): |
|
313 """Decorator to register in-process merge tool |
|
314 |
|
315 Usage:: |
|
316 |
|
317 internalmerge = registrar.internalmerge() |
|
318 |
|
319 @internalmerge('mymerge', internalmerge.mergeonly, |
|
320 onfailure=None, precheck=None): |
|
321 def mymergefunc(repo, mynode, orig, fcd, fco, fca, |
|
322 toolconf, files, labels=None): |
|
323 '''Explanation of this internal merge tool .... |
|
324 ''' |
|
325 return 1, False # means "conflicted", "no deletion needed" |
|
326 |
|
327 The first string argument is used to compose actual merge tool name, |
|
328 ":name" and "internal:name" (the latter is historical one). |
|
329 |
|
330 The second argument is one of merge types below: |
|
331 |
|
332 ========== ======== ======== ========= |
|
333 merge type precheck premerge fullmerge |
|
334 ========== ======== ======== ========= |
|
335 nomerge x x x |
|
336 mergeonly o x o |
|
337 fullmerge o o o |
|
338 ========== ======== ======== ========= |
|
339 |
|
340 Optional argument 'onfalure' is the format of warning message |
|
341 to be used at failure of merging (target filename is specified |
|
342 at formatting). Or, None or so, if warning message should be |
|
343 suppressed. |
|
344 |
|
345 Optional argument 'precheck' is the function to be used |
|
346 before actual invocation of internal merge tool itself. |
|
347 It takes as same arguments as internal merge tool does, other than |
|
348 'files' and 'labels'. If it returns false value, merging is aborted |
|
349 immediately (and file is marked as "unresolved"). |
|
350 |
|
351 'internalmerge' instance in example above can be used to |
|
352 decorate multiple functions. |
|
353 |
|
354 Decorated functions are registered automatically at loading |
|
355 extension, if an instance named as 'internalmerge' is used for |
|
356 decorating in extension. |
|
357 |
|
358 Otherwise, explicit 'filemerge.loadinternalmerge()' is needed. |
|
359 """ |
|
360 _docformat = "``:%s``\n %s" |
|
361 |
|
362 # merge type definitions: |
|
363 nomerge = None |
|
364 mergeonly = 'mergeonly' # just the full merge, no premerge |
|
365 fullmerge = 'fullmerge' # both premerge and merge |
|
366 |
|
367 def _extrasetup(self, name, func, mergetype, |
|
368 onfailure=None, precheck=None): |
|
369 func.mergetype = mergetype |
|
370 func.onfailure = onfailure |
|
371 func.precheck = precheck |