changeset 24246:394a91cb3d4a

patch._applydiff: accept a prefix parameter This is preparation for upcoming patches that will add support for applying a patch within a subdirectory. We normalize the prefix here because this is the main driver -- all code to apply patches is expected to go through here.
author Siddharth Agarwal <sid0@fb.com>
date Fri, 06 Mar 2015 22:22:14 -0800
parents 740a17f885a1
children 6e19516094a3
files mercurial/patch.py
diffstat 1 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/patch.py	Fri Mar 06 22:19:26 2015 -0800
+++ b/mercurial/patch.py	Fri Mar 06 22:22:14 2015 -0800
@@ -1366,11 +1366,14 @@
     return _applydiff(ui, fp, patchfile, backend, store, strip=strip,
                       eolmode=eolmode)
 
-def _applydiff(ui, fp, patcher, backend, store, strip=1,
+def _applydiff(ui, fp, patcher, backend, store, strip=1, prefix='',
                eolmode='strict'):
 
+    if prefix:
+        # clean up double slashes, lack of trailing slashes, etc
+        prefix = util.normpath(prefix) + '/'
     def pstrip(p):
-        return pathtransform(p, strip - 1, '')[1]
+        return pathtransform(p, strip - 1, prefix)[1]
 
     rejects = 0
     err = 0
@@ -1393,7 +1396,8 @@
                 if gp.oldpath:
                     gp.oldpath = pstrip(gp.oldpath)
             else:
-                gp = makepatchmeta(backend, afile, bfile, first_hunk, strip, '')
+                gp = makepatchmeta(backend, afile, bfile, first_hunk, strip,
+                                   prefix)
             if gp.op == 'RENAME':
                 backend.unlink(gp.oldpath)
             if not first_hunk: