DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(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