home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD2.bin
/
bbs
/
gnu
/
patch-2.1-bin.lha
/
GNU
/
man
/
cat1
/
patch.0
Wrap
Text File
|
1993-12-07
|
22KB
|
529 lines
PATCH(1) PATCH(1)
NNAAMMEE
patch - apply a diff file to an original
SSYYNNOOPPSSIISS
ppaattcchh [options] [origfile [patchfile]] [+ [options] [orig-
file]]...
but usually just
ppaattcchh <patchfile
DDEESSCCRRIIPPTTIIOONN
_P_a_t_c_h will take a patch file containing any of the four
forms of difference listing produced by the _d_i_f_f program
and apply those differences to an original file, producing
a patched version. By default, the patched version is put
in place of the original, with the original file backed up
to the same name with the extension ".orig" ("~" on sys-
tems that do not support long file names), or as specified
by the --bb (----ssuuffffiixx), --BB (----pprreeffiixx), or --VV (----vveerr--
ssiioonn--ccoonnttrrooll) options. The extension used for making
backup files may also be specified in the SSIIMM--
PPLLEE__BBAACCKKUUPP__SSUUFFFFIIXX environment variable, which is overrid-
den by the above options.
If the backup file already exists, ppaattcchh creates a new
backup file name by changing the first lowercase letter in
the last component of the file's name into uppercase. If
there are no more lowercase letters in the name, it
removes the first character from the name. It repeats
this process until it comes up with a backup file that
does not already exist.
You may also specify where you want the output to go with
a --oo (----oouuttppuutt) option; if that file already exists, it is
backed up first.
If _p_a_t_c_h_f_i_l_e is omitted, or is a hyphen, the patch will be
read from standard input.
Upon startup, patch will attempt to determine the type of
the diff listing, unless over-ruled by a --cc (----ccoonntteexxtt),
--ee (----eedd), --nn (----nnoorrmmaall), or --uu (----uunniiffiieedd) option. Con-
text diffs (old-style, new-style, and unified) and normal
diffs are applied by the _p_a_t_c_h program itself, while _e_d
diffs are simply fed to the _e_d editor via a pipe.
_P_a_t_c_h will try to skip any leading garbage, apply the
diff, and then skip any trailing garbage. Thus you could
feed an article or message containing a diff listing to
_p_a_t_c_h, and it should work. If the entire diff is indented
by a consistent amount, this will be taken into account.
With context diffs, and to a lesser extent with normal
LOCAL 1
PATCH(1) PATCH(1)
diffs, _p_a_t_c_h can detect when the line numbers mentioned in
the patch are incorrect, and will attempt to find the cor-
rect place to apply each hunk of the patch. As a first
guess, it takes the line number mentioned for the hunk,
plus or minus any offset used in applying the previous
hunk. If that is not the correct place, _p_a_t_c_h will scan
both forwards and backwards for a set of lines matching
the context given in the hunk. First _p_a_t_c_h looks for a
place where all lines of the context match. If no such
place is found, and it's a context diff, and the maximum
fuzz factor is set to 1 or more, then another scan takes
place ignoring the first and last line of context. If
that fails, and the maximum fuzz factor is set to 2 or
more, the first two and last two lines of context are
ignored, and another scan is made. (The default maximum
fuzz factor is 2.) If _p_a_t_c_h cannot find a place to
install that hunk of the patch, it will put the hunk out
to a reject file, which normally is the name of the output
file plus ".rej" ("#" on systems that do not support long
file names). (Note that the rejected hunk will come out
in context diff form whether the input patch was a context
diff or a normal diff. If the input was a normal diff,
many of the contexts will simply be null.) The line num-
bers on the hunks in the reject file may be different than
in the patch file: they reflect the approximate location
patch thinks the failed hunks belong in the new file
rather than the old one.
As each hunk is completed, you will be told whether the
hunk succeeded or failed, and which line (in the new file)
_p_a_t_c_h thought the hunk should go on. If this is different
from the line number specified in the diff you will be
told the offset. A single large offset MAY be an indica-
tion that a hunk was installed in the wrong place. You
will also be told if a fuzz factor was used to make the
match, in which case you should also be slightly suspi-
cious.
If no original file is specified on the command line,
_p_a_t_c_h will try to figure out from the leading garbage what
the name of the file to edit is. In the header of a con-
text diff, the file name is found from lines beginning
with "***" or "---", with the shortest name of an existing
file winning. Only context diffs have lines like that,
but if there is an "Index:" line in the leading garbage,
_p_a_t_c_h will try to use the file name from that line. The
context diff header takes precedence over an Index line.
If no file name can be intuited from the leading garbage,
you will be asked for the name of the file to patch.
If the original file cannot be found or is read-only, but
a suitable SCCS or RCS file is handy, _p_a_t_c_h will attempt
to get or check out the file.
LOCAL 2
PATCH(1) PATCH(1)
Additionally, if the leading garbage contains a "Prereq: "
line, _p_a_t_c_h will take the first word from the prerequi-
sites line (normally a version number) and check the input
file to see if that word can be found. If not, _p_a_t_c_h will
ask for confirmation before proceeding.
The upshot of all this is that you should be able to say,
while in a news interface, the following:
| patch -d /usr/src/local/blurfl
and patch a file in the blurfl directory directly from the
article containing the patch.
If the patch file contains more than one patch, _p_a_t_c_h will
try to apply each of them as if they came from separate
patch files. This means, among other things, that it is
assumed that the name of the file to patch must be deter-
mined for each diff listing, and that the garbage before
each diff listing will be examined for interesting things
such as file names and revision level, as mentioned previ-
ously. You can give options (and another original file
name) for the second and subsequent patches by separating
the corresponding argument lists by a '+'. (The argument
list for a second or subsequent patch may not specify a
new patch file, however.)
_P_a_t_c_h recognizes the following options:
--bb ssuuffff,, ----ssuuffffiixx==ssuuffff
causes ssuuffff to be interpreted as the backup exten-
sion, to be used in place of ".orig" or "~".
--BB pprreeff,, ----pprreeffiixx==pprreeff
causes pprreeff to be interpreted as a prefix to t