Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
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.