Node:Avoiding Common Mistakes, Next:Generating Smaller Patches, Previous:Tips for Patch Consumers, Up:Making Patches
When producing a patch for multiple files, apply diff
to
directories whose names do not have slashes. This reduces confusion
when the patch consumer specifies the -pnumber
option,
since this option can have surprising results when the old and new
file names have different numbers of slashes. For example, do not
send a patch with a header that looks like this:
diff -Naur v2.0.29/prog/README prog/README --- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800 +++ prog/README 2002-03-17 20:49:32.442260588 -0800
because the two file names have different numbers of slashes, and
different versions of patch
interpret the file names
differently. To avoid confusion, send output that looks like this
instead:
diff -Naur v2.0.29/prog/README v2.0.30/prog/README --- v2.0.29/prog/README 2002-03-10 23:30:39.942229878 -0800 +++ v2.0.30/prog/README 2002-03-17 20:49:32.442260588 -0800
Make sure you have specified the file names correctly, either in a
context diff header or with an Index:
line. Take care to not send out
reversed patches, since these make people wonder whether they have
already applied the patch.
Avoid sending patches that compare backup file names like
README.orig
or README~
, since this might confuse
patch
into patching a backup file instead of the real file.
Instead, send patches that compare the same base file names in
different directories, e.g. old/README
and new/README
.
To save people from partially applying a patch before other patches that
should have gone before it, you can make the first patch in the patch
file update a file with a name like patchlevel.h
or
version.c
, which contains a patch level or version number. If
the input file contains the wrong version number, patch
will
complain immediately.
An even clearer way to prevent this problem is to put a Prereq:
line before the patch. If the leading text in the patch file contains a
line that starts with Prereq:
, patch
takes the next word
from that line (normally a version number) and checks whether the next
input file contains that word, preceded and followed by either
white space or a newline. If not, patch
prompts you for
confirmation before proceeding. This makes it difficult to accidentally
apply patches in the wrong order.