2 |
- |
1 |
.\" patch man page
|
|
|
2 |
.de Id
|
|
|
3 |
.ds Dt \\$4
|
|
|
4 |
..
|
|
|
5 |
.Id $Id: patch.man,v 1.23 1997/07/16 12:26:36 eggert Exp $
|
|
|
6 |
.ds = \-\^\-
|
|
|
7 |
.de Sp
|
|
|
8 |
.if t .sp .3
|
|
|
9 |
.if n .sp
|
|
|
10 |
..
|
|
|
11 |
.TH PATCH 1 \*(Dt GNU
|
|
|
12 |
.ta 3n
|
|
|
13 |
.SH NAME
|
|
|
14 |
patch \- apply a diff file to an original
|
|
|
15 |
.SH SYNOPSIS
|
|
|
16 |
.B patch
|
|
|
17 |
.RI [ options ]
|
|
|
18 |
.RI [ originalfile
|
|
|
19 |
.RI [ patchfile ]]
|
|
|
20 |
.Sp
|
|
|
21 |
but usually just
|
|
|
22 |
.Sp
|
|
|
23 |
.BI "patch \-p" "num"
|
|
|
24 |
.BI < patchfile
|
|
|
25 |
.SH DESCRIPTION
|
|
|
26 |
.B patch
|
|
|
27 |
takes a patch file
|
|
|
28 |
.I patchfile
|
|
|
29 |
containing a difference listing produced by the
|
|
|
30 |
.B diff
|
|
|
31 |
program and applies those differences to one or more original files,
|
|
|
32 |
producing patched versions.
|
|
|
33 |
Normally the patched versions are put in place of the originals.
|
|
|
34 |
Backups can be made; see the
|
|
|
35 |
.B \-b
|
|
|
36 |
or
|
|
|
37 |
.B \*=backup
|
|
|
38 |
option.
|
|
|
39 |
The names of the files to be patched are usually taken from the patch file,
|
|
|
40 |
but if there's just one file to be patched it can specified on the
|
|
|
41 |
command line as
|
|
|
42 |
.IR originalfile .
|
|
|
43 |
.PP
|
|
|
44 |
Upon startup, patch attempts to determine the type of the diff listing,
|
|
|
45 |
unless overruled by a
|
|
|
46 |
\fB\-c\fP (\fB\*=context\fP),
|
|
|
47 |
\fB\-e\fP (\fB\*=ed\fP),
|
|
|
48 |
\fB\-n\fP (\fB\*=normal\fP),
|
|
|
49 |
or
|
|
|
50 |
\fB\-u\fP (\fB\*=unified\fP)
|
|
|
51 |
option.
|
|
|
52 |
Context diffs (old-style, new-style, and unified) and
|
|
|
53 |
normal diffs are applied by the
|
|
|
54 |
.B patch
|
|
|
55 |
program itself, while
|
|
|
56 |
.B ed
|
|
|
57 |
diffs are simply fed to the
|
|
|
58 |
.BR ed (1)
|
|
|
59 |
editor via a pipe.
|
|
|
60 |
.PP
|
|
|
61 |
.B patch
|
|
|
62 |
tries to skip any leading garbage, apply the diff,
|
|
|
63 |
and then skip any trailing garbage.
|
|
|
64 |
Thus you could feed an article or message containing a
|
|
|
65 |
diff listing to
|
|
|
66 |
.BR patch ,
|
|
|
67 |
and it should work.
|
|
|
68 |
If the entire diff is indented by a consistent amount,
|
|
|
69 |
or if a context diff is encapsulated one or more times by prepending
|
|
|
70 |
"\fB\- \fP" to lines starting with "\fB\-\fP" as specified by Internet RFC 934,
|
|
|
71 |
this is taken into account.
|
|
|
72 |
.PP
|
|
|
73 |
With context diffs, and to a lesser extent with normal diffs,
|
|
|
74 |
.B patch
|
|
|
75 |
can detect when the line numbers mentioned in the patch are incorrect,
|
|
|
76 |
and attempts to find the correct place to apply each hunk of the patch.
|
|
|
77 |
As a first guess, it takes the line number mentioned for the hunk, plus or
|
|
|
78 |
minus any offset used in applying the previous hunk.
|
|
|
79 |
If that is not the correct place,
|
|
|
80 |
.B patch
|
|
|
81 |
scans both forwards and backwards for a set of lines matching the context
|
|
|
82 |
given in the hunk.
|
|
|
83 |
First
|
|
|
84 |
.B patch
|
|
|
85 |
looks for a place where all lines of the context match.
|
|
|
86 |
If no such place is found, and it's a context diff, and the maximum fuzz factor
|
|
|
87 |
is set to 1 or more, then another scan takes place ignoring the first and last
|
|
|
88 |
line of context.
|
|
|
89 |
If that fails, and the maximum fuzz factor is set to 2 or more,
|
|
|
90 |
the first two and last two lines of context are ignored,
|
|
|
91 |
and another scan is made.
|
|
|
92 |
(The default maximum fuzz factor is 2.)
|
|
|
93 |
If
|
|
|
94 |
.B patch
|
|
|
95 |
cannot find a place to install that hunk of the patch, it puts the
|
|
|
96 |
hunk out to a reject file, which normally is the name of the output file
|
|
|
97 |
plus a
|
|
|
98 |
.B \&.rej
|
|
|
99 |
suffix, or
|
|
|
100 |
.B #
|
|
|
101 |
if
|
|
|
102 |
.B \&.rej
|
|
|
103 |
would generate a file name that is too long
|
|
|
104 |
(if even appending the single character
|
|
|
105 |
.B #
|
|
|
106 |
makes the file name too long, then
|
|
|
107 |
.B #
|
|
|
108 |
replaces the file name's last character).
|
|
|
109 |
(The rejected hunk comes out in ordinary context diff form regardless of
|
|
|
110 |
the input patch's form.
|
|
|
111 |
If the input was a normal diff, many of the contexts are simply null.)
|
|
|
112 |
The line numbers on the hunks in the reject file may be different than
|
|
|
113 |
in the patch file: they reflect the approximate location patch thinks the
|
|
|
114 |
failed hunks belong in the new file rather than the old one.
|
|
|
115 |
.PP
|
|
|
116 |
As each hunk is completed, you are told if the hunk
|
|
|
117 |
failed, and if so which line (in the new file)
|
|
|
118 |
.B patch
|
|
|
119 |
thought the hunk should go on.
|
|
|
120 |
If the hunk is installed at a different line
|
|
|
121 |
from the line number specified in the diff you
|
|
|
122 |
are told the offset.
|
|
|
123 |
A single large offset
|
|
|
124 |
.I may
|
|
|
125 |
indicate that a hunk was installed in the
|
|
|
126 |
wrong place.
|
|
|
127 |
You are also told if a fuzz factor was used to make the match, in which
|
|
|
128 |
case you should also be slightly suspicious.
|
|
|
129 |
If the
|
|
|
130 |
.B \*=verbose
|
|
|
131 |
option is given, you are also told about hunks that match exactly.
|
|
|
132 |
.PP
|
|
|
133 |
If no original file
|
|
|
134 |
.I origfile
|
|
|
135 |
is specified on the command line,
|
|
|
136 |
.B patch
|
|
|
137 |
tries to figure out from the leading garbage what the name of the file
|
|
|
138 |
to edit is, using the following rules.
|
|
|
139 |
.TP 3
|
|
|
140 |
.B " \(bu"
|
|
|
141 |
If the header is that of a context diff,
|
|
|
142 |
.B patch
|
|
|
143 |
takes the old and new file names in the header.
|
|
|
144 |
Any
|
|
|
145 |
.B /dev/null
|
|
|
146 |
names are ignored.
|
|
|
147 |
.TP
|
|
|
148 |
.B " \(bu"
|
|
|
149 |
If there is an
|
|
|
150 |
.B Index:\&
|
|
|
151 |
line in the leading garbage
|
|
|
152 |
and if either the old and new names are both absent or the
|
|
|
153 |
.B POSIXLY_CORRECT
|
|
|
154 |
environment variable is set,
|
|
|
155 |
.B patch
|
|
|
156 |
takes the name in the
|
|
|
157 |
.B Index:\&
|
|
|
158 |
line.
|
|
|
159 |
.TP
|
|
|
160 |
.B " \(bu"
|
|
|
161 |
For the purpose of the following rules,
|
|
|
162 |
the names are considered to be in the order (old, new, index),
|
|
|
163 |
regardless of the order that they appear in the header.
|
|
|
164 |
.TP
|
|
|
165 |
.B " \(bu"
|
|
|
166 |
If some of the named files exist,
|
|
|
167 |
.B patch
|
|
|
168 |
uses the first name if the
|
|
|
169 |
.B POSIXLY_CORRECT
|
|
|
170 |
environment variable is set, and the best name otherwise.
|
|
|
171 |
.TP
|
|
|
172 |
.B " \(bu"
|
|
|
173 |
If
|
|
|
174 |
.B patch
|
|
|
175 |
is not ignoring \s-1RCS\s0 and \s-1SCCS\s0 (see the
|
|
|
176 |
.BI "\-g\ " num
|
|
|
177 |
or
|
|
|
178 |
.BI \*=get= num
|
|
|
179 |
option), and no named files exist
|
|
|
180 |
but an \s-1RCS\s0 or \s-1SCCS\s0 master is found,
|
|
|
181 |
.B patch
|
|
|
182 |
uses the first named file with an \s-1RCS\s0 or \s-1SCCS\s0 master.
|
|
|
183 |
.TP
|
|
|
184 |
.B " \(bu"
|
|
|
185 |
If no named files exist, no \s-1RCS\s0 or \s-1SCCS\s0 master was found,
|
|
|
186 |
some names are given,
|
|
|
187 |
.B POSIXLY_CORRECT
|
|
|
188 |
is not set, and the patch appears to create a file,
|
|
|
189 |
.B patch
|
|
|
190 |
uses the best name requiring the creation of the fewest directories.
|
|
|
191 |
.TP
|
|
|
192 |
.B " \(bu"
|
|
|
193 |
If no file name results from the above heuristics, you are asked
|
|
|
194 |
for the name of the file to patch.
|
|
|
195 |
.LP
|
|
|
196 |
To determine the
|
|
|
197 |
.I best
|
|
|
198 |
of a nonempty list of file names,
|
|
|
199 |
.B patch
|
|
|
200 |
first takes all the names with the fewest path name components;
|
|
|
201 |
of those, it then takes all the names with the shortest basename;
|
|
|
202 |
of those, it then takes all the shortest names;
|
|
|
203 |
finally, it takes the first remaining name.
|
|
|
204 |
.PP
|
|
|
205 |
Additionally, if the leading garbage contains a
|
|
|
206 |
.B Prereq:\&
|
|
|
207 |
line,
|
|
|
208 |
.B patch
|
|
|
209 |
takes the first word from the prerequisites line (normally a version
|
|
|
210 |
number) and checks the original file to see if that word can be found.
|
|
|
211 |
If not,
|
|
|
212 |
.B patch
|
|
|
213 |
asks for confirmation before proceeding.
|
|
|
214 |
.PP
|
|
|
215 |
The upshot of all this is that you should be able to say, while in a news
|
|
|
216 |
interface, something like the following:
|
|
|
217 |
.Sp
|
|
|
218 |
\fB| patch \-d /usr/src/local/blurfl\fP
|
|
|
219 |
.Sp
|
|
|
220 |
and patch a file in the
|
|
|
221 |
.B blurfl
|
|
|
222 |
directory directly from the article containing
|
|
|
223 |
the patch.
|
|
|
224 |
.PP
|
|
|
225 |
If the patch file contains more than one patch,
|
|
|
226 |
.B patch
|
|
|
227 |
tries to apply each of them as if they came from separate patch files.
|
|
|
228 |
This means, among other things, that it is assumed that the name of the file
|
|
|
229 |
to patch must be determined for each diff listing,
|
|
|
230 |
and that the garbage before each diff listing
|
|
|
231 |
contains interesting things such as file names and revision level, as
|
|
|
232 |
mentioned previously.
|
|
|
233 |
.SH OPTIONS
|
|
|
234 |
.TP 3
|
|
|
235 |
\fB\-b\fP or \fB\*=backup\fP
|
|
|
236 |
Make backup files.
|
|
|
237 |
That is, when patching a file,
|
|
|
238 |
rename or copy the original instead of removing it.
|
|
|
239 |
When backing up a file that does not exist,
|
|
|
240 |
an empty, unreadable backup file is created
|
|
|
241 |
as a placeholder to represent the nonexistent file.
|
|
|
242 |
See the
|
|
|
243 |
.B \-V
|
|
|
244 |
or
|
|
|
245 |
.B \*=version\-control
|
|
|
246 |
option for details about how backup file names are determined.
|
|
|
247 |
.TP
|
|
|
248 |
.B \*=backup\-if\-mismatch
|
|
|
249 |
Back up a file if the patch does not match the file exactly
|
|
|
250 |
and if backups are not otherwise requested.
|
|
|
251 |
This is the default unless the
|
|
|
252 |
.B POSIXLY_CORRECT
|
|
|
253 |
environment variable is set.
|
|
|
254 |
.TP
|
|
|
255 |
.B \*=no\-backup\-if\-mismatch
|
|
|
256 |
Do not back up a file if the patch does not match the file exactly
|
|
|
257 |
and if backups are not otherwise requested.
|
|
|
258 |
This is the default if the
|
|
|
259 |
.B POSIXLY_CORRECT
|
|
|
260 |
environment variable is set.
|
|
|
261 |
.TP
|
|
|
262 |
\fB\-B\fP \fIpref\fP or \fB\*=prefix=\fP\fIpref\fP
|
|
|
263 |
Prefix
|
|
|
264 |
.I pref
|
|
|
265 |
to a file name when generating its simple backup file name.
|
|
|
266 |
For example, with
|
|
|
267 |
.B "\-B\ /junk/"
|
|
|
268 |
the simple backup file name for
|
|
|
269 |
.B src/patch/util.c
|
|
|
270 |
is
|
|
|
271 |
.BR /junk/src/patch/util.c .
|
|
|
272 |
.TP
|
|
|
273 |
\fB\*=binary\fP
|
|
|
274 |
Read and write all files in binary mode,
|
|
|
275 |
except for standard output and
|
|
|
276 |
.BR /dev/tty .
|
|
|
277 |
This option has no effect on \s-1POSIX\s0-compliant systems.
|
|
|
278 |
On systems like \s-1DOS\s0 where this option makes a difference,
|
|
|
279 |
the patch should be generated by
|
|
|
280 |
.BR "diff\ \-a\ \*=binary" .
|
|
|
281 |
.TP
|
|
|
282 |
\fB\-c\fP or \fB\*=context\fP
|
|
|
283 |
Interpret the patch file as a ordinary context diff.
|
|
|
284 |
.TP
|
|
|
285 |
\fB\-d\fP \fIdir\fP or \fB\*=directory=\fP\fIdir\fP
|
|
|
286 |
Change to the directory
|
|
|
287 |
.I dir
|
|
|
288 |
immediately, before doing
|
|
|
289 |
anything else.
|
|
|
290 |
.TP
|
|
|
291 |
\fB\-D\fP \fIdefine\fP or \fB\*=ifdef=\fP\fIdefine\fP
|
|
|
292 |
Use the
|
|
|
293 |
.BR #ifdef " .\|.\|. " #endif
|
|
|
294 |
construct to mark changes, with
|
|
|
295 |
.I define
|
|
|
296 |
as the differentiating symbol.
|
|
|
297 |
.TP
|
|
|
298 |
.B "\*=dry\-run"
|
|
|
299 |
Print the results of applying the patches without actually changing any files.
|
|
|
300 |
.TP
|
|
|
301 |
\fB\-e\fP or \fB\*=ed\fP
|
|
|
302 |
Interpret the patch file as an
|
|
|
303 |
.B ed
|
|
|
304 |
script.
|
|
|
305 |
.TP
|
|
|
306 |
\fB\-E\fP or \fB\*=remove\-empty\-files\fP
|
|
|
307 |
Remove output files that are empty after the patches have been applied.
|
|
|
308 |
Normally this option is unnecessary, since
|
|
|
309 |
.B patch
|
|
|
310 |
can examine the time stamps on the header to determine whether a file
|
|
|
311 |
should exist after patching.
|
|
|
312 |
However, if the input is not a context diff or if the
|
|
|
313 |
.B POSIXLY_CORRECT
|
|
|
314 |
environment variable is set,
|
|
|
315 |
.B patch
|
|
|
316 |
does not remove empty patched files unless this option is given.
|
|
|
317 |
When
|
|
|
318 |
.B patch
|
|
|
319 |
removes a file, it also attempts to remove any empty ancestor directories.
|
|
|
320 |
.TP
|
|
|
321 |
\fB\-f\fP or \fB\*=force\fP
|
|
|
322 |
Assume that the user knows exactly what he or she is doing, and do not
|
|
|
323 |
ask any questions. Skip patches whose headers
|
|
|
324 |
do not say which file is to be patched; patch files even though they have the
|
|
|
325 |
wrong version for the
|
|
|
326 |
.B Prereq:\&
|
|
|
327 |
line in the patch; and assume that
|
|
|
328 |
patches are not reversed even if they look like they are.
|
|
|
329 |
This option does not suppress commentary; use
|
|
|
330 |
.B \-s
|
|
|
331 |
for that.
|
|
|
332 |
.TP
|
|
|
333 |
\fB\-F\fP \fInum\fP or \fB\*=fuzz=\fP\fInum\fP
|
|
|
334 |
Set the maximum fuzz factor.
|
|
|
335 |
This option only applies to diffs that have context, and causes
|
|
|
336 |
.B patch
|
|
|
337 |
to ignore up to that many lines in looking for places to install a hunk.
|
|
|
338 |
Note that a larger fuzz factor increases the odds of a faulty patch.
|
|
|
339 |
The default fuzz factor is 2, and it may not be set to more than
|
|
|
340 |
the number of lines of context in the context diff, ordinarily 3.
|
|
|
341 |
.TP
|
|
|
342 |
\fB\-g\fP \fInum\fP or \fB\*=get=\fP\fInum\fP
|
|
|
343 |
This option controls
|
|
|
344 |
.BR patch 's
|
|
|
345 |
actions when a file is under \s-1RCS\s0 or \s-1SCCS\s0 control,
|
|
|
346 |
and does not exist or is read-only and matches the default version.
|
|
|
347 |
If
|
|
|
348 |
.I num
|
|
|
349 |
is positive,
|
|
|
350 |
.B patch
|
|
|
351 |
gets (or checks out) the file from the revision control system; if zero,
|
|
|
352 |
.B patch
|
|
|
353 |
ignores \s-1RCS\s0 and \s-1SCCS\s0 and does not get the file; and if negative,
|
|
|
354 |
.B patch
|
|
|
355 |
asks the user whether to get the file.
|
|
|
356 |
The default value of this option is given by the value of the
|
|
|
357 |
.B PATCH_GET
|
|
|
358 |
environment variable if it is set; if not, the default value is zero if
|
|
|
359 |
.B POSIXLY_CORRECT
|
|
|
360 |
is set, negative otherwise.
|
|
|
361 |
.TP
|
|
|
362 |
.B "\*=help"
|
|
|
363 |
Print a summary of options and exit.
|
|
|
364 |
.TP
|
|
|
365 |
\fB\-i\fP \fIpatchfile\fP or \fB\*=input=\fP\fIpatchfile\fP
|
|
|
366 |
Read the patch from
|
|
|
367 |
.IR patchfile .
|
|
|
368 |
If
|
|
|
369 |
.I patchfile
|
|
|
370 |
is
|
|
|
371 |
.BR \- ,
|
|
|
372 |
read from standard input, the default.
|
|
|
373 |
.TP
|
|
|
374 |
\fB\-l\fP or \fB\*=ignore\-whitespace\fP
|
|
|
375 |
Match patterns loosely, in case tabs or spaces
|
|
|
376 |
have been munged in your files.
|
|
|
377 |
Any sequence of one or more blanks in the patch file matches any sequence
|
|
|
378 |
in the original file, and sequences of blanks at the ends of lines are ignored.
|
|
|
379 |
Normal characters must still match exactly.
|
|
|
380 |
Each line of the context must still match a line in the original file.
|
|
|
381 |
.TP
|
|
|
382 |
\fB\-n\fP or \fB\*=normal\fP
|
|
|
383 |
Interpret the patch file as a normal diff.
|
|
|
384 |
.TP
|
|
|
385 |
\fB\-N\fP or \fB\*=forward\fP
|
|
|
386 |
Ignore patches that seem to be reversed or already applied.
|
|
|
387 |
See also
|
|
|
388 |
.BR \-R .
|
|
|
389 |
.TP
|
|
|
390 |
\fB\-o\fP \fIoutfile\fP or \fB\*=output=\fP\fIoutfile\fP
|
|
|
391 |
Send output to
|
|
|
392 |
.I outfile
|
|
|
393 |
instead of patching files in place.
|
|
|
394 |
.TP
|
|
|
395 |
\fB\-p\fP\fInum\fP or \fB\*=strip\fP\fB=\fP\fInum\fP
|
|
|
396 |
Strip the smallest prefix containing
|
|
|
397 |
.I num
|
|
|
398 |
leading slashes from each file name found in the patch file.
|
|
|
399 |
A sequence of one or more adjacent slashes is counted as a single slash.
|
|
|
400 |
This controls how file names found in the patch file are treated, in case
|
|
|
401 |
you keep your files in a different directory than the person who sent
|
|
|
402 |
out the patch.
|
|
|
403 |
For example, supposing the file name in the patch file was
|
|
|
404 |
.Sp
|
|
|
405 |
\fB/u/howard/src/blurfl/blurfl.c\fP
|
|
|
406 |
.Sp
|
|
|
407 |
setting
|
|
|
408 |
.B \-p0
|
|
|
409 |
gives the entire file name unmodified,
|
|
|
410 |
.B \-p1
|
|
|
411 |
gives
|
|
|
412 |
.Sp
|
|
|
413 |
\fBu/howard/src/blurfl/blurfl.c\fP
|
|
|
414 |
.Sp
|
|
|
415 |
without the leading slash,
|
|
|
416 |
.B \-p4
|
|
|
417 |
gives
|
|
|
418 |
.Sp
|
|
|
419 |
\fBblurfl/blurfl.c\fP
|
|
|
420 |
.Sp
|
|
|
421 |
and not specifying
|
|
|
422 |
.B \-p
|
|
|
423 |
at all just gives you \fBblurfl.c\fP.
|
|
|
424 |
Whatever you end up with is looked for either in the current directory,
|
|
|
425 |
or the directory specified by the
|
|
|
426 |
.B \-d
|
|
|
427 |
option.
|
|
|
428 |
.TP
|
|
|
429 |
\fB\-r\fP \fIrejectfile\fP or \fB\*=reject\-file=\fP\fIrejectfile\fP
|
|
|
430 |
Put rejects into
|
|
|
431 |
.I rejectfile
|
|
|
432 |
instead of the default
|
|
|
433 |
.B \&.rej
|
|
|
434 |
file.
|
|
|
435 |
.TP
|
|
|
436 |
\fB\-R\fP or \fB\*=reverse\fP
|
|
|
437 |
Assume that this patch was created with the old and new files swapped.
|
|
|
438 |
(Yes, I'm afraid that does happen occasionally, human nature being what it
|
|
|
439 |
is.)
|
|
|
440 |
.B patch
|
|
|
441 |
attempts to swap each hunk around before applying it.
|
|
|
442 |
Rejects come out in the swapped format.
|
|
|
443 |
The
|
|
|
444 |
.B \-R
|
|
|
445 |
option does not work with
|
|
|
446 |
.B ed
|
|
|
447 |
diff scripts because there is too little
|
|
|
448 |
information to reconstruct the reverse operation.
|
|
|
449 |
.Sp
|
|
|
450 |
If the first hunk of a patch fails,
|
|
|
451 |
.B patch
|
|
|
452 |
reverses the hunk to see if it can be applied that way.
|
|
|
453 |
If it can, you are asked if you want to have the
|
|
|
454 |
.B \-R
|
|
|
455 |
option set.
|
|
|
456 |
If it can't, the patch continues to be applied normally.
|
|
|
457 |
(Note: this method cannot detect a reversed patch if it is a normal diff
|
|
|
458 |
and if the first command is an append (i.e. it should have been a delete)
|
|
|
459 |
since appends always succeed, due to the fact that a null context matches
|
|
|
460 |
anywhere.
|
|
|
461 |
Luckily, most patches add or change lines rather than delete them, so most
|
|
|
462 |
reversed normal diffs begin with a delete, which fails, triggering
|
|
|
463 |
the heuristic.)
|
|
|
464 |
.TP
|
|
|
465 |
\fB\-s\fP or \fB\*=silent\fP or \fB\*=quiet\fP
|
|
|
466 |
Work silently, unless an error occurs.
|
|
|
467 |
.TP
|
|
|
468 |
\fB\-t\fP or \fB\*=batch\fP
|
|
|
469 |
Suppress questions like
|
|
|
470 |
.BR \-f ,
|
|
|
471 |
but make some different assumptions:
|
|
|
472 |
skip patches whose headers do not contain file names (the same as \fB\-f\fP);
|
|
|
473 |
skip patches for which the file has the wrong version for the
|
|
|
474 |
.B Prereq:\&
|
|
|
475 |
line
|
|
|
476 |
in the patch; and assume that patches are reversed if they look like
|
|
|
477 |
they are.
|
|
|
478 |
.TP
|
|
|
479 |
\fB\-T\fP or \fB\*=set\-time\fP
|
|
|
480 |
Set the modification and access times of patched files from time stamps
|
|
|
481 |
given in context diff headers, assuming that the context diff headers
|
|
|
482 |
use local time. This option is not recommended, because patches using
|
|
|
483 |
local time cannot easily be used by people in other time zones, and
|
|
|
484 |
because local time stamps are ambiguous when local clocks move backwards
|
|
|
485 |
during daylight-saving time adjustments. Instead of using this option,
|
|
|
486 |
generate patches with \s-1UTC\s0 and use the
|
|
|
487 |
.B \-Z
|
|
|
488 |
or
|
|
|
489 |
.B \*=set\-utc
|
|
|
490 |
option instead.
|
|
|
491 |
.TP
|
|
|
492 |
\fB\-u\fP or \fB\*=unified\fP
|
|
|
493 |
Interpret the patch file as a unified context diff.
|
|
|
494 |
.TP
|
|
|
495 |
\fB\-v\fP or \fB\*=version\fP
|
|
|
496 |
Print out
|
|
|
497 |
.BR patch 's
|
|
|
498 |
revision header and patch level, and exit.
|
|
|
499 |
.TP
|
|
|
500 |
\fB\-V\fP \fImethod\fP or \fB\*=version\-control=\fP\fImethod\fP
|
|
|
501 |
Use
|
|
|
502 |
.I method
|
|
|
503 |
to determine
|
|
|
504 |
backup file names. The method can also be given by the
|
|
|
505 |
.B PATCH_VERSION_CONTROL
|
|
|
506 |
(or, if that's not set, the
|
|
|
507 |
.BR VERSION_CONTROL )
|
|
|
508 |
environment variable, which is overridden by this option.
|
|
|
509 |
The method does not affect whether backup files are made;
|
|
|
510 |
it affects only the names of any backup files that are made.
|
|
|
511 |
.Sp
|
|
|
512 |
The value of
|
|
|
513 |
.I method
|
|
|
514 |
is like the \s-1GNU\s0
|
|
|
515 |
Emacs `version-control' variable;
|
|
|
516 |
.B patch
|
|
|
517 |
also recognizes synonyms that
|
|
|
518 |
are more descriptive. The valid values for
|
|
|
519 |
.I method
|
|
|
520 |
are (unique abbreviations are
|
|
|
521 |
accepted):
|
|
|
522 |
.RS
|
|
|
523 |
.TP 3
|
|
|
524 |
\fBexisting\fP or \fBnil\fP
|
|
|
525 |
Make numbered backups of files that already have them,
|
|
|
526 |
otherwise simple backups.
|
|
|
527 |
This is the default.
|
|
|
528 |
.TP
|
|
|
529 |
\fBnumbered\fP or \fBt\fP
|
|
|
530 |
Make numbered backups. The numbered backup file name for
|
|
|
531 |
.I F
|
|
|
532 |
is
|
|
|
533 |
.IB F .~ N ~
|
|
|
534 |
where
|
|
|
535 |
.I N
|
|
|
536 |
is the version number.
|
|
|
537 |
.TP
|
|
|
538 |
\fBsimple\fP or \fBnever\fP
|
|
|
539 |
Make simple backups.
|
|
|
540 |
The
|
|
|
541 |
.B \-B
|
|
|
542 |
or
|
|
|
543 |
.BR \*=prefix ,
|
|
|
544 |
.B \-Y
|
|
|
545 |
or
|
|
|
546 |
.BR \*=basename\-prefix ,
|
|
|
547 |
and
|
|
|
548 |
.B \-z
|
|
|
549 |
or
|
|
|
550 |
.BR \*=suffix
|
|
|
551 |
options specify the simple backup file name.
|
|
|
552 |
If none of these options are given, then a simple backup suffix is used;
|
|
|
553 |
it is the value of the
|
|
|
554 |
.B SIMPLE_BACKUP_SUFFIX
|
|
|
555 |
environment variable if set, and is
|
|
|
556 |
.B \&.orig
|
|
|
557 |
otherwise.
|
|
|
558 |
.PP
|
|
|
559 |
With numbered or simple backups,
|
|
|
560 |
if the backup file name is too long, the backup suffix
|
|
|
561 |
.B ~
|
|
|
562 |
is used instead; if even appending
|
|
|
563 |
.B ~
|
|
|
564 |
would make the name too long, then
|
|
|
565 |
.B ~
|
|
|
566 |
replaces the last character of the file name.
|
|
|
567 |
.RE
|
|
|
568 |
.TP
|
|
|
569 |
\fB\*=verbose\fP
|
|
|
570 |
Output extra information about the work being done.
|
|
|
571 |
.TP
|
|
|
572 |
\fB\-x\fP \fInum\fP or \fB\*=debug=\fP\fInum\fP
|
|
|
573 |
Set internal debugging flags of interest only to
|
|
|
574 |
.B patch
|
|
|
575 |
patchers.
|
|
|
576 |
.TP
|
|
|
577 |
\fB\-Y\fP \fIpref\fP or \fB\*=basename\-prefix=\fP\fIpref\fP
|
|
|
578 |
Prefix
|
|
|
579 |
.I pref
|
|
|
580 |
to the basename of a file name when generating its simple backup file name.
|
|
|
581 |
For example, with
|
|
|
582 |
.B "\-Y\ .del/"
|
|
|
583 |
the simple backup file name for
|
|
|
584 |
.B src/patch/util.c
|
|
|
585 |
is
|
|
|
586 |
.BR src/patch/.del/util.c .
|
|
|
587 |
.TP
|
|
|
588 |
\fB\-z\fP \fIsuffix\fP or \fB\*=suffix=\fP\fIsuffix\fP
|
|
|
589 |
Use
|
|
|
590 |
.I suffix
|
|
|
591 |
as the simple backup suffix.
|
|
|
592 |
For example, with
|
|
|
593 |
.B "\-z\ -"
|
|
|
594 |
the simple backup file name for
|
|
|
595 |
.B src/patch/util.c
|
|
|
596 |
is
|
|
|
597 |
.BR src/patch/util.c- .
|
|
|
598 |
The backup suffix may also be specified by the
|
|
|
599 |
.B SIMPLE_BACKUP_SUFFIX
|
|
|
600 |
environment variable, which is overridden by this option.
|
|
|
601 |
.TP
|
|
|
602 |
\fB\-Z\fP or \fB\*=set\-utc\fP
|
|
|
603 |
Set the modification and access times of patched files from time stamps
|
|
|
604 |
given in context diff headers, assuming that the context diff headers
|
|
|
605 |
use Coordinated Universal Time (\s-1UTC\s0, often known as \s-1GMT\s0).
|
|
|
606 |
Also see the
|
|
|
607 |
.B \-T
|
|
|
608 |
or
|
|
|
609 |
.B \*=set\-time
|
|
|
610 |
option.
|
|
|
611 |
.Sp
|
|
|
612 |
The
|
|
|
613 |
.B \-Z
|
|
|
614 |
or
|
|
|
615 |
.B \*=set\-utc
|
|
|
616 |
and
|
|
|
617 |
.B \-T
|
|
|
618 |
or
|
|
|
619 |
.B \*=set\-time
|
|
|
620 |
options normally refrain from setting a file's time if the file's original time
|
|
|
621 |
does not match the time given in the patch header, or if its
|
|
|
622 |
contents do not match the patch exactly. However, if the
|
|
|
623 |
.B \-f
|
|
|
624 |
or
|
|
|
625 |
.B \*=force
|
|
|
626 |
option is given, the file time is set regardless.
|
|
|
627 |
.Sp
|
|
|
628 |
Due to the limitations of
|
|
|
629 |
.B diff
|
|
|
630 |
output format, these options cannot update the times of files whose
|
|
|
631 |
contents have not changed. Also, if you use these options, you should remove
|
|
|
632 |
(e.g. with
|
|
|
633 |
.BR "make\ clean" )
|
|
|
634 |
all files that depend on the patched files, so that later invocations of
|
|
|
635 |
.B make
|
|
|
636 |
do not get confused by the patched files' times.
|
|
|
637 |
.SH ENVIRONMENT
|
|
|
638 |
.TP 3
|
|
|
639 |
\fBPATCH_GET\fP
|
|
|
640 |
This specifies whether
|
|
|
641 |
.B patch
|
|
|
642 |
gets missing or read-only files from \s-1RCS\s0 or \s-1SCCS\s0
|
|
|
643 |
by default; see the
|
|
|
644 |
.B \-g
|
|
|
645 |
or
|
|
|
646 |
.B \*=get
|
|
|
647 |
option.
|
|
|
648 |
.TP
|
|
|
649 |
.B POSIXLY_CORRECT
|
|
|
650 |
If set,
|
|
|
651 |
.B patch
|
|
|
652 |
conforms more strictly to the \s-1POSIX\s0 standard:
|
|
|
653 |
it takes the first existing file from the list (old, new, index)
|
|
|
654 |
when intuiting file names from diff headers,
|
|
|
655 |
it does not remove files that are empty after patching,
|
|
|
656 |
it does not ask whether to get files from \s-1RCS\s0 or \s-1SCCS\s0,
|
|
|
657 |
it requires that all options precede the files in the command line,
|
|
|
658 |
and it does not backup files when there is a mismatch.
|
|
|
659 |
.TP
|
|
|
660 |
.B SIMPLE_BACKUP_SUFFIX
|
|
|
661 |
Extension to use for simple backup file names instead of
|
|
|
662 |
.BR \&.orig .
|
|
|
663 |
.TP
|
|
|
664 |
\fBTMPDIR\fP, \fBTMP\fP, \fBTEMP\fP
|
|
|
665 |
Directory to put temporary files in;
|
|
|
666 |
.B patch
|
|
|
667 |
uses the first environment variable in this list that is set.
|
|
|
668 |
If none are set, the default is system-dependent;
|
|
|
669 |
it is normally
|
|
|
670 |
.B /tmp
|
|
|
671 |
on Unix hosts.
|
|
|
672 |
.TP
|
|
|
673 |
\fBVERSION_CONTROL\fP or \fBPATCH_VERSION_CONTROL\fP
|
|
|
674 |
Selects version control style; see the
|
|
|
675 |
.B \-v
|
|
|
676 |
or
|
|
|
677 |
.B \*=version\-control
|
|
|
678 |
option.
|
|
|
679 |
.SH FILES
|
|
|
680 |
.TP 3
|
|
|
681 |
.IB $TMPDIR "/p\(**"
|
|
|
682 |
temporary files
|
|
|
683 |
.TP
|
|
|
684 |
.B /dev/tty
|
|
|
685 |
controlling terminal; used to get answers to questions asked of the user
|
|
|
686 |
.SH "SEE ALSO"
|
|
|
687 |
.BR diff (1),
|
|
|
688 |
.BR ed (1)
|
|
|
689 |
.Sp
|
|
|
690 |
Marshall T. Rose and Einar A. Stefferud,
|
|
|
691 |
Proposed Standard for Message Encapsulation,
|
|
|
692 |
Internet RFC 934 <URL:ftp://ftp.isi.edu/in-notes/rfc934.txt> (1985-01).
|
|
|
693 |
.SH "NOTES FOR PATCH SENDERS"
|
|
|
694 |
There are several things you should bear in mind if you are going to
|
|
|
695 |
be sending out patches.
|
|
|
696 |
.PP
|
|
|
697 |
Create your patch systematically.
|
|
|
698 |
A good method is the command
|
|
|
699 |
.BI "diff\ \-Naur\ " "old\ new"
|
|
|
700 |
where
|
|
|
701 |
.I old
|
|
|
702 |
and
|
|
|
703 |
.I new
|
|
|
704 |
identify the old and new directories.
|
|
|
705 |
The names
|
|
|
706 |
.I old
|
|
|
707 |
and
|
|
|
708 |
.I new
|
|
|
709 |
should not contain any slashes.
|
|
|
710 |
The
|
|
|
711 |
.B diff
|
|
|
712 |
command's headers should have dates
|
|
|
713 |
and times in Universal Time using traditional Unix format,
|
|
|
714 |
so that patch recipients can use the
|
|
|
715 |
.B \-Z
|
|
|
716 |
or
|
|
|
717 |
.B \*=set\-utc
|
|
|
718 |
option.
|
|
|
719 |
Here is an example command, using Bourne shell syntax:
|
|
|
720 |
.Sp
|
|
|
721 |
\fBLC_ALL=C TZ=UTC0 diff \-Naur gcc\-2.7 gcc\-2.8\fP
|
|
|
722 |
.PP
|
|
|
723 |
Tell your recipients how to apply the patch
|
|
|
724 |
by telling them which directory to
|
|
|
725 |
.B cd
|
|
|
726 |
to, and which
|
|
|
727 |
.B patch
|
|
|
728 |
options to use. The option string
|
|
|
729 |
.B "\-Np1"
|
|
|
730 |
is recommended.
|
|
|
731 |
Test your procedure by pretending to be a recipient and applying
|
|
|
732 |
your patch to a copy of the original files.
|
|
|
733 |
.PP
|
|
|
734 |
You can save people a lot of grief by keeping a
|
|
|
735 |
.B patchlevel.h
|
|
|
736 |
file which is patched to increment the patch level
|
|
|
737 |
as the first diff in the patch file you send out.
|
|
|
738 |
If you put a
|
|
|
739 |
.B Prereq:\&
|
|
|
740 |
line in with the patch, it won't let them apply
|
|
|
741 |
patches out of order without some warning.
|
|
|
742 |
.PP
|
|
|
743 |
You can create a file by sending out a diff that compares
|
|
|
744 |
.B /dev/null
|
|
|
745 |
or an empty file dated the Epoch (1970-01-01 00:00:00 \s-1UTC\s0)
|
|
|
746 |
to the file you want to create.
|
|
|
747 |
This only works if the file you want to create doesn't exist already in
|
|
|
748 |
the target directory.
|
|
|
749 |
Conversely, you can remove a file by sending out a context diff that compares
|
|
|
750 |
the file to be deleted with an empty file dated the Epoch.
|
|
|
751 |
The file will be removed unless the
|
|
|
752 |
.B POSIXLY_CORRECT
|
|
|
753 |
environment variable is set and the
|
|
|
754 |
.B \-E
|
|
|
755 |
or
|
|
|
756 |
.B \*=remove\-empty\-files
|
|
|
757 |
option is not given.
|
|
|
758 |
An easy way to generate patches that create and remove files
|
|
|
759 |
is to use \s-1GNU\s0
|
|
|
760 |
.BR diff 's
|
|
|
761 |
.B \-N
|
|
|
762 |
or
|
|
|
763 |
.B \*=new\-file
|
|
|
764 |
option.
|
|
|
765 |
.PP
|
|
|
766 |
If the recipient is supposed to use the
|
|
|
767 |
.BI \-p N
|
|
|
768 |
option, do not send output that looks like this:
|
|
|
769 |
.Sp
|
|
|
770 |
.ft B
|
|
|
771 |
.ne 3
|
|
|
772 |
diff \-Naur v2.0.29/prog/README prog/README
|
|
|
773 |
.br
|
|
|
774 |
\-\^\-\^\- v2.0.29/prog/README Mon Mar 10 15:13:12 1997
|
|
|
775 |
.br
|
|
|
776 |
+\^+\^+ prog/README Mon Mar 17 14:58:22 1997
|
|
|
777 |
.ft
|
|
|
778 |
.Sp
|
|
|
779 |
because the two file names have different numbers of slashes,
|
|
|
780 |
and different versions of
|
|
|
781 |
.B patch
|
|
|
782 |
interpret the file names differently.
|
|
|
783 |
To avoid confusion, send output that looks like this instead:
|
|
|
784 |
.Sp
|
|
|
785 |
.ft B
|
|
|
786 |
.ne 3
|
|
|
787 |
diff \-Naur v2.0.29/prog/README v2.0.30/prog/README
|
|
|
788 |
.br
|
|
|
789 |
\-\^\-\^\- v2.0.29/prog/README Mon Mar 10 15:13:12 1997
|
|
|
790 |
.br
|
|
|
791 |
+\^+\^+ v2.0.30/prog/README Mon Mar 17 14:58:22 1997
|
|
|
792 |
.ft
|
|
|
793 |
.Sp
|
|
|
794 |
.PP
|
|
|
795 |
Avoid sending patches that compare backup file names like
|
|
|
796 |
.BR README.orig ,
|
|
|
797 |
since this might confuse
|
|
|
798 |
.B patch
|
|
|
799 |
into patching a backup file instead of the real file.
|
|
|
800 |
Instead, send patches that compare the same base file names
|
|
|
801 |
in different directories, e.g.\&
|
|
|
802 |
.B old/README
|
|
|
803 |
and
|
|
|
804 |
.BR new/README .
|
|
|
805 |
.PP
|
|
|
806 |
Take care not to send out reversed patches, since it makes people wonder
|
|
|
807 |
whether they already applied the patch.
|
|
|
808 |
.PP
|
|
|
809 |
Try not to have your patch modify derived files
|
|
|
810 |
(e.g. the file
|
|
|
811 |
.B configure
|
|
|
812 |
where there is a line
|
|
|
813 |
.B "configure: configure.in"
|
|
|
814 |
in your makefile), since the recipient should be
|
|
|
815 |
able to regenerate the derived files anyway.
|
|
|
816 |
If you must send diffs of derived files,
|
|
|
817 |
generate the diffs using \s-1UTC\s0,
|
|
|
818 |
have the recipients apply the patch with the
|
|
|
819 |
.B \-Z
|
|
|
820 |
or
|
|
|
821 |
.B \*=set\-utc
|
|
|
822 |
option, and have them remove any unpatched files that depend on patched files
|
|
|
823 |
(e.g. with
|
|
|
824 |
.BR "make\ clean" ).
|
|
|
825 |
.PP
|
|
|
826 |
While you may be able to get away with putting 582 diff listings into
|
|
|
827 |
one file, it may be wiser to group related patches into separate files in
|
|
|
828 |
case something goes haywire.
|
|
|
829 |
.SH DIAGNOSTICS
|
|
|
830 |
Diagnostics generally indicate that
|
|
|
831 |
.B patch
|
|
|
832 |
couldn't parse your patch file.
|
|
|
833 |
.PP
|
|
|
834 |
If the
|
|
|
835 |
.B \*=verbose
|
|
|
836 |
option is given, the message
|
|
|
837 |
.B Hmm.\|.\|.\&
|
|
|
838 |
indicates that there is unprocessed text in
|
|
|
839 |
the patch file and that
|
|
|
840 |
.B patch
|
|
|
841 |
is attempting to intuit whether there is a patch in that text and, if so,
|
|
|
842 |
what kind of patch it is.
|
|
|
843 |
.PP
|
|
|
844 |
.BR patch 's
|
|
|
845 |
exit status is
|
|
|
846 |
|
|
|
847 |
1 if some hunks cannot be applied,
|
|
|
848 |
and 2 if there is more serious trouble.
|
|
|
849 |
When applying a set of patches in a loop it behooves you to check this
|
|
|
850 |
exit status so you don't apply a later patch to a partially patched file.
|
|
|
851 |
.SH CAVEATS
|
|
|
852 |
Context diffs cannot reliably represent the creation or deletion of
|
|
|
853 |
empty files, empty directories, or special files such as symbolic links.
|
|
|
854 |
Nor can they represent changes to file metadata like ownership, permissions,
|
|
|
855 |
or whether one file is a hard link to another.
|
|
|
856 |
If changes like these are also required, separate instructions
|
|
|
857 |
(e.g. a shell script) to accomplish them should accompany the patch.
|
|
|
858 |
.PP
|
|
|
859 |
.B patch
|
|
|
860 |
cannot tell if the line numbers are off in an
|
|
|
861 |
.B ed
|
|
|
862 |
script, and can detect
|
|
|
863 |
bad line numbers in a normal diff only when it finds a change or deletion.
|
|
|
864 |
A context diff using fuzz factor 3 may have the same problem.
|
|
|
865 |
Until a suitable interactive interface is added, you should probably do
|
|
|
866 |
a context diff in these cases to see if the changes made sense.
|
|
|
867 |
Of course, compiling without errors is a pretty good indication that the patch
|
|
|
868 |
worked, but not always.
|
|
|
869 |
.PP
|
|
|
870 |
.B patch
|
|
|
871 |
usually produces the correct results, even when it has to do a lot of
|
|
|
872 |
guessing.
|
|
|
873 |
However, the results are guaranteed to be correct only when the patch is
|
|
|
874 |
applied to exactly the same version of the file that the patch was
|
|
|
875 |
generated from.
|
|
|
876 |
.SH "COMPATIBILITY ISSUES"
|
|
|
877 |
The \s-1POSIX\s0 standard specifies behavior that differs from
|
|
|
878 |
.BR patch 's
|
|
|
879 |
traditional behavior.
|
|
|
880 |
You should be aware of these differences if you must interoperate with
|
|
|
881 |
.B patch
|
|
|
882 |
versions 2.1 and earlier, which are not \s-1POSIX\s0-compliant.
|
|
|
883 |
.TP 3
|
|
|
884 |
.B " \(bu"
|
|
|
885 |
In traditional
|
|
|
886 |
.BR patch ,
|
|
|
887 |
the
|
|
|
888 |
.B \-p
|
|
|
889 |
option's operand was optional, and a bare
|
|
|
890 |
.B \-p
|
|
|
891 |
was equivalent to
|
|
|
892 |
.BR \-p0.
|
|
|
893 |
The
|
|
|
894 |
.B \-p
|
|
|
895 |
option now requires an operand, and
|
|
|
896 |
.B "\-p\ 0"
|
|
|
897 |
is now equivalent to
|
|
|
898 |
.BR \-p0 .
|
|
|
899 |
For maximum compatibility, use options like
|
|
|
900 |
.B \-p0
|
|
|
901 |
and
|
|
|
902 |
.BR \-p1 .
|
|
|
903 |
.Sp
|
|
|
904 |
Also,
|
|
|
905 |
traditional
|
|
|
906 |
.B patch
|
|
|
907 |
simply counted slashes when stripping path prefixes;
|
|
|
908 |
.B patch
|
|
|
909 |
now counts pathname components.
|
|
|
910 |
That is, a sequence of one or more adjacent slashes
|
|
|
911 |
now counts as a single slash.
|
|
|
912 |
For maximum portability, avoid sending patches containing
|
|
|
913 |
.B //
|
|
|
914 |
in file names.
|
|
|
915 |
.TP
|
|
|
916 |
.B " \(bu"
|
|
|
917 |
In traditional
|
|
|
918 |
.BR patch ,
|
|
|
919 |
backups were enabled by default.
|
|
|
920 |
This behavior is now enabled with the
|
|
|
921 |
.B \-b
|
|
|
922 |
or
|
|
|
923 |
.B \*=backup
|
|
|
924 |
option.
|
|
|
925 |
.Sp
|
|
|
926 |
Conversely, in \s-1POSIX\s0
|
|
|
927 |
.BR patch ,
|
|
|
928 |
backups are never made, even when there is a mismatch.
|
|
|
929 |
In \s-1GNU\s0
|
|
|
930 |
.BR patch ,
|
|
|
931 |
this behavior is enabled with the
|
|
|
932 |
.B \*=no\-backup\-if\-mismatch
|
|
|
933 |
option or by setting the
|
|
|
934 |
.B POSIXLY_CORRECT
|
|
|
935 |
environment variable.
|
|
|
936 |
.Sp
|
|
|
937 |
The
|
|
|
938 |
.BI \-b "\ suffix"
|
|
|
939 |
option
|
|
|
940 |
of traditional
|
|
|
941 |
.B patch
|
|
|
942 |
is equivalent to the
|
|
|
943 |
.BI "\-b\ \-z" "\ suffix"
|
|
|
944 |
options of \s-1GNU\s0
|
|
|
945 |
.BR patch .
|
|
|
946 |
.TP
|
|
|
947 |
.B " \(bu"
|
|
|
948 |
Traditional
|
|
|
949 |
.B patch
|
|
|
950 |
used a complicated (and incompletely documented) method
|
|
|
951 |
to intuit the name of the file to be patched from the patch header.
|
|
|
952 |
This method was not \s-1POSIX\s0-compliant, and had a few gotchas.
|
|
|
953 |
Now
|
|
|
954 |
.B patch
|
|
|
955 |
uses a different, equally complicated (but better documented) method
|
|
|
956 |
that is optionally \s-1POSIX\s0-compliant; we hope it has
|
|
|
957 |
fewer gotchas. The two methods are compatible if the
|
|
|
958 |
file names in the context diff header and the
|
|
|
959 |
.B Index:\&
|
|
|
960 |
line are all identical after prefix-stripping.
|
|
|
961 |
Your patch is normally compatible if each header's file names
|
|
|
962 |
all contain the same number of slashes.
|
|
|
963 |
.TP
|
|
|
964 |
.B " \(bu"
|
|
|
965 |
When traditional
|
|
|
966 |
.B patch
|
|
|
967 |
asked the user a question, it sent the question to standard error
|
|
|
968 |
and looked for an answer from
|
|
|
969 |
the first file in the following list that was a terminal:
|
|
|
970 |
standard error, standard output,
|
|
|
971 |
.BR /dev/tty ,
|
|
|
972 |
and standard input.
|
|
|
973 |
Now
|
|
|
974 |
.B patch
|
|
|
975 |
sends questions to standard output and gets answers from
|
|
|
976 |
.BR /dev/tty .
|
|
|
977 |
Defaults for some answers have been changed so that
|
|
|
978 |
.B patch
|
|
|
979 |
never goes into an infinite loop when using default answers.
|
|
|
980 |
.TP
|
|
|
981 |
.B " \(bu"
|
|
|
982 |
Traditional
|
|
|
983 |
.B patch
|
|
|
984 |
exited with a status value that counted the number of bad hunks,
|
|
|
985 |
or with status 1 if there was real trouble.
|
|
|
986 |
Now
|
|
|
987 |
.B patch
|
|
|
988 |
exits with status 1 if some hunks failed,
|
|
|
989 |
or with 2 if there was real trouble.
|
|
|
990 |
.TP
|
|
|
991 |
.B " \(bu"
|
|
|
992 |
Limit yourself to the following options when sending instructions
|
|
|
993 |
meant to be executed by anyone running \s-1GNU\s0
|
|
|
994 |
.BR patch ,
|
|
|
995 |
traditional
|
|
|
996 |
.BR patch ,
|
|
|
997 |
or a \s-1POSIX\s0-compliant
|
|
|
998 |
.BR patch .
|
|
|
999 |
Spaces are significant in the following list, and operands are required.
|
|
|
1000 |
.Sp
|
|
|
1001 |
.nf
|
|
|
1002 |
.in +3
|
|
|
1003 |
.ne 11
|
|
|
1004 |
.B \-c
|
|
|
1005 |
.BI \-d " dir"
|
|
|
1006 |
.BI \-D " define"
|
|
|
1007 |
.B \-e
|
|
|
1008 |
.B \-l
|
|
|
1009 |
.B \-n
|
|
|
1010 |
.B \-N
|
|
|
1011 |
.BI \-o " outfile"
|
|
|
1012 |
.BI \-p num
|
|
|
1013 |
.B \-R
|
|
|
1014 |
.BI \-r " rejectfile"
|
|
|
1015 |
.in
|
|
|
1016 |
.fi
|
|
|
1017 |
.SH BUGS
|
|
|
1018 |
.B patch
|
|
|
1019 |
could be smarter about partial matches, excessively deviant offsets and
|
|
|
1020 |
swapped code, but that would take an extra pass.
|
|
|
1021 |
.PP
|
|
|
1022 |
If code has been duplicated (for instance with
|
|
|
1023 |
\fB#ifdef OLDCODE\fP .\|.\|. \fB#else .\|.\|. #endif\fP),
|
|
|
1024 |
.B patch
|
|
|
1025 |
is incapable of patching both versions, and, if it works at all, will likely
|
|
|
1026 |
patch the wrong one, and tell you that it succeeded to boot.
|
|
|
1027 |
.PP
|
|
|
1028 |
If you apply a patch you've already applied,
|
|
|
1029 |
.B patch
|
|
|
1030 |
thinks it is a reversed patch, and offers to un-apply the patch.
|
|
|
1031 |
This could be construed as a feature.
|
|
|
1032 |
.SH COPYING
|
|
|
1033 |
Copyright
|
|
|
1034 |
.if t \(co
|
|
|
1035 |
1984, 1985, 1986, 1988 Larry Wall.
|
|
|
1036 |
.br
|
|
|
1037 |
Copyright
|
|
|
1038 |
.if t \(co
|
|
|
1039 |
1997 Free Software Foundation, Inc.
|
|
|
1040 |
.PP
|
|
|
1041 |
Permission is granted to make and distribute verbatim copies of
|
|
|
1042 |
this manual provided the copyright notice and this permission notice
|
|
|
1043 |
are preserved on all copies.
|
|
|
1044 |
.PP
|
|
|
1045 |
Permission is granted to copy and distribute modified versions of this
|
|
|
1046 |
manual under the conditions for verbatim copying, provided that the
|
|
|
1047 |
entire resulting derived work is distributed under the terms of a
|
|
|
1048 |
permission notice identical to this one.
|
|
|
1049 |
.PP
|
|
|
1050 |
Permission is granted to copy and distribute translations of this
|
|
|
1051 |
manual into another language, under the above conditions for modified
|
|
|
1052 |
versions, except that this permission notice may be included in
|
|
|
1053 |
translations approved by the copyright holders instead of in
|
|
|
1054 |
the original English.
|
|
|
1055 |
.SH AUTHORS
|
|
|
1056 |
Larry Wall wrote the original version of
|
|
|
1057 |
.BR patch .
|
|
|
1058 |
Paul Eggert removed
|
|
|
1059 |
.BR patch 's
|
|
|
1060 |
arbitrary limits; added support for binary files,
|
|
|
1061 |
setting file times, and deleting files;
|
|
|
1062 |
and made it conform better to \s-1POSIX\s0.
|
|
|
1063 |
Other contributors include Wayne Davison, who added unidiff support,
|
|
|
1064 |
and David MacKenzie, who added configuration and backup support.
|