# HG changeset patch # User Benoit Boissinot # Date 1269035558 -3600 # Node ID d94832c4a31d49eb5747c364540c9fd36f639689 # Parent 0e8403f4ce317c7b68dfa73d0e3aff8b7cb48528 patch: try harder to find the file to patch on file creation (issue2041) accept the following patch header: first line: foo/a.orig second line: foo/a diff -r 0e8403f4ce31 -r d94832c4a31d mercurial/patch.py --- a/mercurial/patch.py Fri Mar 19 16:04:00 2010 -0500 +++ b/mercurial/patch.py Fri Mar 19 22:52:38 2010 +0100 @@ -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(): diff -r 0e8403f4ce31 -r d94832c4a31d tests/test-import --- a/tests/test-import Fri Mar 19 16:04:00 2010 -0500 +++ b/tests/test-import Fri Mar 19 22:52:38 2010 +0100 @@ -351,10 +351,22 @@ @@ -0,0 +1,1 @@ +a EOF +# some people have patches like the following too +cat > create2.patch <