--- a/mercurial/patch.py Fri Mar 19 16:05:16 2010 -0500
+++ b/mercurial/patch.py Sat Mar 20 10:01:56 2010 -0500
@@ -933,8 +933,10 @@
missing = not goodb and not gooda and not createfunc()
# some diff programs apparently produce create patches where the
- # afile is not /dev/null, but rather the same name as the bfile
- if missing and afile == bfile:
+ # afile is not /dev/null, but afile starts with bfile
+ abasedir = afile[:afile.rfind('/') + 1]
+ bbasedir = bfile[:bfile.rfind('/') + 1]
+ if missing and abasedir == bbasedir and afile.startswith(bfile):
# this isn't very pretty
hunk.create = True
if createfunc():
--- a/tests/test-import Fri Mar 19 16:05:16 2010 -0500
+++ b/tests/test-import Sat Mar 20 10:01:56 2010 -0500
@@ -351,10 +351,22 @@
@@ -0,0 +1,1 @@
+a
EOF
+# some people have patches like the following too
+cat > create2.patch <<EOF
+diff -Naur proj-orig/foo proj-new/foo
+--- proj-orig/foo.orig 1969-12-31 16:00:00.000000000 -0800
++++ proj-new/foo 2009-07-17 16:50:45.801368000 -0700
+@@ -0,0 +1,1 @@
++a
+EOF
hg init oddcreate
cd oddcreate
hg import --no-commit ../create.patch
cat foo
+rm foo
+hg revert foo
+hg import --no-commit ../create2.patch
+cat foo
echo % 'first line mistaken for email headers (issue 1859)'
hg init emailconfusion
--- a/tests/test-import.out Fri Mar 19 16:05:16 2010 -0500
+++ b/tests/test-import.out Sat Mar 20 10:01:56 2010 -0500
@@ -305,6 +305,8 @@
% create file when source is not /dev/null
applying ../create.patch
a
+applying ../create2.patch
+a
% first line mistaken for email headers (issue 1859)
applying a.patch
changeset: 0:5a681217c0ad