summaryrefslogtreecommitdiffstats
path: root/man1p/patch.1p
diff options
context:
space:
mode:
Diffstat (limited to 'man1p/patch.1p')
-rw-r--r--man1p/patch.1p509
1 files changed, 509 insertions, 0 deletions
diff --git a/man1p/patch.1p b/man1p/patch.1p
new file mode 100644
index 000000000..7bd5bc260
--- /dev/null
+++ b/man1p/patch.1p
@@ -0,0 +1,509 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "PATCH" P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" patch
+.SH NAME
+patch \- apply changes to files
+.SH SYNOPSIS
+.LP
+\fBpatch\fP \fB[\fP\fB-blNR\fP\fB][\fP \fB-c| -e| -n\fP\fB][\fP\fB-d\fP
+\fIdir\fP\fB][\fP\fB-D\fP \fIdefine\fP\fB][\fP\fB-i\fP \fIpatchfile\fP\fB]
+.br
+\fP \fB\ \ \ \ \ \ \fP \fB[\fP\fB-o\fP \fIoutfile\fP\fB][\fP\fB-p\fP
+\fInum\fP\fB][\fP\fB-r\fP \fIrejectfile\fP\fB][\fP\fIfile\fP\fB]\fP\fB\fP
+.SH DESCRIPTION
+.LP
+The \fIpatch\fP utility shall read a source (patch) file containing
+any of the three forms of difference (diff) listings
+produced by the \fIdiff\fP utility (normal, context, or in the style
+of \fIed\fP) and apply those differences to a file. By default, \fIpatch\fP
+shall read from the standard
+input.
+.LP
+The \fIpatch\fP utility shall attempt to determine the type of the
+\fIdiff\fP listing,
+unless overruled by a \fB-c\fP, \fB-e\fP, or \fB-n\fP option.
+.LP
+If the patch file contains more than one patch, \fIpatch\fP shall
+attempt to apply each of them as if they came from separate
+patch files. (In this case, the application shall ensure that the
+name of the patch file is determinable for each \fIdiff\fP listing.)
+.SH OPTIONS
+.LP
+The \fIpatch\fP utility shall conform to the Base Definitions volume
+of IEEE\ Std\ 1003.1-2001, Section 12.2, Utility Syntax Guidelines.
+.LP
+The following options shall be supported:
+.TP 7
+\fB-b\fP
+Save 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 \fB.orig\fP appended to it. If the file already exists,
+it shall be overwritten; if multiple patches are applied to the
+same file, the \fB.orig\fP file shall be written only for the first
+patch. When the \fB-o\fP \fIoutfile\fP option is also
+specified, \fIfile\fP \fB.orig\fP shall not be created but, if \fIoutfile\fP
+already exists, \fIoutfile\fP \fB.orig\fP shall
+be created.
+.TP 7
+\fB-c\fP
+Interpret the patch file as a context difference (the output of the
+utility \fIdiff\fP
+when the \fB-c\fP or \fB-C\fP options are specified).
+.TP 7
+\fB-d\ \fP \fIdir\fP
+Change the current directory to \fIdir\fP before processing as described
+in the EXTENDED DESCRIPTION section.
+.TP 7
+\fB-D\ \fP \fIdefine\fP
+Mark changes with one of the following C preprocessor constructs:
+.sp
+.RS
+.nf
+
+\fB#ifdef define
+\&...
+#endif
+.sp
+
+#ifndef define
+\&...
+#endif
+\fP
+.fi
+.RE
+.LP
+optionally combined with the C preprocessor construct \fB#else\fP.
+If the patched file is processed with the C preprocessor,
+where the macro \fIdefine\fP is defined, the output shall contain
+the changes from the patch file; otherwise, the output shall not
+contain the patches specified in the patch file.
+.TP 7
+\fB-e\fP
+Interpret the patch file as an \fIed\fP script, rather than a \fIdiff\fP
+script.
+.TP 7
+\fB-i\ \fP \fIpatchfile\fP
+Read the patch information from the file named by the pathname \fIpatchfile\fP,
+rather than the standard input.
+.TP 7
+\fB-l\fP
+(The letter ell.) Cause any sequence of <blank>s in the difference
+script to match any sequence of <blank>s in the
+input file. Other characters shall be matched exactly.
+.TP 7
+\fB-n\fP
+Interpret the script as a normal difference.
+.TP 7
+\fB-N\fP
+Ignore patches where the differences have already been applied to
+the file; by default, already-applied patches shall be
+rejected.
+.TP 7
+\fB-o\ \fP \fIoutfile\fP
+Instead of modifying the files (specified by the \fIfile\fP operand
+or the difference listings) directly, write a copy of the
+file referenced by each patch, with the appropriate differences applied,
+to \fIoutfile\fP. Multiple patches for a single file
+shall be applied to the intermediate versions of the file created
+by any previous patches, and shall result in multiple,
+concatenated versions of the file being written to \fIoutfile\fP.
+.TP 7
+\fB-p\ \fP \fInum\fP
+For all pathnames in the patch file that indicate the names of files
+to be patched, delete \fInum\fP pathname components from
+the beginning of each pathname. If the pathname in the patch file
+is absolute, any leading slashes shall be considered the first
+component (that is, \fB-p\ 1\fP shall remove the leading slashes).
+Specifying \fB-p\ 0\fP shall cause the full pathname
+to be used. If \fB-p\fP is not specified, only the basename (the final
+pathname component) shall be used.
+.TP 7
+\fB-R\fP
+Reverse the sense of the patch script; that is, assume that the difference
+script was created from the new version to the old
+version. The \fB-R\fP option cannot be used with \fIed\fP scripts.
+The \fIpatch\fP utility
+shall attempt to reverse each portion of the script before applying
+it. Rejected differences shall be saved in swapped format. If
+this option is not specified, and until a portion of the patch file
+is successfully applied, \fIpatch\fP attempts to apply each
+portion in its reversed sense as well as in its normal sense. If the
+attempt is successful, the user shall be prompted to determine
+whether the \fB-R\fP option should be set.
+.TP 7
+\fB-r\ \fP \fIrejectfile\fP
+Override the default reject filename. In the default case, the reject
+file shall have the same name as the output file, with
+the suffix \fB.rej\fP appended to it; see Patch Application .
+.sp
+.SH OPERANDS
+.LP
+The following operand shall be supported:
+.TP 7
+\fIfile\fP
+A pathname of a file to patch.
+.sp
+.SH STDIN
+.LP
+See the INPUT FILES section.
+.SH INPUT FILES
+.LP
+Input files shall be text files.
+.SH ENVIRONMENT VARIABLES
+.LP
+The following environment variables shall affect the execution of
+\fIpatch\fP:
+.TP 7
+\fILANG\fP
+Provide a default value for the internationalization variables that
+are unset or null. (See the Base Definitions volume of
+IEEE\ Std\ 1003.1-2001, Section 8.2, Internationalization Variables
+for
+the precedence of internationalization variables used to determine
+the values of locale categories.)
+.TP 7
+\fILC_ALL\fP
+If set to a non-empty string value, override the values of all the
+other internationalization variables.
+.TP 7
+\fILC_CTYPE\fP
+Determine the locale for the interpretation of sequences of bytes
+of text data as characters (for example, single-byte as
+opposed to multi-byte characters in arguments and input files).
+.TP 7
+\fILC_MESSAGES\fP
+Determine the locale that should be used to affect the format and
+contents of diagnostic messages written to standard error and
+informative messages written to standard output.
+.TP 7
+\fINLSPATH\fP
+Determine the location of message catalogs for the processing of \fILC_MESSAGES
+\&.\fP
+.TP 7
+\fILC_TIME\fP
+Determine the locale for recognizing the format of file timestamps
+written by the \fIdiff\fP utility in a context-difference input file.
+.sp
+.SH ASYNCHRONOUS EVENTS
+.LP
+Default.
+.SH STDOUT
+.LP
+Not used.
+.SH STDERR
+.LP
+The standard error shall be used for diagnostic and informational
+messages.
+.SH OUTPUT FILES
+.LP
+The output of the \fIpatch\fP utility, the save files ( \fB.orig\fP
+suffixes), and the reject files ( \fB.rej\fP suffixes)
+shall be text files.
+.SH EXTENDED DESCRIPTION
+.LP
+A patch file may contain patching instructions for more than one file;
+filenames shall be determined as specified in Filename Determination
+\&. When the \fB-b\fP option is specified, for each patched file, the
+original shall
+be saved in a file of the same name with the suffix \fB.orig\fP appended
+to it.
+.LP
+For each patched file, a reject file may also be created as noted
+in Patch Application . In the
+absence of a \fB-r\fP option, the name of this file shall be formed
+by appending the suffix \fB.rej\fP to the original
+filename.
+.SS Patch File Format
+.LP
+The patch file shall contain zero or more lines of header information
+followed by one or more patches. Each patch shall contain
+zero or more lines of filename identification in the format produced
+by \fIdiff\fP \fB-c\fP,
+and one or more sets of \fIdiff\fP output, which are customarily called
+\fIhunks\fP.
+.LP
+The \fIpatch\fP utility shall recognize the following expression in
+the header information:
+.TP 7
+\fBIndex:\ \fP \fIpathname\fP
+.sp
+The file to be patched is named \fIpathname\fP.
+.sp
+.LP
+If all lines (including headers) within a patch begin with the same
+leading sequence of <blank>s, the \fIpatch\fP utility
+shall remove this sequence before proceeding. Within each patch, if
+the type of difference is context, the \fIpatch\fP utility
+shall recognize the following expressions:
+.TP 7
+***\ \fIfilename\ timestamp\fP
+.sp
+The patches arose from \fIfilename\fP.
+.TP 7
+---\ \fIfilename\ timestamp\fP
+.sp
+The patches should be applied to \fIfilename\fP.
+.sp
+.LP
+Each hunk within a patch shall be the \fIdiff\fP output to change
+a line range within the
+original file. The line numbers for successive hunks within a patch
+shall occur in ascending order.
+.SS Filename Determination
+.LP
+If no \fIfile\fP operand is specified, \fIpatch\fP shall perform the
+following steps to determine the filename to use:
+.IP " 1." 4
+If the type of \fIdiff\fP is context, the \fIpatch\fP utility shall
+delete pathname
+components (as specified by the \fB-p\fP option) from the filename
+on the line beginning with \fB"***"\fP , then test for the
+existence of this file relative to the current directory (or the directory
+specified with the \fB-d\fP option). If the file
+exists, the \fIpatch\fP utility shall use this filename.
+.LP
+.IP " 2." 4
+If the type of \fIdiff\fP is context, the \fIpatch\fP utility shall
+delete the pathname
+components (as specified by the \fB-p\fP option) from the filename
+on the line beginning with \fB"---"\fP , then test for the
+existence of this file relative to the current directory (or the directory
+specified with the \fB-d\fP option). If the file
+exists, the \fIpatch\fP utility shall use this filename.
+.LP
+.IP " 3." 4
+If the header information contains a line beginning with the string
+\fBIndex:\fP, the \fIpatch\fP utility shall delete
+pathname components (as specified by the \fB-p\fP option) from this
+line, then test for the existence of this file relative to the
+current directory (or the directory specified with the \fB-d\fP option).
+If the file exists, the \fIpatch\fP utility shall use
+this filename.
+.LP
+.IP " 4." 4
+If an \fBSCCS\fP directory exists in the current directory, \fIpatch\fP
+shall attempt to perform a \fIget\fP \fB-e\fP \fBSCCS/s.\fP \fIfilename\fP
+command to retrieve an editable version of the
+file. If the file exists, the \fIpatch\fP utility shall use this filename.
+.LP
+.IP " 5." 4
+The \fIpatch\fP utility shall write a prompt to standard output and
+request a filename interactively from the controlling
+terminal (for example, \fB/dev/tty\fP).
+.LP
+.SS Patch Application
+.LP
+If the \fB-c\fP, \fB-e\fP, or \fB-n\fP option is present, the \fIpatch\fP
+utility shall interpret information within each
+hunk as a context difference, an \fIed\fP difference, or a normal
+difference, respectively. In
+the absence of any of these options, the \fIpatch\fP utility shall
+determine the type of difference based on the format of
+information within the hunk.
+.LP
+For each hunk, the \fIpatch\fP utility shall begin to search for the
+place to apply the patch at the line number at the
+beginning of the hunk, plus or minus any offset used in applying the
+previous hunk. If lines matching the hunk context are not
+found, \fIpatch\fP shall scan both forwards and backwards at least
+1000 bytes for a set of lines that match the hunk context.
+.LP
+If no such place is found and it is a context difference, then another
+scan shall take place, ignoring the first and last line
+of context. If that fails, the first two and last two lines of context
+shall be ignored and another scan shall be made.
+Implementations may search more extensively for installation locations.
+.LP
+If no location can be found, the \fIpatch\fP utility shall append
+the hunk to the reject file. The rejected hunk shall be
+written in context-difference format regardless of the format of the
+patch file. If the input was a normal or \fIed\fP-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 shall reflect the
+approximate locations for the failed hunks in the new file rather
+than the old one.
+.LP
+If the type of patch is an \fIed\fP diff, the implementation may accomplish
+the patching by
+invoking the \fIed\fP utility.
+.SH EXIT STATUS
+.LP
+The following exit values shall be returned:
+.TP 7
+\ 0
+Successful completion.
+.TP 7
+\ 1
+One or more lines were written to a reject file.
+.TP 7
+>1
+An error occurred.
+.sp
+.SH CONSEQUENCES OF ERRORS
+.LP
+Patches that cannot be correctly placed in the file shall be written
+to a reject file.
+.LP
+\fIThe following sections are informative.\fP
+.SH APPLICATION USAGE
+.LP
+The \fB-R\fP option does not work with \fIed\fP scripts because there
+is too little
+information to reconstruct the reverse operation.
+.LP
+The \fB-p\fP option makes it possible to customize a patch file to
+local user directory structures without manually editing the
+patch file. For example, if the filename in the patch file was:
+.sp
+.RS
+.nf
+
+\fB/curds/whey/src/blurfl/blurfl.c
+\fP
+.fi
+.RE
+.LP
+Setting \fB-p\ 0\fP gives the entire pathname unmodified; \fB-p\ 1\fP
+gives:
+.sp
+.RS
+.nf
+
+\fBcurds/whey/src/blurfl/blurfl.c
+\fP
+.fi
+.RE
+.LP
+without the leading slash, \fB-p\ 4\fP gives:
+.sp
+.RS
+.nf
+
+\fBblurfl/blurfl.c
+\fP
+.fi
+.RE
+.LP
+and not specifying \fB-p\fP at all gives:
+.sp
+.RS
+.nf
+
+\fBblurfl.c .
+\fP
+.fi
+.RE
+.SH EXAMPLES
+.LP
+None.
+.SH RATIONALE
+.LP
+Some of the functionality in historical \fIpatch\fP implementations
+was not specified. The following documents those features
+present in historical implementations that have not been specified.
+.LP
+A deleted piece of functionality was the \fB'+'\fP pseudo-option allowing
+an additional set of options and a patch file
+operand to be given. This was seen as being insufficiently useful
+to standardize.
+.LP
+In historical implementations, if the string \fB"Prereq:"\fP appeared
+in the header, the \fIpatch\fP utility would search
+for the corresponding version information (the string specified in
+the header, delimited by <blank>s or the beginning or end
+of a line or the file) anywhere in the original file. This was deleted
+as too simplistic and insufficiently trustworthy a mechanism
+to standardize. For example, if:
+.sp
+.RS
+.nf
+
+\fBPrereq: 1.2
+\fP
+.fi
+.RE
+.LP
+were in the header, the presence of a delimited 1.2 anywhere in the
+file would satisfy the prerequisite.
+.LP
+The following options were dropped from historical implementations
+of \fIpatch\fP as insufficiently useful to standardize:
+.TP 7
+\fB-b\fP
+The \fB-b\fP option historically provided a method for changing the
+name extension of the backup file from the default
+\fB\&.orig\fP. This option has been modified and retained in this volume
+of IEEE\ Std\ 1003.1-2001.
+.TP 7
+\fB-F\fP
+The \fB-F\fP option specified the number of lines of a context diff
+to ignore when searching for a place to install a
+patch.
+.TP 7
+\fB-f\fP
+The \fB-f\fP option historically caused \fIpatch\fP not to request
+additional information from the user.
+.TP 7
+\fB-r\fP
+The \fB-r\fP option historically provided a method of overriding the
+extension of the reject file from the default
+\fB\&.rej\fP.
+.TP 7
+\fB-s\fP
+The \fB-s\fP option historically caused \fIpatch\fP to work silently
+unless an error occurred.
+.TP 7
+\fB-x\fP
+The \fB-x\fP option historically set internal debugging flags.
+.sp
+.LP
+In some file system implementations, the saving of a \fB.orig\fP file
+may produce unwanted results. In the case of 12, 13, or
+14-character filenames (on file systems supporting 14-character maximum
+filenames), the \fB.orig\fP file overwrites the new file.
+The reject file may also exceed this filename limit. It was suggested,
+due to some historical practice, that a tilde (
+\fB'~'\fP ) suffix be used instead of \fB.orig\fP and some other character
+instead of the \fB.rej\fP suffix. This was
+rejected because it is not obvious to the user which file is which.
+The suffixes \fB.orig\fP and \fB.rej\fP are clearer and more
+understandable.
+.LP
+The \fB-b\fP option has the opposite sense in some historical implementations-do
+not save the \fB.orig\fP file. The default
+case here is not to save the files, making \fIpatch\fP behave more
+consistently with the other standard utilities.
+.LP
+The \fB-w\fP option in early proposals was changed to \fB-l\fP to
+match historical practice.
+.LP
+The \fB-N\fP option was included because without it, a non-interactive
+application cannot reject previously applied patches.
+For example, if a user is piping the output of \fIdiff\fP into the
+\fIpatch\fP utility, and
+the user only wants to patch a file to a newer version non-interactively,
+the \fB-N\fP option is required.
+.LP
+Changes to the \fB-l\fP option description were proposed to allow
+matching across <newline>s in addition to just
+<blank>s. Since this is not historical practice, and since some ambiguities
+could result, it is suggested that future
+developments in this area utilize another option letter, such as \fB-L\fP.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fIed\fP , \fIdiff\fP
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group. In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .