# HG changeset patch # User Patrick Mezard # Date 1308141854 -7200 # Node ID d32735c507cdd162fbc347f49f3cde6629a18b93 # Parent f07bfd66db130bedd1390e1db313c502c9d1c547 stupid: use new patching facility introduced by adbf5e7df96d diff --git a/hgsubversion/stupid.py b/hgsubversion/stupid.py --- a/hgsubversion/stupid.py +++ b/hgsubversion/stupid.py @@ -115,7 +115,7 @@ def filteriterhunks(meta): yield data return filterhunks -def patchrepo(ui, meta, parentctx, patchfp): +def patchrepoold(ui, meta, parentctx, patchfp): files = {} try: oldpatchfile = patch.patchfile @@ -148,6 +148,39 @@ def patchrepo(ui, meta, parentctx, patch raise BadPatchApply('patching succeeded with fuzz') return files +try: + class svnbackend(patch.repobackend): + def getfile(self, fname): + data, (islink, isexec) = super(svnbackend, self).getfile(fname) + if islink: + data = 'link ' + data + return data, (islink, isexec) +except AttributeError: + svnbackend = None + +def patchrepo(ui, meta, parentctx, patchfp): + if not svnbackend: + return patchrepoold(ui, meta, parentctx, patchfp) + store = patch.filestore() + try: + touched = set() + backend = svnbackend(ui, meta.repo, parentctx, store) + ret = patch.patchbackend(ui, backend, patchfp, 0, touched) + if ret < 0: + raise BadPatchApply('patching failed') + if ret > 0: + raise BadPatchApply('patching succeeded with fuzz') + files = {} + for f in touched: + try: + data, mode, copied = store.getfile(f) + files[f] = data + except IOError: + files[f] = None + return files + finally: + store.close() + def diff_branchrev(ui, svn, meta, branch, branchpath, r, parentctx): """Extract all 'branch' content at a given revision.