# Subversion RepositoriesDiffUtils

Rev
Rev Author Line No. Line
1 jjvdgeer@RISCID.ORG 1
This is Info file diff.info, produced by Makeinfo-1.55 from the input
2
file ./diff.texi.
3

4
   This file documents the the GNU diff', diff3', sdiff', and cmp'
5
commands for showing the differences between text files and the patch'
6
command for using their output to update files.
7
 
8
   Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
9
 
10
   Permission is granted to make and distribute verbatim copies of this
11
manual provided the copyright notice and this permission notice are
12
preserved on all copies.
13
 
14
   Permission is granted to copy and distribute modified versions of
15
this manual under the conditions for verbatim copying, provided that
16
the entire resulting derived work is distributed under the terms of a
17
permission notice identical to this one.
18
 
19
   Permission is granted to copy and distribute translations of this
20
manual into another language, under the above conditions for modified
21
versions, except that this permission notice may be stated in a
22
translation approved by the Foundation.
23
 
24

25
File: diff.info,  Node: Line Group Formats,  Next: Line Formats,  Up: If-then-else
26
 
27
Line Group Formats
28
------------------
29
 
30
   Line group formats let you specify formats suitable for many
31
applications that allow if-then-else input, including programming
32
languages and text formatting languages.  A line group format specifies
33
the output format for a contiguous group of similar lines.
34
 
35
   For example, the following command compares the TeX files old' and
36
new', and outputs a merged file in which old regions are surrounded by
37
\begin{em}'-\end{em}' lines, and new regions are surrounded by
38
\begin{bf}'-\end{bf}' lines.
39
 
40
     diff \
41
        --old-group-format='\begin{em}
42
     %<\end{em}
43
     ' \
44
        --new-group-format='\begin{bf}
45
     %>\end{bf}
46
     ' \
47
        old new
48
 
49
   The following command is equivalent to the above example, but it is a
50
little more verbose, because it spells out the default line group
51
formats.
52
 
53
     diff \
54
        --old-group-format='\begin{em}
55
     %<\end{em}
56
     ' \
57
        --new-group-format='\begin{bf}
58
     %>\end{bf}
59
     ' \
60
        --unchanged-group-format='%=' \
61
        --changed-group-format='\begin{em}
62
     %<\end{em}
63
     \begin{bf}
64
     %>\end{bf}
65
     ' \
66
        old new
67
 
68
   Here is a more advanced example, which outputs a diff listing with
69
headers containing line numbers in a "plain English" style.
70
 
71
     diff \
72
        --unchanged-group-format='' \
73
        --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
74
     %<' \
75
        --new-group-format='-------- %dN line%(N=1?:s) added after %de:
76
     %>' \
77
        --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
78
     %<-------- to:
79
     %>' \
80
        old new
81
 
82
   To specify a line group format, use diff' with one of the options
83
listed below.  You can specify up to four line group formats, one for
84
each kind of line group.  You should quote FORMAT, because it typically
85
contains shell metacharacters.
86

87
--old-group-format=FORMAT'
88
     These line groups are hunks containing only lines from the first
89
     file.  The default old group format is the same as the changed
90
     group format if it is specified; otherwise it is a format that
91
     outputs the line group as-is.
92
 
93
--new-group-format=FORMAT'
94
     These line groups are hunks containing only lines from the second
95
     file.  The default new group format is same as the the changed
96
     group format if it is specified; otherwise it is a format that
97
     outputs the line group as-is.
98

99
--changed-group-format=FORMAT'
100
     These line groups are hunks containing lines from both files.  The
101
     default changed group format is the concatenation of the old and
102
     new group formats.
103
 
104
--unchanged-group-format=FORMAT'
105
     These line groups contain lines common to both files.  The default
106
     unchanged group format is a format that outputs the line group
107
     as-is.
108

109
   In a line group format, ordinary characters represent themselves;
110
conversion specifications start with %' and have one of the following
111
forms.
112
 
113
%<'
114
     stands for the lines from the first file, including the trailing
115
     newline.  Each line is formatted according to the old line format
116
     (*note Line Formats::.).
117

118
%>'
119
     stands for the lines from the second file, including the trailing
120
     newline.  Each line is formatted according to the new line format.
121
 
122
%='
123
     stands for the lines common to both files, including the trailing
124
     newline.  Each line is formatted according to the unchanged line
125
     format.
126

127
%%'
128
     stands for %'.
129

130
%c'C''
131
     where C is a single character, stands for C.  C may not be a
132
     backslash or an apostrophe.  For example, %c':'' stands for a
133
     colon, even inside the then-part of an if-then-else format, which
134
     a colon would normally terminate.
135

136
%c'\O''
137
     where O is a string of 1, 2, or 3 octal digits, stands for the
138
     character with octal code O.  For example, %c'\0'' stands for a
139
     null character.
140

141
FN'
142
     where F is a printf' conversion specification and N is one of the
143
     following letters, stands for N's value formatted with F.
144

145
    e'
146
          The line number of the line just before the group in the old
147
          file.
148
 
149
    f'
150
          The line number of the first line in the group in the old
151
          file; equals E + 1.
152

153
    l'
154
          The line number of the last line in the group in the old file.
155
 
156
    m'
157
          The line number of the line just after the group in the old
158
          file; equals L + 1.
159

160
    n'
161
          The number of lines in the group in the old file; equals L -
162
          F + 1.
163
 
164
    E, F, L, M, N'
165
          Likewise, for lines in the new file.
166

167
     The printf' conversion specification can be %d', %o', %x', or
168
     %X', specifying decimal, octal, lower case hexadecimal, or upper
169
     case hexadecimal output respectively.  After the %' the following
170
     options can appear in sequence: a -' specifying
171
     left-justification; an integer specifying the minimum field width;
172
     and a period followed by an optional integer specifying the
173
     minimum number of digits.  For example, %5dN' prints the number
174
     of new lines in the group in a field of width 5 characters, using
175
     the printf' format "%5d"'.
176

177
(A=B?T:E)'
178
     If A equals B then T else E.  A and B are each either a decimal
179
     constant or a single letter interpreted as above.  This format
180
     spec is equivalent to T if A's value equals B's; otherwise it is
181
     equivalent to E.
182
 
183
     For example, %(N=0?no:%dN) line%(N=1?:s)' is equivalent to no
184
     lines' if N (the number of lines in the group in the the new file)
185
     is 0, to 1 line' if N is 1, and to %dN lines' otherwise.
186
 
187

188
File: diff.info,  Node: Line Formats,  Next: Detailed If-then-else,  Prev: Line Group Formats,  Up: If-then-else
189
 
190
Line Formats
191
------------
192
 
193
   Line formats control how each line taken from an input file is
194
output as part of a line group in if-then-else format.
195
 
196
   For example, the following command outputs text with a one-column
197
change indicator to the left of the text.  The first column of output
198
is -' for deleted lines, |' for added lines, and a space for
199
unchanged lines.  The formats contain newline characters where newlines
200
are desired on output.
201
 
202
     diff \
203
        --old-line-format='-%l
204
     ' \
205
        --new-line-format='|%l
206
     ' \
207
        --unchanged-line-format=' %l
208
     ' \
209
        old new
210
 
211
   To specify a line format, use one of the following options.  You
212
should quote FORMAT, since it often contains shell metacharacters.
213
 
214
--old-line-format=FORMAT'
215
     formats lines just from the first file.
216

217
--new-line-format=FORMAT'
218
     formats lines just from the second file.
219
 
220
--unchanged-line-format=FORMAT'
221
     formats lines common to both files.
222

223
--line-format=FORMAT'
224
     formats all lines; in effect, it sets all three above options
225
     simultaneously.
226
 
227
   In a line format, ordinary characters represent themselves;
228
conversion specifications start with %' and have one of the following
229
forms.
230

231
%l'
232
     stands for the the contents of the line, not counting its trailing
233
     newline (if any).  This format ignores whether the line is
234
     incomplete; *Note Incomplete Lines::.
235
 
236
%L'
237
     stands for the the contents of the line, including its trailing
238
     newline (if any).  If a line is incomplete, this format preserves
239
     its incompleteness.
240

241
%%'
242
     stands for %'.
243

244
%c'C''
245
     where C is a single character, stands for C.  C may not be a
246
     backslash or an apostrophe.  For example, %c':'' stands for a
247
     colon.
248

249
%c'\O''
250
     where O is a string of 1, 2, or 3 octal digits, stands for the
251
     character with octal code O.  For example, %c'\0'' stands for a
252
     null character.
253

254
Fn'
255
     where F is a printf' conversion specification, stands for the
256
     line number formatted with F.  For example, %.5dn' prints the
257
     line number using the printf' format "%.5d"'.  *Note Line Group
258
     Formats::, for more about printf conversion specifications.
259
 
260
   The default line format is %l' followed by a newline character.
261

262
   If the input contains tab characters and it is important that they
263
line up on output, you should ensure that %l' or %L' in a line format
264
is just after a tab stop (e.g. by preceding %l' or %L' with a tab
265
character), or you should use the -t' or --expand-tabs' option.
266

267
   Taken together, the line and line group formats let you specify many
268
different formats.  For example, the following command uses a format
269
similar to diff''s normal format.  You can tailor this command to get
270
fine control over diff''s output.
271

272
     diff \
273
        --old-line-format='< %l
274
     ' \
275
        --new-line-format='> %l
276
     ' \
277
        --old-group-format='%df%(f=l?:,%dl)d%dE
278
     %<' \
279
        --new-group-format='%dea%dF%(F=L?:,%dL)
280
     %>' \
281
        --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
282
     %<---
283
     %>' \
284
        --unchanged-group-format='' \
285
        old new
286

287

288
File: diff.info,  Node: Detailed If-then-else,  Next: Example If-then-else,  Prev: Line Formats,  Up: If-then-else
289

290
Detailed Description of If-then-else Format
291
-------------------------------------------
292

293
   For lines common to both files, diff' uses the unchanged line group
294
format.  For each hunk of differences in the merged output format, if
295
the hunk contains only lines from the first file, diff' uses the old
296
line group format; if the hunk contains only lines from the second
297
file, diff' uses the new group format; otherwise, diff' uses the
298
changed group format.
299

300
   The old, new, and unchanged line formats specify the output format of
301
lines from the first file, lines from the second file, and lines common
302
to both files, respectively.
303

304
   The option --ifdef=NAME' is equivalent to the following sequence of
305
options using shell syntax:
306
 
307
     --old-group-format='#ifndef NAME
308
     %<#endif /* not NAME */
309
     ' \
310
     --new-group-format='#ifdef NAME
311
     %>#endif /* NAME */
312
     ' \
313
     --unchanged-group-format='%=' \
314
     --changed-group-format='#ifndef NAME
315
     %<#else /* NAME */
316
     %>#endif /* NAME */
317
     '
318
 
319
   You should carefully check the diff' output for proper nesting.
320
For example, when using the the -D NAME' or --ifdef=NAME' option, you
321
should check that if the differing lines contain any of the C
322
preprocessor directives #ifdef', #ifndef', #else', #elif', or
323
#endif', they are nested properly and match.  If they don't, you must
324
make corrections manually.  It is a good idea to carefully check the
325
resulting code anyway to make sure that it really does what you want it
326
to; depending on how the input files were produced, the output might
327
contain duplicate or otherwise incorrect code.
328
 
329
   The patch' -D NAME' option behaves just like the diff' -D NAME'
330
option, except it operates on a file and a diff to produce a merged
331
file; *Note patch Options::.
332
 
333

334
File: diff.info,  Node: Example If-then-else,  Prev: Detailed If-then-else,  Up: If-then-else
335
 
336
An Example of If-then-else Format
337
---------------------------------
338
 
339
   Here is the output of diff -DTWO lao tzu' (*note Sample diff
340
Input::., for the complete contents of the two files):
341

342
     #ifndef TWO
343
     The Way that can be told of is not the eternal Way;
344
     The name that can be named is not the eternal name.
345
     #endif /* not TWO */
346
     The Nameless is the origin of Heaven and Earth;
347
     #ifndef TWO
348
     The Named is the mother of all things.
349
     #else /* TWO */
350
     The named is the mother of all things.
351

352
     #endif /* TWO */
353
     Therefore let there always be non-being,
354
       so we may see their subtlety,
355
     And let there always be being,
356
       so we may see their outcome.
357
     The two are the same,
358
     But after they are produced,
359
       they have different names.
360
     #ifdef TWO
361
     They both may be called deep and profound.
362
     Deeper and more profound,
363
     The door of all subtleties!
364
     #endif /* TWO */
365

366

367
File: diff.info,  Node: Comparing Directories,  Next: Adjusting Output,  Prev: Output Formats,  Up: Top
368

369
Comparing Directories
370
*********************
371

372
   You can use diff' to compare some or all of the files in two
373
directory trees.  When both file name arguments to diff' are
374
directories, it compares each file that is contained in both
375
directories, examining file names in alphabetical order.  Normally
376
diff' is silent about pairs of files that contain no differences, but
377
if you use the -s' or --report-identical-files' option, it reports
378
pairs of identical files.  Normally diff' reports subdirectories
379
common to both directories without comparing subdirectories' files, but
380
if you use the -r' or --recursive' option, it compares every
381
corresponding pair of files in the directory trees, as many levels deep
382
as they go.
383

384
   For file names that are in only one of the directories, diff'
385
normally does not show the contents of the file that exists; it reports
386
only that the file exists in that directory and not in the other.  You
387
can make diff' act as though the file existed but was empty in the
388
other directory, so that it outputs the entire contents of the file that
389
actually exists.  (It is output as either an insertion or a deletion,
390
depending on whether it is in the first or the second directory given.)
391
To do this, use the -N' or --new-file' option.
392

393
   If the older directory contains one or more large files that are not
394
in the newer directory, you can make the patch smaller by using the
395
-P' or --unidirectional-new-file' option instead of -N'.  This
396
option is like -N' except that it only inserts the contents of files
397
that appear in the second directory but not the first (that is, files
398
that were added).  At the top of the patch, write instructions for the
399
user applying the patch to remove the files that were deleted before
400
applying the patch.  *Note Making Patches::, for more discussion of
401
making patches for distribution.
402

403
   To ignore some files while comparing directories, use the -x
404
PATTERN' or --exclude=PATTERN' option.  This option ignores any files
405
or subdirectories whose base names match the shell pattern PATTERN.
406
Unlike in the shell, a period at the start of the base of a file name
407
matches a wildcard at the start of a pattern.  You should enclose
408
PATTERN in quotes so that the shell does not expand it.  For example,
409
the option -x '*.[ao]'' ignores any file whose name ends with .a' or
410
.o'.
411
 
412
   This option accumulates if you specify it more than once.  For
413
example, using the options -x 'RCS' -x '*,v'' ignores any file or
414
subdirectory whose base name is RCS' or ends with ,v'.
415

416
   If you need to give this option many times, you can instead put the
417
patterns in a file, one pattern per line, and use the -X FILE' or
418
--exclude-from=FILE' option.
419

420
   If you have been comparing two directories and stopped partway
421
through, later you might want to continue where you left off.  You can
422
do this by using the -S FILE' or --starting-file=FILE' option.  This
423
compares only the file FILE and all alphabetically later files in the
424
topmost directory level.
425

426

427
File: diff.info,  Node: Adjusting Output,  Next: diff Performance,  Prev: Comparing Directories,  Up: Top
428

429
Making diff' Output Prettier
430
*****************************
431
 
432
   diff' provides several ways to adjust the appearance of its output.
433
These adjustments can be applied to any output format.
434

435
* Menu:
436

437
* Tabs::		Preserving the alignment of tabstops.
438
* Pagination::		Page numbering and timestamping diff' output.
439
 
440

441
File: diff.info,  Node: Tabs,  Next: Pagination,  Up: Adjusting Output
442
 
443
Preserving Tabstop Alignment
444
============================
445
 
446
   The lines of text in some of the diff' output formats are preceded
447
by one or two characters that indicate whether the text is inserted,
448
deleted, or changed.  The addition of those characters can cause tabs to
449
move to the next tabstop, throwing off the alignment of columns in the
450
line.  GNU diff' provides two ways to make tab-aligned columns line up
451
correctly.
452
 
453
   The first way is to have diff' convert all tabs into the correct
454
number of spaces before outputting them; select this method with the
455
-t' or --expand-tabs' option.  diff' assumes that tabstops are set
456
every 8 columns.  To use this form of output with patch', you must
457
give patch' the -l' or --ignore-white-space' option (*note Changed
458
White Space::., for more information).
459
 
460
   The other method for making tabs line up correctly is to add a tab
461
character instead of a space after the indicator character at the
462
beginning of the line.  This ensures that all following tab characters
463
are in the same position relative to tabstops that they were in the
464
original files, so that the output is aligned correctly.  Its
465
disadvantage is that it can make long lines too long to fit on one line
466
of the screen or the paper.  It also does not work with the unified
467
output format, which does not have a space character after the change
468
type indicator character.  Select this method with the -T' or
469
--initial-tab' option.
470
 
471

472
File: diff.info,  Node: Pagination,  Prev: Tabs,  Up: Adjusting Output
473
 
474
Paginating diff' Output
475
========================
476

477
   It can be convenient to have long output page-numbered and
478
time-stamped.  The -l' and --paginate' options do this by sending the
479
diff' output through the pr' program.  Here is what the page header
480
might look like for diff -lc lao tzu':
481
 
482
     Mar 11 13:37 1991  diff -lc lao tzu Page 1
483
 
484

485
File: diff.info,  Node: diff Performance,  Next: Comparing Three Files,  Prev: Adjusting Output,  Up: Top
486
 
487
diff' Performance Tradeoffs
488
****************************
489

490
   GNU diff' runs quite efficiently; however, in some circumstances
491
you can cause it to run faster or produce a more compact set of changes.
492
There are two ways that you can affect the performance of GNU diff' by
493
changing the way it compares files.
494

495
   Performance has more than one dimension.  These options improve one
496
aspect of performance at the cost of another, or they improve
497
performance in some cases while hurting it in others.
498

499
   The way that GNU diff' determines which lines have changed always
500
comes up with a near-minimal set of differences.  Usually it is good
501
enough for practical purposes.  If the diff' output is large, you
502
might want diff' to use a modified algorithm that sometimes produces a
503
smaller set of differences.  The -d' or --minimal' option does this;
504
however, it can also cause diff' to run more slowly than usual, so it
505
is not the default behavior.
506

507
   When the files you are comparing are large and have small groups of
508
changes scattered throughout them, you can use the -H' or
509
--speed-large-files' option to make a different modification to the
510
algorithm that diff' uses.  If the input files have a constant small
511
density of changes, this option speeds up the comparisons without
512
changing the output.  If not, diff' might produce a larger set of
513
differences; however, the output will still be correct.
514

515
   Normally diff' discards the prefix and suffix that is common to
516
both files before it attempts to find a minimal set of differences.
517
This makes diff' run faster, but occasionally it may produce
518
non-minimal output.  The --horizon-lines=LINES' option prevents diff'
519
from discarding the last LINES lines of the prefix and the first LINES
520
lines of the suffix.  This gives diff' further opportunities to find a
521
minimal output.
522
 
523

524
File: diff.info,  Node: Comparing Three Files,  Next: diff3 Merging,  Prev: diff Performance,  Up: Top
525
 
526
Comparing Three Files
527
*********************
528
 
529
   Use the program diff3' to compare three files and show any
530
differences among them.  (diff3' can also merge files; see *Note diff3
531
Merging::).
532
 
533
   The "normal" diff3' output format shows each hunk of differences
534
without surrounding context.  Hunks are labeled depending on whether
535
they are two-way or three-way, and lines are annotated by their
536
location in the input files.
537

538
   *Note Invoking diff3::, for more information on how to run diff3'.
539
 
540
* Menu:
541
 
542
* Sample diff3 Input::		Sample diff3' input for examples.
543
* Detailed diff3 Normal::	A detailed description of normal output format.
544
* diff3 Hunks::			The format of normal output format.
545
* Example diff3 Normal::	Sample output in the normal format.
546

547

548
File: diff.info,  Node: Sample diff3 Input,  Next: Detailed diff3 Normal,  Up: Comparing Three Files
549

550
A Third Sample Input File
551
=========================
552

553
   Here is a third sample file that will be used in examples to
554
illustrate the output of diff3' and how various options can change it.
555
The first two files are the same that we used for diff' (*note Sample
556
diff Input::.).  This is the third sample file, called tao':
557
 
558
     The Way that can be told of is not the eternal Way;
559
     The name that can be named is not the eternal name.
560
     The Nameless is the origin of Heaven and Earth;
561
     The named is the mother of all things.
562
 
563
     Therefore let there always be non-being,
564
       so we may see their subtlety,
565
     And let there always be being,
566
       so we may see their result.
567
     The two are the same,
568
     But after they are produced,
569
       they have different names.
570
 
571
       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
572
 
573

574
File: diff.info,  Node: Detailed diff3 Normal,  Next: diff3 Hunks,  Prev: Sample diff3 Input,  Up: Comparing Three Files
575
 
576
Detailed Description of diff3' Normal Format
577
=============================================
578

579
   Each hunk begins with a line marked ===='.  Three-way hunks have
580
plain ====' lines, and two-way hunks have 1', 2', or 3' appended to
581
specify which of the three input files differ in that hunk.  The hunks
582
contain copies of two or three sets of input lines each preceded by one
583
or two commands identifying where the lines came from.
584
 
585
   Normally, two spaces precede each copy of an input line to
586
distinguish it from the commands.  But with the -T' or --initial-tab'
587
option, diff3' uses a tab instead of two spaces; this lines up tabs
588
correctly.  *Note Tabs::, for more information.
589

590
   Commands take the following forms:
591

592
FILE:La'
593
     This hunk appears after line L of file FILE, and contains no lines
594
     in that file.  To edit this file to yield the other files, one
595
     must append hunk lines taken from the other files.  For example,
596
     1:11a' means that the hunk follows line 11 in the first file and
597
     contains no lines from that file.
598

599
FILE:Rc'
600
     This hunk contains the lines in the range R of file FILE.  The
601
     range R is a comma-separated pair of line numbers, or just one
602
     number if the range is a singleton.  To edit this file to yield the
603
     other files, one must change the specified lines to be the lines
604
     taken from the other files.  For example, 2:11,13c' means that
605
     the hunk contains lines 11 through 13 from the second file.
606

607
   If the last line in a set of input lines is incomplete (*note
608
Incomplete Lines::.), it is distinguished on output from a full line by
609
a following line that starts with \'.
610
 
611

612
File: diff.info,  Node: diff3 Hunks,  Next: Example diff3 Normal,  Prev: Detailed diff3 Normal,  Up: Comparing Three Files
613
 
614
diff3' Hunks
615
=============
616

617
   Groups of lines that differ in two or three of the input files are
618
called "diff3 hunks", by analogy with diff' hunks (*note Hunks::.).
619
If all three input files differ in a diff3' hunk, the hunk is called a
620
"three-way hunk"; if just two input files differ, it is a "two-way
621
hunk".
622

623
   As with diff', several solutions are possible.  When comparing the
624
files A', B', and C', diff3' normally finds diff3' hunks by
625
merging the two-way hunks output by the two commands diff A B' and
626
diff A C'.  This does not necessarily minimize the size of the output,
627
but exceptions should be rare.
628

629
   For example, suppose F' contains the three lines a', b', f', G'
630
contains the lines g', b', g', and H' contains the lines a', b',
631
h'.  diff3 F G H' might output the following:
632
 
633
     ====2
634
     1:1c
635
     3:1c
636
       a
637
     2:1c
638
       g
639
     ====
640
     1:3c
641
       f
642
     2:3c
643
       g
644
     3:3c
645
       h
646
 
647
because it found a two-way hunk containing a' in the first and third
648
files and g' in the second file, then the single line b' common to
649
all three files, then a three-way hunk containing the last line of each
650
file.
651

652

653
File: diff.info,  Node: Example diff3 Normal,  Prev: diff3 Hunks,  Up: Comparing Three Files
654

655
An Example of diff3' Normal Format
656
===================================
657
 
658
   Here is the output of the command diff3 lao tzu tao' (*note Sample
659
diff3 Input::., for the complete contents of the files).  Notice that
660
it shows only the lines that are different among the three files.
661

662
     ====2
663
     1:1,2c
664
     3:1,2c
665
       The Way that can be told of is not the eternal Way;
666
       The name that can be named is not the eternal name.
667
     2:0a
668
     ====1
669
     1:4c
670
       The Named is the mother of all things.
671
     2:2,3c
672
     3:4,5c
673
       The named is the mother of all things.
674

675
     ====3
676
     1:8c
677
     2:7c
678
         so we may see their outcome.
679
     3:9c
680
         so we may see their result.
681
     ====
682
     1:11a
683
     2:11,13c
684
       They both may be called deep and profound.
685
       Deeper and more profound,
686
       The door of all subtleties!
687
     3:13,14c
688

689
         -- The Way of Lao-Tzu, tr. Wing-tsit Chan
690

691

692
File: diff.info,  Node: diff3 Merging,  Next: Interactive Merging,  Prev: Comparing Three Files,  Up: Top
693

694
Merging From a Common Ancestor
695
******************************
696

697
   When two people have made changes to copies of the same file,
698
diff3' can produce a merged output that contains both sets of changes
699
together with warnings about conflicts.
700
 
701
   One might imagine programs with names like diff4' and diff5' to
702
compare more than three files simultaneously, but in practice the need
703
rarely arises.  You can use diff3' to merge three or more sets of
704
changes to a file by merging two change sets at a time.
705

706
   diff3' can incorporate changes from two modified versions into a
707
common preceding version.  This lets you merge the sets of changes
708
represented by the two newer files.  Specify the common ancestor version
709
as the second argument and the two newer versions as the first and third
710
arguments, like this:
711
 
712
     diff3 MINE OLDER YOURS
713
 
714
You can remember the order of the arguments by noting that they are in
715
alphabetical order.
716
 
717
   You can think of this as subtracting OLDER from YOURS and adding the
718
result to MINE, or as merging into MINE the changes that would turn
719
OLDER into YOURS.  This merging is well-defined as long as MINE and
720
OLDER match in the neighborhood of each such change.  This fails to be
721
true when all three input files differ or when only OLDER differs; we
722
call this a "conflict".  When all three input files differ, we call the
723
conflict an "overlap".
724
 
725
   diff3' gives you several ways to handle overlaps and conflicts.
726
You can omit overlaps or conflicts, or select only overlaps, or mark
727
conflicts with special <<<<<<<' and >>>>>>>' lines.
728

729
   diff3' can output the merge results as an ed' script that that can
730
be applied to the first file to yield the merged output.  However, it
731
is usually better to have diff3' generate the merged output directly;
732
this bypasses some problems with ed'.
733

734
* Menu:
735

736
* Which Changes::		Selecting changes to incorporate.
737
* Marking Conflicts::		Marking conflicts.
738
* Bypassing ed::		Generating merged output directly.
739
* Merging Incomplete Lines::	How diff3' merges incomplete lines.
740
* Saving the Changed File::	Emulating System V behavior.
741
 
742

743
File: diff.info,  Node: Which Changes,  Next: Marking Conflicts,  Up: diff3 Merging
744
 
745
Selecting Which Changes to Incorporate
746
======================================
747
 
748
   You can select all unmerged changes from OLDER to YOURS for merging
749
into MINE with the -e' or --ed' option.  You can select only the
750
nonoverlapping unmerged changes with -3' or --easy-only', and you can
751
select only the overlapping changes with -x' or --overlap-only'.
752
 
753
   The -e', -3' and -x' options select only "unmerged changes", i.e.
754
changes where MINE and YOURS differ; they ignore changes from OLDER to
755
YOURS where MINE and YOURS are identical, because they assume that such
756
changes have already been merged.  If this assumption is not a safe
757
one, you can use the -A' or --show-all' option (*note Marking
758
Conflicts::.).
759

760
   Here is the output of the command diff3' with each of these three
761
options (*note Sample diff3 Input::., for the complete contents of the
762
files).  Notice that -e' outputs the union of the disjoint sets of
763
changes output by -3' and -x'.
764

765
   Output of diff3 -e lao tzu tao':
766
     11a
767
 
768
       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
769
     .
770
     8c
771
       so we may see their result.
772
     .
773
 
774
   Output of diff3 -3 lao tzu tao':
775
     8c
776
       so we may see their result.
777
     .
778

779
   Output of diff3 -x lao tzu tao':
780
     11a
781
 
782
       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
783
     .
784
 
785

786
File: diff.info,  Node: Marking Conflicts,  Next: Bypassing ed,  Prev: Which Changes,  Up: diff3 Merging
787
 
788
Marking Conflicts
789
=================
790
 
791
   diff3' can mark conflicts in the merged output by bracketing them
792
with special marker lines.  A conflict that comes from two files A and
793
B is marked as follows:
794

795
     <<<<<<< A
796
     lines from A
797
     =======
798
     lines from B
799
     >>>>>>> B
800

801
   A conflict that comes from three files A, B and C is marked as
802
follows:
803

804
     <<<<<<< A
805
     lines from A
806
     ||||||| B
807
     lines from B
808
     =======
809
     lines from C
810
     >>>>>>> C
811

812
   The -A' or --show-all' option acts like the -e' option, except
813
that it brackets conflicts, and it outputs all changes from OLDER to
814
YOURS, not just the unmerged changes.  Thus, given the sample input
815
files (*note Sample diff3 Input::.), diff3 -A lao tzu tao' puts
816
brackets around the conflict where only tzu' differs:
817
 
818
     <<<<<<< tzu
819
     =======
820
     The Way that can be told of is not the eternal Way;
821
     The name that can be named is not the eternal name.
822
     >>>>>>> tao
823
 
824
   And it outputs the three-way conflict as follows:
825
 
826
     <<<<<<< lao
827
     ||||||| tzu
828
     They both may be called deep and profound.
829
     Deeper and more profound,
830
     The door of all subtleties!
831
     =======
832
 
833
       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
834
     >>>>>>> tao
835
 
836
   The -E' or --show-overlap' option outputs less information than
837
the -A' or --show-all' option, because it outputs only unmerged
838
changes, and it never outputs the contents of the second file.  Thus
839
the -E' option acts like the -e' option, except that it brackets the
840
first and third files from three-way overlapping changes.  Similarly,
841
-X' acts like -x', except it brackets all its (necessarily
842
overlapping) changes.  For example, for the three-way overlapping
843
change above, the -E' and -X' options output the following:
844
 
845
     <<<<<<< lao
846
     =======
847
 
848
       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
849
     >>>>>>> tao
850
 
851
   If you are comparing files that have meaningless or uninformative
852
names, you can use the -L LABEL' or --label=LABEL' option to show
853
alternate names in the <<<<<<<', |||||||' and >>>>>>>' brackets.
854
This option can be given up to three times, once for each input file.
855
Thus diff3 -A -L X -L Y -L Z A B C' acts like diff3 -A A B C', except
856
that the output looks like it came from files named X', Y' and Z'
857
rather than from files named A', B' and C'.
858

859

860
File: diff.info,  Node: Bypassing ed,  Next: Merging Incomplete Lines,  Prev: Marking Conflicts,  Up: diff3 Merging
861

862
Generating the Merged Output Directly
863
=====================================
864

865
   With the -m' or --merge' option, diff3' outputs the merged file
866
directly.  This is more efficient than using ed' to generate it, and
867
works even with non-text files that ed' would reject.  If you specify
868
-m' without an ed' script option, -A' (--show-all') is assumed.
869
 
870
   For example, the command diff3 -m lao tzu tao' (*note Sample diff3
871
Input::. for a copy of the input files) would output the following:
872

873
     <<<<<<< tzu
874
     =======
875
     The Way that can be told of is not the eternal Way;
876
     The name that can be named is not the eternal name.
877
     >>>>>>> tao
878
     The Nameless is the origin of Heaven and Earth;
879
     The Named is the mother of all things.
880
     Therefore let there always be non-being,
881
       so we may see their subtlety,
882
     And let there always be being,
883
       so we may see their result.
884
     The two are the same,
885
     But after they are produced,
886
       they have different names.
887
     <<<<<<< lao
888
     ||||||| tzu
889
     They both may be called deep and profound.
890
     Deeper and more profound,
891
     The door of all subtleties!
892
     =======
893

894
       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
895
     >>>>>>> tao
896

897

898
File: diff.info,  Node: Merging Incomplete Lines,  Next: Saving the Changed File,  Prev: Bypassing ed,  Up: diff3 Merging
899

900
How diff3' Merges Incomplete Lines
901
===================================
902
 
903
   With -m', incomplete lines (*note Incomplete Lines::.) are simply
904
copied to the output as they are found; if the merged output ends in an
905
conflict and one of the input files ends in an incomplete line,
906
succeeding |||||||', =======' or >>>>>>>' brackets appear somewhere
907
other than the start of a line because they are appended to the
908
incomplete line.
909
 
910
   Without -m', if an ed' script option is specified and an
911
incomplete line is found, diff3' generates a warning and acts as if a
912
newline had been present.
913

914

915
File: diff.info,  Node: Saving the Changed File,  Prev: Merging Incomplete Lines,  Up: diff3 Merging
916

917
Saving the Changed File
918
=======================
919

920
   Traditional Unix diff3' generates an ed' script without the
921
trailing w' and and q' commands that save the changes.  System V
922
diff3' generates these extra commands.  GNU diff3' normally behaves
923
like traditional Unix diff3', but with the -i' option it behaves like
924
System V diff3' and appends the w' and q' commands.
925
 
926
   The -i' option requires one of the ed' script options -AeExX3',
927
and is incompatible with the merged output option -m'.
928
 
929

930
File: diff.info,  Node: Interactive Merging,  Next: Merging with patch,  Prev: diff3 Merging,  Up: Top
931
 
932
Interactive Merging with sdiff'
933
********************************
934

935
   With sdiff', you can merge two files interactively based on a
936
side-by-side -y' format comparison (*note Side by Side::.).  Use -o
937
FILE' or --output=FILE' to specify where to put the merged text.
938
*Note Invoking sdiff::, for more details on the options to sdiff'.
939
 
940
   Another way to merge files interactively is to use the Emacs Lisp
941
package emerge'.  *Note emerge: (emacs)emerge, for more information.
942

943
* Menu:
944

945
* sdiff Option Summary::Summary of sdiff' options.
946
* Merge Commands::	Merging two files interactively.
947
 
948

949
File: diff.info,  Node: sdiff Option Summary,  Next: Merge Commands,  Up: Interactive Merging
950
 
951
Specifying diff' Options to sdiff'
952
====================================
953
 
954
   The following sdiff' options have the same meaning as for diff'.
955
*Note diff Options::, for the use of these options.
956
 
957
     -a -b -d -i -t -v
958
     -B -H -I REGEXP
959
 
960
     --ignore-blank-lines  --ignore-case
961
     --ignore-matching-lines=REGEXP  --ignore-space-change
962
     --left-column  --minimal  --speed-large-files
963
     --suppress-common-lines  --expand-tabs
964
     --text  --version  --width=COLUMNS
965
 
966
   For historical reasons, sdiff' has alternate names for some
967
options.  The -l' option is equivalent to the --left-column' option,
968
and similarly -s' is equivalent to --suppress-common-lines'.  The
969
meaning of the sdiff' -w' and -W' options is interchanged from that
970
of diff': with sdiff', -w COLUMNS' is equivalent to
971
--width=COLUMNS', and -W' is equivalent to --ignore-all-space'.
972
sdiff' without the -o' option is equivalent to diff' with the -y'
973
or --side-by-side' option (*note Side by Side::.).
974

975

976
File: diff.info,  Node: Merge Commands,  Prev: sdiff Option Summary,  Up: Interactive Merging
977

978
Merge Commands
979
==============
980

981
   Groups of common lines, with a blank gutter, are copied from the
982
first file to the output.  After each group of differing lines, sdiff'
983
prompts with %' and pauses, waiting for one of the following commands.
984
Follow each command with RET.
985

986
e'
987
     Discard both versions.  Invoke a text editor on an empty temporary
988
     file, then copy the resulting file to the output.
989
 
990
eb'
991
     Concatenate the two versions, edit the result in a temporary file,
992
     then copy the edited result to the output.
993

994
el'
995
     Edit a copy of the left version, then copy the result to the
996
     output.
997
 
998
er'
999
     Edit a copy of the right version, then copy the result to the
1000
     output.
1001

1002
l'
1003
     Copy the left version to the output.
1004
 
1005
q'
1006
     Quit.
1007

1008
r'
1009
     Copy the right version to the output.
1010
 
1011
s'
1012
     Silently copy common lines.
1013

1014
v'
1015
     Verbosely copy common lines.  This is the default.
1016
 
1017
   The text editor invoked is specified by the EDITOR' environment
1018
variable if it is set.  The default is system-dependent.
1019

1020

1021
File: diff.info,  Node: Merging with patch,  Next: Making Patches,  Prev: Interactive Merging,  Up: Top
1022

1023
Merging with patch'
1024
********************
1025
 
1026
   patch' takes comparison output produced by diff' and applies the
1027
differences to a copy of the original file, producing a patched
1028
version.  With patch', you can distribute just the changes to a set of
1029
files instead of distributing the entire file set; your correspondents
1030
can apply patch' to update their copy of the files with your changes.
1031
patch' automatically determines the diff format, skips any leading or
1032
trailing headers, and uses the headers to determine which file to
1033
patch.  This lets your correspondents feed an article or message
1034
containing a difference listing directly to patch'.
1035
 
1036
   patch' detects and warns about common problems like forward
1037
patches.  It saves the original version of the files it patches, and
1038
saves any patches that it could not apply.  It can also maintain a
1039
patchlevel.h' file to ensures that your correspondents apply diffs in
1040
the proper order.
1041
 
1042
   patch' accepts a series of diffs in its standard input, usually
1043
separated by headers that specify which file to patch.  It applies
1044
diff' hunks (*note Hunks::.) one by one.  If a hunk does not exactly
1045
match the original file, patch' uses heuristics to try to patch the
1046
file as well as it can.  If no approximate match can be found, patch'
1047
rejects the hunk and skips to the next hunk.  patch' normally replaces
1048
each file F with its new version, saving the original file in F.orig',
1049
and putting reject hunks (if any) into F.rej'.
1050

1051
   *Note Invoking patch::, for detailed information on the options to
1052
patch'.  *Note Backups::, for more information on how patch' names
1053
backup files.  *Note Rejects::, for more information on where patch'
1054
puts reject hunks.
1055
 
1056
* Menu:
1057
 
1058
* patch Input::		Selecting the type of patch' input.
1059
* Imperfect::		Dealing with imperfect patches.
1060
* Empty Files::		Removing empty files after patching.
1061
* Multiple Patches::	Handling multiple patches in a file specially.
1062
* patch Messages::	Messages and questions patch' can produce.
1063
 
1064

1065
File: diff.info,  Node: patch Input,  Next: Imperfect,  Up: Merging with patch
1066
 
1067
Selecting the patch' Input Format
1068
==================================
1069

1070
   patch' normally determines which diff' format the patch file uses
1071
by examining its contents.  For patch files that contain particularly
1072
confusing leading text, you might need to use one of the following
1073
options to force patch' to interpret the patch file as a certain
1074
format of diff.  The output formats listed here are the only ones that
1075
patch' can understand.
1076

1077
-c'
1078
--context'
1079
     context diff.
1080

1081
-e'
1082
--ed'
1083
     ed' script.
1084
 
1085
-n'
1086
--normal'
1087
     normal diff.
1088
 
1089
-u'
1090
--unified'
1091
     unified diff.
1092
 
1093

1094
File: diff.info,  Node: Imperfect,  Next: Empty Files,  Prev: patch Input,  Up: Merging with patch
1095
 
1096
Applying Imperfect Patches
1097
==========================
1098
 
1099
   patch' tries to skip any leading text in the patch file, apply the
1100
diff, and then skip any trailing text.  Thus you can feed a news article
1101
or mail message directly to patch', and it should work.  If the entire
1102
diff is indented by a constant amount of white space, patch'
1103
automatically ignores the indentation.
1104

1105
   However, certain other types of imperfect input require user
1106
intervention.
1107

1108
* Menu:
1109

1110
* Changed White Space::	When tabs and spaces don't match exactly.
1111
* Reversed Patches::	Applying reversed patches correctly.
1112
* Inexact::		Helping patch' find close matches.
1113
 
1114

1115
File: diff.info,  Node: Changed White Space,  Next: Reversed Patches,  Up: Imperfect
1116
 
1117
Applying Patches with Changed White Space
1118
-----------------------------------------
1119
 
1120
   Sometimes mailers, editors, or other programs change spaces into
1121
tabs, or vice versa.  If this happens to a patch file or an input file,
1122
the files might look the same, but patch' will not be able to match
1123
them properly.  If this problem occurs, use the -l' or
1124
--ignore-white-space' option, which makes patch' compare white space
1125
loosely so that any sequence of white space in the patch file matches
1126
any sequence of white space in the input files.  Non-white-space
1127
characters must still match exactly.  Each line of the context must
1128
still match a line in the input file.
1129
 
1130

1131
File: diff.info,  Node: Reversed Patches,  Next: Inexact,  Prev: Changed White Space,  Up: Imperfect
1132
 
1133
Applying Reversed Patches
1134
-------------------------
1135
 
1136
   Sometimes people run diff' with the new file first instead of
1137
second.  This creates a diff that is "reversed".  To apply such
1138
patches, give patch' the -R' or --reverse' option.  patch' then
1139
attempts to swap each hunk around before applying it.  Rejects come out
1140
in the swapped format.  The -R' option does not work with ed' scripts
1141
because there is too little information in them to reconstruct the
1142
reverse operation.
1143

1144
   Often patch' can guess that the patch is reversed.  If the first
1145
hunk of a patch fails, patch' reverses the hunk to see if it can apply
1146
it that way.  If it can, patch' asks you if you want to have the -R'
1147
option set; if it can't, patch' continues to apply the patch normally.
1148
This method cannot detect a reversed patch if it is a normal diff and
1149
the first command is an append (which should have been a delete) since
1150
appends always succeed, because a null context matches anywhere.  But
1151
most patches add or change lines rather than delete them, so most
1152
reversed normal diffs begin with a delete, which fails, and patch'
1153
notices.
1154

1155
   If you apply a patch that you have already applied, patch' thinks
1156
it is a reversed patch and offers to un-apply the patch.  This could be
1157
construed as a feature.  If you did this inadvertently and you don't
1158
want to un-apply the patch, just answer n' to this offer and to the
1159
subsequent "apply anyway" question--or type C-c' to kill the patch'
1160
process.
1161

1162

1163
File: diff.info,  Node: Inexact,  Prev: Reversed Patches,  Up: Imperfect
1164

1165
Helping patch' Find Inexact Matches
1166
------------------------------------
1167
 
1168
   For context diffs, and to a lesser extent normal diffs, patch' can
1169
detect when the line numbers mentioned in the patch are incorrect, and
1170
it attempts to find the correct place to apply each hunk of the patch.
1171
As a first guess, it takes the line number mentioned in the hunk, plus
1172
or minus any offset used in applying the previous hunk.  If that is not
1173
the correct place, patch' scans both forward and backward for a set of
1174
lines matching the context given in the hunk.
1175
 
1176
   First patch' looks for a place where all lines of the context
1177
match.  If it cannot find such a place, and it is reading a context or
1178
unified diff, and the maximum fuzz factor is set to 1 or more, then
1179
patch' makes another scan, ignoring the first and last line of
1180
context.  If that fails, and the maximum fuzz factor is set to 2 or
1181
more, it makes another scan, ignoring the first two and last two lines
1182
of context are ignored.  It continues similarly if the maximum fuzz
1183
factor is larger.
1184
 
1185
   The -F LINES' or --fuzz=LINES' option sets the maximum fuzz factor
1186
to LINES.  This option only applies to context and unified diffs; it
1187
ignores up to LINES lines while looking for the place to install a
1188
hunk.  Note that a larger fuzz factor increases the odds of making a
1189
faulty patch.  The default fuzz factor is 2; it may not be set to more
1190
than the number of lines of context in the diff, ordinarily 3.
1191
 
1192
   If patch' cannot find a place to install a hunk of the patch, it
1193
writes the hunk out to a reject file (*note Rejects::., for information
1194
on how reject files are named).  It writes out rejected hunks in context
1195
format no matter what form the input patch is in.  If the input is a
1196
normal or ed' diff, many of the contexts are simply null.  The line
1197
numbers on the hunks in the reject file may be different from those in
1198
the patch file: they show the approximate location where patch' thinks
1199
the failed hunks belong in the new file rather than in the old one.
1200

1201
   As it completes each hunk, patch' tells you whether the hunk
1202
succeeded or failed, and if it failed, on which line (in the new file)
1203
patch' thinks the hunk should go.  If this is different from the line
1204
number specified in the diff, it tells you the offset.  A single large
1205
offset *may* indicate that patch' installed a hunk in the wrong place.
1206
patch' also tells you if it used a fuzz factor to make the match, in
1207
which case you should also be slightly suspicious.
1208

1209
   patch' cannot tell if the line numbers are off in an ed' script,
1210
and can only detect wrong line numbers in a normal diff when it finds a
1211
change or delete command.  It may have the same problem with a context
1212
diff using a fuzz factor equal to or greater than the number of lines
1213
of context shown in the diff (typically 3).  In these cases, you should
1214
probably look at a context diff between your original and patched input
1215
files to see if the changes make sense.  Compiling without errors is a
1216
pretty good indication that the patch worked, but not a guarantee.
1217

1218
   patch' usually produces the correct results, even when it must make
1219
many guesses.  However, the results are guaranteed only when the patch
1220
is applied to an exact copy of the file that the patch was generated
1221
from.
1222
 
1223

1224
File: diff.info,  Node: Empty Files,  Next: Multiple Patches,  Prev: Imperfect,  Up: Merging with patch
1225
 
1226
Removing Empty Files
1227
====================
1228
 
1229
   Sometimes when comparing two directories, the first directory
1230
contains a file that the second directory does not.  If you give diff'
1231
the -N' or --new-file' option, it outputs a diff that deletes the
1232
contents of this file.  By default, patch' leaves an empty file after
1233
applying such a diff.  The -E' or --remove-empty-files' option to
1234
patch' deletes output files that are empty after applying the diff.
1235

1236

1237
File: diff.info,  Node: Multiple Patches,  Next: patch Messages,  Prev: Empty Files,  Up: Merging with patch
1238

1239
Multiple Patches in a File
1240
==========================
1241

1242
   If the patch file contains more than one patch, patch' tries to
1243
apply each of them as if they came from separate patch files.  This
1244
means that it determines the name of the file to patch for each patch,
1245
and that it examines the leading text before each patch for file names
1246
and prerequisite revision level (*note Making Patches::., for more on
1247
that topic).
1248
 
1249
   For the second and subsequent patches in the patch file, you can give
1250
options and another original file name by separating their argument
1251
lists with a +'.  However, the argument list for a second or
1252
subsequent patch may not specify a new patch file, since that does not
1253
make sense.
1254

1255
   For example, to tell patch' to strip the first three slashes from
1256
the name of the first patch in the patch file and none from subsequent
1257
patches, and to use code.c' as the first input file, you can use:
1258

1259
     patch -p3 code.c + -p0 < patchfile
1260

1261
   The -S' or --skip' option ignores the current patch from the patch
1262
file, but continue looking for the next patch in the file.  Thus, to
1263
ignore the first and third patches in the patch file, you can use:
1264

1265
     patch -S + + -S + < patch file
1266

1267

1268
File: diff.info,  Node: patch Messages,  Prev: Multiple Patches,  Up: Merging with patch
1269

1270
Messages and Questions from patch'
1271
===================================
1272
 
1273
   patch' can produce a variety of messages, especially if it has
1274
trouble decoding its input.  In a few situations where it's not sure how
1275
to proceed, patch' normally prompts you for more information from the
1276
keyboard.  There are options to suppress printing non-fatal messages
1277
and stopping for keyboard input.
1278
 
1279
   The message Hmm...' indicates that patch' is reading text in the
1280
patch file, attempting to determine whether there is a patch in that
1281
text, and if so, what kind of patch it is.
1282
 
1283
   You can inhibit all terminal output from patch', unless an error
1284
occurs, by using the -s', --quiet', or --silent' option.
1285
 
1286
   There are two ways you can prevent patch' from asking you any
1287
questions.  The -f' or --force' option assumes that you know what you
1288
are doing.  It assumes the following:
1289

1290
   * skip patches that do not contain file names in their headers;
1291

1292
   * patch files even though they have the wrong version for the
1293
     Prereq:' line in the patch;
1294
 
1295
   * assume that patches are not reversed even if they look like they
1296
     are.
1297
 
1298
   The -t' or --batch' option is similar to -f', in that it
1299
suppresses questions, but it makes somewhat different assumptions:
1300

1301
   * skip patches that do not contain file names in their headers (the
1302
     same as -f');
1303
 
1304
   * skip patches for which the file has the wrong version for the
1305
     Prereq:' line in the patch;
1306

1307
   * assume that patches are reversed if they look like they are.
1308

1309
   patch' exits with a non-zero status if it creates any reject files.
1310
When applying a set of patches in a loop, you should check the exit
1311
status, so you don't apply a later patch to a partially patched file.
1312
 `