diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py index 7c6044634957adb0fcf0525abd78dd2182013f1a_bWVyY3VyaWFsL2ZpbGVtZXJnZS5weQ==..5d3b5847266055a3b85d7bb9c2678b32d49a8583_bWVyY3VyaWFsL2ZpbGVtZXJnZS5weQ== 100644 --- a/mercurial/filemerge.py +++ b/mercurial/filemerge.py @@ -470,7 +470,7 @@ success, status = tagmerge.merge(repo, fcd, fco, fca) return success, status, False -@internaltool('dump', fullmerge) +@internaltool('dump', fullmerge, binary=True, symlink=True) def _idump(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): """ Creates three versions of the files to merge, containing the @@ -496,7 +496,7 @@ repo.wwrite(fd + ".base", fca.data(), fca.flags()) return False, 1, False -@internaltool('forcedump', mergeonly) +@internaltool('forcedump', mergeonly, binary=True, symlink=True) def _forcedump(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): """ diff --git a/mercurial/registrar.py b/mercurial/registrar.py index 7c6044634957adb0fcf0525abd78dd2182013f1a_bWVyY3VyaWFsL3JlZ2lzdHJhci5weQ==..5d3b5847266055a3b85d7bb9c2678b32d49a8583_bWVyY3VyaWFsL3JlZ2lzdHJhci5weQ== 100644 --- a/mercurial/registrar.py +++ b/mercurial/registrar.py @@ -399,7 +399,8 @@ internalmerge = registrar.internalmerge() @internalmerge('mymerge', internalmerge.mergeonly, - onfailure=None, precheck=None): + onfailure=None, precheck=None, + binary=False, symlink=False): def mymergefunc(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): '''Explanation of this internal merge tool .... @@ -430,6 +431,12 @@ 'files' and 'labels'. If it returns false value, merging is aborted immediately (and file is marked as "unresolved"). + Optional argument 'binary' is a binary files capability of internal + merge tool. 'nomerge' merge type implies binary=True. + + Optional argument 'symlink' is a symlinks capability of inetrnal + merge function. 'nomerge' merge type implies symlink=True. + 'internalmerge' instance in example above can be used to decorate multiple functions. @@ -447,7 +454,8 @@ fullmerge = 'fullmerge' # both premerge and merge def _extrasetup(self, name, func, mergetype, - onfailure=None, precheck=None): + onfailure=None, precheck=None, + binary=False, symlink=False): func.mergetype = mergetype func.onfailure = onfailure func.precheck = precheck @@ -451,3 +459,9 @@ func.mergetype = mergetype func.onfailure = onfailure func.precheck = precheck + + binarycap = binary or mergetype == self.nomerge + symlinkcap = symlink or mergetype == self.nomerge + + # actual capabilities, which this internal merge tool has + func.capabilities = {"binary": binarycap, "symlink": symlinkcap}