[PATCH] When applying a git diff, ensure that the target dir exists for new files
stefan at rusek.org
stefan at rusek.org
Tue Dec 9 08:38:37 CST 2008
# HG changeset patch
# User Stefan Rusek <stefan at rusek.org>
# Date 1228829267 -3600
# Node ID 9f077936e48748ec33442ed9639c6ab32f374284
# Parent 518afef5e35007a050f6b0d9e89d99afd97740e8
When applying a git diff, ensure that the target dir exists for new files
diff --git a/mercurial/patch.py b/mercurial/patch.py
--- a/mercurial/patch.py
+++ b/mercurial/patch.py
@@ -22,17 +22,15 @@
# helper functions
-def copyfile(src, dst, basedir=None):
- if not basedir:
- basedir = os.getcwd()
-
- abssrc, absdst = [os.path.join(basedir, n) for n in (src, dst)]
+def copyfile(src, dst, basedir):
+ abssrc, absdst = [util.canonpath(basedir, basedir, x) for x in [src, dst]]
if os.path.exists(absdst):
raise util.Abort(_("cannot create %s: destination already exists") %
dst)
- if not os.path.isdir(basedir):
- os.makedirs(basedir)
+ dstdir = os.path.dirname(absdst)
+ if dstdir and not os.path.exists(dstdir):
+ os.makedirs(dstdir)
util.copyfile(abssrc, absdst)
@@ -977,9 +975,7 @@
cwd = os.getcwd()
for gp in gitpatches:
if gp.op in ('COPY', 'RENAME'):
- src, dst = [util.canonpath(cwd, cwd, x)
- for x in [gp.oldpath, gp.path]]
- copyfile(src, dst)
+ copyfile(gp.oldpath, gp.path, cwd)
changed[gp.path] = gp
else:
raise util.Abort(_('unsupported parser state: %s') % state)
More information about the Mercurial-devel
mailing list