|Comparing and Merging Files with GNU diff and patch|
by David MacKenzie, Paul Eggert, and Richard Stallman
Paperback (6"x9"), 120 pages
RRP £12.95 ($19.95)
"Well packaged... the quality of information is excellent" --- Linux User and Developer Magazine (Issue 36, Feb 2004) Get a printed copy>>>
patch and Traditional
The current version of GNU
patch normally follows the
POSIX standard. See section 10.12
patch and the POSIX Standard, for the few exceptions
to this general rule.
Unfortunately, POSIX redefined the behavior of
several important ways. You should be aware of the following
differences if you must interoperate with traditional
or with GNU
patch version 2.1 and earlier.
-poption's operand was optional, and a bare
-pwas equivalent to
-poption now requires an operand, and
-p 0is now equivalent to
-p0. For maximum compatibility, use options like
-p1. Also, traditional
patchsimply counted slashes when stripping path prefixes;
patchnow counts pathname components. That is, a sequence of one or more adjacent slashes now counts as a single slash. For maximum portability, avoid sending patches containing ‘//’ in file names.
patch, backups were enabled by default. This behavior is now enabled with the
--backupoption. Conversely, in POSIX
patch, backups are never made, even when there is a mismatch. In GNU
patch, this behavior is enabled with the
--no-backup-if-mismatchoption, or by conforming to POSIX. The
-b suffixoption of traditional
patchis equivalent to the ‘-b -z suffix’ options of GNU
patchused a complicated (and incompletely documented) method to intuit the name of the file to be patched from the patch header. This method did not conform to POSIX, and had a few gotchas. Now
patchuses a different, equally complicated (but better documented) method that is optionally POSIX-conforming; we hope it has fewer gotchas. The two methods are compatible if the file names in the context diff header and the ‘Index:’ line are all identical after prefix-stripping. Your patch is normally compatible if each header's file names all contain the same number of slashes.
patchasked the user a question, it sent the question to standard error and looked for an answer from the first file in the following list that was a terminal: standard error, standard output, ‘/dev/tty’, and standard input. Now
patchsends questions to standard output and gets answers from ‘/dev/tty’. Defaults for some answers have been changed so that
patchnever goes into an infinite loop when using default answers.
patchexited with a status value that counted the number of bad hunks, or with status 1 if there was real trouble. Now
patchexits with status 1 if some hunks failed, or with 2 if there was real trouble.
Limit yourself to the following options when sending instructions
meant to be executed by anyone running GNU
patch, or a
patchthat conforms to POSIX. Spaces are significant in the following list, and operands are required.
|ISBN 0954161750||Comparing and Merging Files with GNU diff and patch||See the print edition|