unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-5.10)
Page:
Section:
Apropos / Subsearch:
optional field

patch(1)                         User Commands                        patch(1)



NAME
       patch - apply changes to files

SYNOPSIS
       patch  [-blNR] [-c | -e | -n | -u]  [-d dir] [-D define] [-i patchfile]
       [-o outfile] [-p num] [-r rejectfile] [file]

DESCRIPTION
       The patch command reads a source (patch) file  containing  any  of  the
       three  forms of difference (diff) listings produced by the diff(1) com-
       mand (normal, context or in the style of ed(1)) and apply those differ-
       ences to a file.  By default, patch reads from the standard input.

       patch  attempts to determine the type of the diff listing, unless over-
       ruled by a -c, -e, or -n option.

       If the patch file contains more than one patch, patch will  attempt  to
       apply  each of them as if they came from separate patch files. (In this
       case the name of the patch file must  be  determinable  for  each  diff
       listing.)

OPTIONS
       The following options are supported:

       -b              Saves  a copy of the original contents of each modified
                       file, before the differences are applied, in a file  of
                       the  same name with the suffix .orig appended to it. If
                       the file already exists, it  will  be  overwritten.  If
                       multiple  patches  are  applied  to  the same file, the
                       .orig file will be written only for  the  first  patch.
                       When the -o outfile option is also specified, file.orig
                       will not be created but,  if  outfile  already  exists,
                       outfile.orig will be created.



       -c              Interprets  the patch file as a context difference (the
                       output of the command diff when the -c  or  -C  options
                       are specified).



       -d dir          Changes  the current directory to dir before processing
                       as described in EXTENDED DESCRIPTION.



       -D define       Marks changes with the C preprocessor construct:


                       #ifdef define
                       ...
                       #endif



       The option-argument define will be used as the differentiating symbol.

       -e              Interprets the patch file as an ed script, rather  than
                       a diff script.



       -i patchfile    Reads  the patch information from the file named by the
                       path name patchfile, rather than the standard input.



       -l              (The letter ell.) Causes any sequence of blank  charac-
                       ters  in the difference script to match any sequence of
                       blank characters in the input  file.  Other  characters
                       will be matched exactly.



       -n              Interprets the script as a normal difference.



       -N              Ignores patches where the differences have already been
                       applied  to  the  file;  by  default,   already-applied
                       patches are rejected.



       -o outfile      Instead  of  modifying the files (specified by the file
                       operand or the difference listings) directly, writes  a
                       copy  of  the  file  referenced by each patch, with the
                       appropriate differences applied, to  outfile.  Multiple
                       patches for a single file will be applied to the inter-
                       mediate versions of the file created  by  any  previous
                       patches, and will result in multiple, concatenated ver-
                       sions of the file being written to outfile.



       -p num          For all path names in the patch file that indicate  the
                       names  of  files  to  be patched, deletes num path name
                       components from the beginning of each path name. If the
                       path  name  in  the patch file is absolute, any leading
                       slashes are considered the first component (that is, -p
                       1  removes the leading slashes). Specifying -p 0 causes
                       the full path name to be used. If -p is not  specified,
                       only  the  basename  (the final path name component) is
                       used.



       -R              Reverses the  sense  of  the  patch  script.  That  is,
                       assumes that the difference script was created from the
                       new version to the old version. The -R option cannot be
                       used  with  ed  scripts. patch attempts to reverse each
                       portion of the script before applying it. Rejected dif-
                       ferences  will  be  saved  in  swapped  format. If this
                       option is not specified, and until  a  portion  of  the
                       patch  file  is successfully applied, patch attempts to
                       apply each portion in its reversed sense as well as  in
                       its  normal  sense.  If  the attempt is successful, the
                       user will be prompted to determine  if  the  -R  option
                       should be set.



       -r rejectfile   Overrides  the default reject file name. In the default
                       case, the reject file will have the same  name  as  the
                       output  file,  with the suffix .rej appended to it. See
                       Patch Application.



       -u              Interprets the patch file as a unified context  differ-
                       ence,  that is, the output of the command diff when the
                       -u or -U options are specified.



OPERANDS
       The following operand is supported:

       file     A path name of a file to patch.



USAGE
       The -R option will not work with ed scripts because there is too little
       information to reconstruct the reverse operation.

       The -p option makes it possible to customize a patch file to local user
       directory structures without manually editing the patch file. For exam-
       ple,     if    the    file    name    in    the    patch    file    was
       /curds/whey/src/blurfl/blurfl.c:

         o  Setting -p 0 gives the entire path name unmodified.

         o  Setting -p 1 gives:


            curds/whey/src/blurfl/blurfl.c

         o  Without the leading slash, -p 4 gives:


            blurfl/blurfl.c

         o  Not specifying -p at all gives:


            blurfl.c


       When using -b in some file system  implementations,  the  saving  of  a
       .orig  file  may  produce unwanted results. In the case of 12-, 13-, or
       14-character file names, on file systems supporting 14-character  maxi-
       mum file names, the .orig file will overwrite the new file.

ENVIRONMENT VARIABLES
       See  environ(5) for descriptions of the following environment variables
       that affect the execution of patch:  LANG,  LC_ALL,  LC_CTYPE,  LC_MES-
       SAGES, LC_TIME, and NLSPATH.

OUTPUT FILES
       The  output  of  patch  the  save files (.orig suffixes) and the reject
       files (.rej suffixes) will be text files.

EXTENDED DESCRIPTION
       A patch file may contain patching instructions for more than one  file.
       File names are determined as specified in Patch Determination. When the
       -b option is specified, for each patched file,  the  original  will  be
       saved in a file of the same name with the suffix .orig appended to it.

       For  each  patched  file, a reject file may also be created as noted in
       Patch Application. In the absence of an -r option,  the  name  of  this
       file  will  be formed by appending the suffix .rej to the original file
       name.

   Patch File Format
       The patch file must contain zero or more lines  of  header  information
       followed  by  one or more patches. Each patch must contain zero or more
       lines of file name identification in the format produced  by  diff  -c,
       and  one  or  more  sets  of  diff output, which are customarily called
       hunks.

       patch recognizes the following expression in the header information:

       Index:pathname          The file to be patched is named pathname.



       If all lines (including headers) within a patch  begin  with  the  same
       leading  sequence  of blank characters, patch will remove this sequence
       before proceeding. Within each patch, if the type of difference is con-
       text, patch recognizes the following expressions:

       *** filename timestamp

           The patches arose from filename.



       --- filename timestamp

           The patches should be applied to filename.



       Each hunk within a patch must be the diff output to change a line range
       within the original file. The line numbers for successive hunks  within
       a patch must occur in ascending order.

   File Name Determination
       If  no file operand is specified, patch performs the following steps to
       obtain a path name:

       1.  If the patch contains the strings *** and ---, patch strips  compo-
           nents  from the beginning of each path name (depending on the pres-
           ence or value of the -p option), then tests for  the  existence  of
           both  files  in  the current directory (or directory specified with
           the -d option).


       2.  If both files exist,  patch  assumes  that  no  path  name  can  be
           obtained  from this step. If the header information contains a line
           with the string Index:, patch strips components from the  beginning
           of the path name (depending on -p), then tests for the existence of
           this file in the current directory (or directory specified with the
           -d option).


       3.  If  an  SCCS  directory exists in the current directory, patch will
           attempt to perform a get -e SCCS/s.filename command to retrieve  an
           editable version of the file.


       4.  If  no path name can be obtained by applying the previous steps, or
           if the path names obtained do not exist, patch will write a  prompt
           to standard output and request a file name interactively from stan-
           dard input.


   Patch Application
       If the -c, -e, -n, or -u option is present, patch will interpret infor-
       mation  within  each  hunk as a context difference, an ed difference, a
       normal difference, or a unified context  difference,  respectively.  In
       the  absence of any of these options, patch determines the type of dif-
       ference based on the format of information within the hunk.

       For each hunk, patch begins to search for the place to apply the  patch
       at the line number at the beginning of the hunk, plus or minus any off-
       set used in applying the previous hunk. If lines matching the hunk con-
       text  are  not  found, patch scans both forwards and backwards at least
       1000 bytes for a set of lines that match the hunk context.

       If no such place is found and it is a context difference, then  another
       scan  will  take place, ignoring the first and last line of context. If
       that fails, the first two and last two lines of context will be ignored
       and  another  scan will be made. Implementations may search more exten-
       sively for installation locations.

       If no location can be found, patch will append the hunk to  the  reject
       file.  The  rejected  hunk will be written in context-difference format
       regardless of the format of the patch file. If the input was  a  normal
       or  ed  -style difference, the reject file may contain differences with
       zero lines of context. The line numbers on the hunks in the reject file
       may  be  different  from  the line numbers in the patch file since they
       will reflect the approximate locations for the failed hunks in the  new
       file rather than the old one.

       If  the  type of patch is an ed diff, the implementation may accomplish
       the patching by invoking the ed command.

EXIT STATUS
       The following exit values are returned:

       0        Successful completion.



       1        One or more lines were written to a reject file.



       >>1       An error occurred.



ATTRIBUTES
       See attributes(5) for descriptions of the following attributes:


       tab()    allbox;    cw(2.750000i)|     cw(2.750000i)     lw(2.750000i)|
       lw(2.750000i).    ATTRIBUTE   TYPEATTRIBUTE  VALUE  AvailabilitySUNWcsu
       Interface StabilityStandard


SEE ALSO
       ed(1), diff(1), attributes(5), environ(5), standards(5)



SunOS 5.10                        28 Sep 2001                         patch(1)