# HG changeset patch # User Martin von Zweigbergk # Date 2017-11-14 18:26:36 # Node ID 1706eae096e26fe095a13d5181a470ae19a9e602 # Parent e9a8a941950ac90256ab1a90a57618656c15ae81 patch: accept prefix argument to changedfiles() helper I'd like to call the function from an extension, passing both "strip" and "prefix", but it currently only accepts "strip". The only in-tree caller seems to be mq.py, which doesn't even pass "strip". Differential Revision: https://phab.mercurial-scm.org/D1413 diff --git a/mercurial/patch.py b/mercurial/patch.py --- a/mercurial/patch.py +++ b/mercurial/patch.py @@ -1990,14 +1990,16 @@ def applydiff(ui, fp, backend, store, st return _applydiff(ui, fp, patchfile, backend, store, strip=strip, prefix=prefix, eolmode=eolmode) +def _canonprefix(repo, prefix): + if prefix: + prefix = pathutil.canonpath(repo.root, repo.getcwd(), prefix) + if prefix != '': + prefix += '/' + return prefix + def _applydiff(ui, fp, patcher, backend, store, strip=1, prefix='', eolmode='strict'): - - if prefix: - prefix = pathutil.canonpath(backend.repo.root, backend.repo.getcwd(), - prefix) - if prefix != '': - prefix += '/' + prefix = _canonprefix(backend.repo, prefix) def pstrip(p): return pathtransform(p, strip - 1, prefix)[1] @@ -2183,20 +2185,22 @@ def patch(ui, repo, patchname, strip=1, return internalpatch(ui, repo, patchname, strip, prefix, files, eolmode, similarity) -def changedfiles(ui, repo, patchpath, strip=1): +def changedfiles(ui, repo, patchpath, strip=1, prefix=''): backend = fsbackend(ui, repo.root) + prefix = _canonprefix(repo, prefix) with open(patchpath, 'rb') as fp: changed = set() for state, values in iterhunks(fp): if state == 'file': afile, bfile, first_hunk, gp = values if gp: - gp.path = pathtransform(gp.path, strip - 1, '')[1] + gp.path = pathtransform(gp.path, strip - 1, prefix)[1] if gp.oldpath: - gp.oldpath = pathtransform(gp.oldpath, strip - 1, '')[1] + gp.oldpath = pathtransform(gp.oldpath, strip - 1, + prefix)[1] else: gp = makepatchmeta(backend, afile, bfile, first_hunk, strip, - '') + prefix) changed.add(gp.path) if gp.op == 'RENAME': changed.add(gp.oldpath)