(diff.info.gz) patch and Tradition
Info Catalog
(diff.info.gz) patch and POSIX
(diff.info.gz) Merging with patch
GNU `patch' and Traditional `patch'
===================================
The current version of GNU `patch' normally follows the POSIX
standard. patch and POSIX, for the few exceptions to this
general rule.
Unfortunately, POSIX redefined the behavior of `patch' in several
important ways. You should be aware of the following differences if
you must interoperate with traditional `patch', or with GNU `patch'
version 2.1 and earlier.
* In traditional `patch', the `-p' option's operand was optional,
and a bare `-p' was equivalent to `-p0'. The `-p' option now
requires an operand, and `-p 0' is now equivalent to `-p0'. For
maximum compatibility, use options like `-p0' and `-p1'.
Also, traditional `patch' simply counted slashes when stripping
path prefixes; `patch' now 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.
* In traditional `patch', backups were enabled by default. This
behavior is now enabled with the `-b' or `--backup' option.
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-mismatch' option, or by conforming to
POSIX.
The `-b SUFFIX' option of traditional `patch' is equivalent to the
`-b -z SUFFIX' options of GNU `patch'.
* Traditional `patch' used 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 `patch' uses 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.
* When traditional `patch' asked 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 `patch'
sends questions to standard output and gets answers from
`/dev/tty'. Defaults for some answers have been changed so that
`patch' never goes into an infinite loop when using default
answers.
* Traditional `patch' exited with a status value that counted the
number of bad hunks, or with status 1 if there was real trouble.
Now `patch' exits 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', traditional
`patch', or a `patch' that conforms to POSIX. Spaces are
significant in the following list, and operands are required.
`-c'
`-d DIR'
`-D DEFINE'
`-e'
`-l'
`-n'
`-N'
`-o OUTFILE'
`-pNUM'
`-R'
`-r REJECTFILE'
Info Catalog
(diff.info.gz) patch and POSIX
(diff.info.gz) Merging with patch
automatically generated byinfo2html