# HG changeset patch # User Brendan Cully # Date 1249698474 25200 # Node ID 648d6a1a1cf25c3471b57e07f52746276a2c81ee # Parent 9a69ab6d7cf765c1a3ed43ae8b0e5d770c6eacf6 patch: create file even if source is not /dev/null as long as the first hunk is -0,0 and the source and destination have the same name. Matt found a patch like this, and /usr/bin/patch accepts it. diff -r 9a69ab6d7cf7 -r 648d6a1a1cf2 mercurial/patch.py --- a/mercurial/patch.py Thu Aug 06 21:35:58 2009 -0700 +++ b/mercurial/patch.py Fri Aug 07 19:27:54 2009 -0700 @@ -793,6 +793,17 @@ if reverse: createfunc = hunk.rmfile 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: + # this isn't very pretty + hunk.create = True + if createfunc(): + missing = False + else: + hunk.create = False + # If afile is "a/b/foo" and bfile is "a/b/foo.orig" we assume the # diff is between a file and its backup. In this case, the original # file should be patched (see original mpatch code). diff -r 9a69ab6d7cf7 -r 648d6a1a1cf2 tests/test-import --- a/tests/test-import Thu Aug 06 21:35:58 2009 -0700 +++ b/tests/test-import Fri Aug 07 19:27:54 2009 -0700 @@ -332,3 +332,16 @@ EOF hg import --no-commit a.patch cd .. + +echo '% create file when source is not /dev/null' +cat > create.patch <