Annotation of 43BSD/contrib/patch/patch.n, revision 1.1

1.1     ! root        1: ''' $Header: patch.man,v 1.3 85/03/26 15:11:06 lwall Exp $
        !             2: ''' 
        !             3: ''' $Log:      patch.man,v $
        !             4: ''' Revision 1.3  85/03/26  15:11:06  lwall
        !             5: ''' Frozen.
        !             6: ''' 
        !             7: ''' Revision 1.2.1.4  85/03/12  16:14:27  lwall
        !             8: ''' Documented -p.
        !             9: ''' 
        !            10: ''' Revision 1.2.1.3  85/03/12  16:09:41  lwall
        !            11: ''' Documented -D.
        !            12: ''' 
        !            13: ''' Revision 1.2.1.2  84/12/05  11:06:55  lwall
        !            14: ''' Added -l switch, and noted bistability bug.
        !            15: ''' 
        !            16: ''' Revision 1.2.1.1  84/12/04  17:23:39  lwall
        !            17: ''' Branch for sdcrdcf changes.
        !            18: ''' 
        !            19: ''' Revision 1.2  84/12/04  17:22:02  lwall
        !            20: ''' Baseline version.
        !            21: ''' 
        !            22: .de Sh
        !            23: .br
        !            24: .ne 5
        !            25: .PP
        !            26: \fB\\$1\fR
        !            27: .PP
        !            28: ..
        !            29: .de Sp
        !            30: .if t .sp .5v
        !            31: .if n .sp
        !            32: ..
        !            33: '''
        !            34: '''     Set up \*(-- to give an unbreakable dash;
        !            35: '''     string Tr holds user defined translation string.
        !            36: '''     Bell System Logo is used as a dummy character.
        !            37: '''
        !            38: .ie n \{\
        !            39: .tr \(bs-\*(Tr
        !            40: .ds -- \(bs-
        !            41: .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
        !            42: .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
        !            43: .ds L" ""
        !            44: .ds R" ""
        !            45: .ds L' '
        !            46: .ds R' '
        !            47: 'br\}
        !            48: .el\{\
        !            49: .ds -- \(em\|
        !            50: .tr \*(Tr
        !            51: .ds L" ``
        !            52: .ds R" ''
        !            53: .ds L' `
        !            54: .ds R' '
        !            55: 'br\}
        !            56: .TH PATCH 1 "May 10, 1986" "Systems Development Corp"
        !            57: .SH NAME
        !            58: patch \- a program for applying a diff file to an original
        !            59: .SH SYNOPSIS
        !            60: .B patch
        !            61: [options] orig diff [+ [options] orig]
        !            62: .SH DESCRIPTION
        !            63: .I Patch
        !            64: will take a patch file containing any of the three forms of difference
        !            65: listing produced by the
        !            66: .I diff
        !            67: program and apply those differences to an original file, producing a patched
        !            68: version.
        !            69: By default, the patched version is put in place of the original, with
        !            70: the original file backed up to the same name with the
        !            71: extension \*(L".orig\*(R", or as specified by the
        !            72: .B -b
        !            73: switch.
        !            74: You may also specify where you want the output to go with a
        !            75: .B -o
        !            76: switch.
        !            77: If
        !            78: .I diff
        !            79: is omitted, or is a hyphen, the patch will be read from standard input.
        !            80: .PP
        !            81: Upon startup, patch will attempt to determine the type of the diff file,
        !            82: unless over-ruled by a
        !            83: .BR -c ,
        !            84: .BR -e ,
        !            85: or
        !            86: .B -n
        !            87: switch.
        !            88: Context diffs and normal diffs are applied by the
        !            89: .I patch
        !            90: program itself, while ed diffs are simply fed to the
        !            91: .I ed
        !            92: editor via a pipe.
        !            93: .PP
        !            94: .I Patch
        !            95: will try to skip any leading garbage, apply the diff,
        !            96: and then skip any trailing garbage.
        !            97: Thus you could feed an article or message containing a context or normal
        !            98: diff to
        !            99: .IR patch ,
        !           100: and it should work.
        !           101: If the entire diff is indented by a consistent amount,
        !           102: this will be taken into account.
        !           103: .PP
        !           104: With context diffs, and to a lesser extent with normal diffs,
        !           105: .I patch
        !           106: can detect when the line numbers mentioned in the patch are incorrect,
        !           107: and will attempt to find the correct place to apply each hunk of the patch.
        !           108: As a first guess, it takes the line number mentioned for the hunk, plus or
        !           109: minus any offset used in applying the previous hunk.
        !           110: If that is not the correct place,
        !           111: .I patch
        !           112: will scan both forwards and backwards for a set of lines matching the context
        !           113: given in the hunk.
        !           114: All lines of the context must match.
        !           115: If
        !           116: .I patch
        !           117: cannot find a place to install that hunk of the patch, it will put the
        !           118: hunk out to a reject file, which normally is the name of the output file
        !           119: plus \*(L".rej\*(R".
        !           120: (Note that the rejected hunk will come out in context diff form whether the
        !           121: input patch was a context diff or a normal diff.
        !           122: If the input was a normal diff, many of the contexts will simply be null.)
        !           123: .PP
        !           124: If no original file is specified on the command line,
        !           125: .I patch
        !           126: will try to figure out from the leading garbage what the name of the file
        !           127: to edit is.
        !           128: In the header of a context diff, the filename is found from lines beginning
        !           129: with \*(L"***\*(R" or \*(L"---\*(R", with the shortest name of an existing
        !           130: file winning.
        !           131: Only context diffs have lines like that, but if there is an \*(L"Index:\*(R"
        !           132: line in the leading garbage,
        !           133: .I patch
        !           134: will try to use the filename from that line.
        !           135: The context diff header takes precedence over an Index line.
        !           136: If no filename can be intuited from the leading garbage, you will be asked
        !           137: for the name of the file to patch.
        !           138: .PP
        !           139: (If the original file cannot be found, but a suitable SCCS or RCS file is
        !           140: handy,
        !           141: .I patch
        !           142: will attempt to get or check out the file.)
        !           143: .PP
        !           144: Additionally, if the leading garbage contains a \*(L"Prereq: \*(R" line,
        !           145: .I patch
        !           146: will take the first word from the prerequisites line (normally a version
        !           147: number) and check the input file to see if that word can be found.
        !           148: If not,
        !           149: .I patch
        !           150: will ask for confirmation before proceeding.
        !           151: .PP
        !           152: The upshot of all this is that you should be able to say, while in a news
        !           153: interface, the following:
        !           154: .Sp
        !           155:        | patch -d /usr/src/local/blurfl
        !           156: .Sp
        !           157: and patch a file in the blurfl directory directly from the article containing
        !           158: the patch.
        !           159: .PP
        !           160: If the patch file contains more than one patch,
        !           161: .I patch
        !           162: will try to apply each of them as if they came from separate patch files.
        !           163: This means, among other things, that it is assumed that separate patches
        !           164: will apply to separate files, and that the garbage before each patch will
        !           165: be examined for interesting things such as filenames and revision level, as
        !           166: mentioned previously.
        !           167: You can give switches (and another original file name) for the second and
        !           168: subsequent patches by separating the corresponding argument lists
        !           169: by a \*(L'+\*(R'.
        !           170: The argument list for a second or subsequent patch may not specify a new
        !           171: patch file, however.
        !           172: .PP
        !           173: .I Patch
        !           174: recognizes the following switches:
        !           175: .TP 5
        !           176: .B \-b
        !           177: causes the next argument to be interpreted as the backup extension, to be
        !           178: used in place of \*(L".orig\*(R".
        !           179: .TP 5
        !           180: .B \-c
        !           181: forces
        !           182: .I patch
        !           183: to interpret the patch file as a context diff.
        !           184: .TP 5
        !           185: .B \-d
        !           186: causes
        !           187: .I patch
        !           188: to interpret the next argument as a directory, and cd to it before doing
        !           189: anything else.
        !           190: .TP 5
        !           191: .B \-D
        !           192: causes
        !           193: .I patch
        !           194: to use the "#ifdef...#endif" construct to mark changes.
        !           195: The argument following will be used as the differentiating symbol.
        !           196: Note that, unlike the C compiler, there must be a space between the
        !           197: .B \-D
        !           198: and the argument.
        !           199: .TP 5
        !           200: .B \-e
        !           201: forces
        !           202: .I patch
        !           203: to interpret the patch file as an ed script.
        !           204: .TP 5
        !           205: .B \-l
        !           206: causes the pattern matching to be done loosely, in case the tabs and
        !           207: spaces have been munged in you input file.
        !           208: Any sequence of whitespace in the pattern line will match any sequence
        !           209: in the input file.
        !           210: Normal characters must still match exactly.
        !           211: Each line of the context must still match a line in the input file.
        !           212: .TP 5
        !           213: .B \-n
        !           214: forces
        !           215: .I patch
        !           216: to interpret the patch file as a normal diff.
        !           217: .TP 5
        !           218: .B \-N
        !           219: forces patch to not try and reverse the diffs if it thinks that they may have
        !           220: been swapped.  See the
        !           221: .B \-R
        !           222: option below.
        !           223: .TP 5
        !           224: .B \-o
        !           225: causes the next argument to be interpreted as the output file name.
        !           226: .TP 5
        !           227: .B \-p
        !           228: causes leading pathnames to be kept.
        !           229: If the diff is of the file \*(lqb/a.c\*(rq, patch will look for \*(lqa.c\*(rq
        !           230: in the \*(lqb\*(rq directory, instead of the current directory.
        !           231: This probably won't work if the diff has rooted pathnames.
        !           232: .TP 5
        !           233: .B \-r
        !           234: causes the next argument to be interpreted as the reject file name.
        !           235: .TP 5
        !           236: .B \-R
        !           237: tells
        !           238: .I patch
        !           239: that this patch was created with the old and new files swapped.
        !           240: (Yes, I'm afraid that does happen occasionally, human nature being what it
        !           241: is.)
        !           242: .I Patch
        !           243: will attempt to swap each hunk around before applying it.
        !           244: Rejects will come out in the swapped format.
        !           245: The
        !           246: .B \-R
        !           247: switch will not work with ed diff scripts because there is too little
        !           248: information to reconstruct the reverse operation.
        !           249: .Sp
        !           250: If the first hunk of a patch fails,
        !           251: .I patch
        !           252: will reverse the hunk to see if it can be applied that way unless the
        !           253: .B \-N
        !           254: option is supplied.
        !           255: If it can, the
        !           256: .B \-R
        !           257: switch will be set automatically.
        !           258: If it can't, the patch will continue to be applied normally.
        !           259: (Note: this method cannot detect a reversed patch if it is a normal diff
        !           260: and if the first command is an append (i.e. it should have been a delete)
        !           261: since appends always succeed.
        !           262: Luckily, most patches add lines rather than delete them, so most reversed
        !           263: normal diffs will begin with a delete, which will fail, triggering the
        !           264: heuristic.)
        !           265: .TP 5
        !           266: .B \-s
        !           267: makes
        !           268: .I patch
        !           269: do its work silently, unless an error occurs.
        !           270: .TP 5
        !           271: .B \-x<number>
        !           272: sets internal debugging flags, and is of interest only to
        !           273: .I patch
        !           274: patchers.
        !           275: .SH ENVIRONMENT
        !           276: No environment variables are used by
        !           277: .IR patch .
        !           278: .SH FILES
        !           279: /tmp/patch*
        !           280: .SH SEE ALSO
        !           281: diff(1)
        !           282: .SH DIAGNOSTICS
        !           283: Too many to list here, but generally indicative that
        !           284: .I patch
        !           285: couldn't parse your patch file.
        !           286: .PP
        !           287: The message \*(L"Hmm...\*(R" indicates that there is unprocessed text in
        !           288: the patch file and that
        !           289: .I patch
        !           290: is attempting to intuit whether there is a patch in that text and, if so,
        !           291: what kind of patch it is.
        !           292: .SH CAVEATS
        !           293: .I Patch
        !           294: cannot tell if the line numbers are off in an ed script, and can only detect
        !           295: bad line numbers in a normal diff when it finds a \*(L"change\*(R" command.
        !           296: Until a suitable interactive interface is added, you should probably do
        !           297: a context diff in these cases to see if the changes made sense.
        !           298: Of course, compiling without errors is a pretty good indication that it
        !           299: worked, but not always.
        !           300: .PP
        !           301: .I Patch
        !           302: usually produces the correct results, even when it has to do a lot of
        !           303: guessing.
        !           304: However, the results are guaranteed to be correct only when the patch is
        !           305: applied to exactly the same version of the file that the patch was
        !           306: generated from.
        !           307: .SH BUGS
        !           308: Could be smarter about partial matches, excessively \&deviant offsets and
        !           309: swapped code, but that would take an extra pass.
        !           310: .PP
        !           311: If code has been duplicated (for instance with #ifdef OLDCODE ... #else ...
        !           312: #endif),
        !           313: .I patch
        !           314: is incapable of patching both versions, and, if it works at all, will likely
        !           315: patch the wrong one, and tell you it succeeded to boot.
        !           316: .PP
        !           317: If you apply a patch you've already applied,
        !           318: .I patch
        !           319: will think it is a reversed patch, and un-apply the patch.
        !           320: This could be construed as a feature.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.