[win32] merge change#985 from maintbranch
[p5sagit/p5-mst-13.2.git] / Porting / patching.pod
CommitLineData
55d729e4 1=head1 Name
2
3patching.pod - Appropriate format for patches to the perl source tree
4
5=head2re to get this document
6
7The latest version of this document is available from
8 http://www.tdrenterprises.com/perl/perlpatch.html
9
10=head2 How to contribute to this document
11
12You may mail corrections, additions, and suggestions to me
13at dgris@tdrenterprises.com but the preferred method would be
14to follow the instructions set forth in this document and
15submit a patch 8-).
16
17=head1 Description
18
19=head2 Why this document exists
20
21As an open source project Perl relies on patches and contributions from
22its users to continue functioning properly and to root out the inevitable
23bugs. But, some users are unsure as to the I<right> way to prepare a patch
24and end up submitting seriously malformed patches. This makes it very
25difficult for the current maintainer to integrate said patches into their
26distribution. This document sets out usage guidelines for patches in an
27attempt to make everybody's life easier.
28
29=head2 Common problems
30
31The most common problems appear to be patches being mangled by certain
32mailers (I won't name names, but most of these seem to be originating on
33boxes running a certain popular commercial operating system). Other problems
34include patches not rooted in the appropriate place in the directory structure,
35and patches not produced using standard utilities (such as diff).
36
37=head1 Proper Patch Guidelines
38
39=head2 How to prepare your patch
40
41=over 4
42
43=item Creating your patch
44
45First, back up the original files. This can't be stressed enough,
46back everything up _first_.
47
48Also, please create patches against a clean distribution of the perl source.
49This insures that everyone else can apply your patch without clobbering their
50source tree.
51
52=item diff
53
54While individual tastes vary (and are not the point here) patches should
55be created using either C<-u> or C<-c> arguments to diff. These produce,
56respectively, unified diffs (where the changed line appears immediately next
57to the original) and context diffs (where several lines surrounding the changes
58are included). See the manpage for diff for more details.
59
60Also, the preferred method for patching is -
61
62C<diff [C<-c> | C<-u>] E<lt>old-fileE<gt> E<lt>new-fileE<gt>>
63
64Note the order of files.
65
66Also, if your patch is to the core (rather than to a module) it
67is better to create it as a context diff as some machines have
68broken patch utilities that choke on unified diffs.
69
70=item Directories
71
72Patches should be generated from the source root directory, not from the
73directory that the patched file resides in. This insures that the maintainer
74patches the proper file and avoids name collisions (especially common when trying
75to apply patches to files that appear in both $src_root/ext/* and $src_root/lib/*).
76It is better to diff the file in $src_root/ext than the file in $src_root/lib.
77
78=item Filenames
79
80The most usual convention when submitting patches for a single file is to make
81your changes to a copy of the file with the same name as the original. Rename
82the original file in such a way that it is obvious what is being patched ($file~ or
83$file.old seem to be popular).
84
85If you are submitting patches that affect multiple files then you should backup
86the entire directory tree (to $source_root.old/ for example). This will allow
87C<diff C<-c> E<lt>old-dirE<gt> E<lt>new-dirE<gt>> to create all the patches
88at once.
89
90=back
91
92=head2 What to include in your patch
93
94=over 4
95
96=item Description of problem
97
98The first thing you should include is a description of the problem that
99the patch corrects. If it is a code patch (rather than a documentation
100patch) you should also include a small test case that illustrates the
101bug.
102
103=item Direction for application
104
105You should include instructions on how to properly apply your patch.
106These should include the files affected, any shell scripts or commands
107that need to be run before or after application of the patch, and
108the command line necessary for application.
109
110=item If you have a code patch
111
112If you are submitting a code patch there are several other things that
113you need to do.
114
115=over 4
116
117=item Comments, Comments, Comments
118
119Be sure to adequately comment your code. While commenting every
120line is unnecessary, anything that takes advantage of side effects of
121operators, that creates changes that will be felt outside of the
122function being patched, or that others may find confusing should
123be documented. If you are going to err, it is better to err on the
124side of adding too many comments than too few.
125
126=item Style
127
128Please follow the indentation style and nesting style in use in the
129block of code that you are patching.
130
131=item Testsuite
132
133Also please include an addition to the regression tests to properly
134exercise your patch.
135
136=back
137
138=item Test your patch
139
140Apply your patch to a clean distribution, compile, and run the
141regression test suite (you did remember to add one for your
142patch, didn't you).
143
144=back
145
146=head2 An example patch creation
147
148This should work for most patches-
149
150 cp MANIFEST MANIFEST.old
151 emacs MANIFEST
152 (make changes)
153 cd ..
154 diff -c perl5.008_42/MANIFEST.old perl5.008_42/MANIFEST > mypatch
155 (testing the patch:)
156 mv perl5.008_42/MANIFEST perl5.008_42/MANIFEST.new
157 cp perl5.008_42/MANIFEST.old perl5.008_42/MANIFEST
158 patch -p < mypatch
159 (should succeed)
160 diff perl5.008_42/MANIFEST perl5.008_42/MANIFEST.new
161 (should produce no output)
162
163=head2 Submitting your patch
164
165=over 4
166
167=item Mailers
168
169Please, please, please (get the point? 8-) don't use a mailer that
170word wraps your patch or that MIME encodes it. Both of these leave
171the patch essentially worthless to the maintainer.
172
173If you have no choice in mailers and no way to get your hands on a
174better one there is, of course, a perl solution. Just do this-
175
176 perl -ne 'print pack("u*",$_)' patch > patch.uue
177
178and post patch.uue with a note saying to unpack it using
179
180 perl -ne 'print unpack("u*",$_)' patch.uue > patch
181
182=item Subject lines for patches
183
184The subject line on your patch should read
185
186[PATCH]5.xxx_xx (Area) Description
187
188where the x's are replaced by the appropriate version number,
189area is a short keyword identifying what area of perl you are
190patching, and description is a very brief summary of the
191problem (don't forget this is an email header).
192
193Examples-
194
195[PATCH]5.004_04 (DOC) fix minor typos
196
197[PATCH]5.004_99 (CORE) New warning for foo() when frobbing
198
199[PATCH]5.005_42 (CONFIG) Added support for fribnatz 1.5
200
201=item Where to send your patch
202
203If your patch is for the perl core it should be sent perlbug@perl.org.
204If it is a patch to a module that you downloaded from CPAN you should
205submit your patch to that module's author.
206
207=back
208
209=head2 Applying a patch
210
211=over 4
212
213=item General notes on applying patches
214
215The following are some general notes on applying a patch
216to your perl distribution.
217
218=over 4
219
220=item patch C<-p>
221
222It is generally easier to apply patches with the C<-p> argument to
223patch. This helps reconcile differing paths between the machine the
224patch was created on and the machine on which it is being applied.
225
226=item Cut and paste
227
228_Never_ cut and paste a patch into your editor. This usually clobbers
229the tabs and confuses patch.
230
231=item Hand editing patches
232
233Avoid hand editing patches as this frequently screws up the whitespace
234in the patch and confuses the patch program.
235
236=back
237
238=back
239
240=head2 Final notes
241
242If you follow these guidelines it will make everybody's life a little
243easier. You'll have the satisfaction of having contributed to perl,
244others will have an easy time using your work, and it should be easier
245for the maintainers to coordinate the occasionally large numbers of
246patches received.
247
248Also, just because you're not a brilliant coder doesn't mean that you can't
249contribute. As valuable as code patches are there is always a need for better
250documentation (especially considering the general level of joy that most
251programmers feel when forced to sit down and write docs). If all you do
252is patch the documentation you have still contributed more than the person
253who sent in an amazing new feature that noone can use because noone understands
254the code (what I'm getting at is that documentation is both the hardest part to
255do (because everyone hates doing it) and the most valuable).
256
257Mostly, when contributing patches, imagine that it is B<you> receiving hundreds
258of patches and that it is B<your> responsibility to integrate them into the source.
259Obviously you'd want the patches to be as easy to apply as possible. Keep that in
260mind. 8-)
261
262=head1 Last Modified
263
264Last modified 1 May 1998 by Daniel Grisinger <dgris@tdrenterprises.com>
265
266=head1 Author and Copyright Information
267
268Copyright (c) 1998 Daniel Grisinger
269
270Adapted from a posting to perl5-porters by Tim Bunce (Tim.Bunce@ig.co.uk).
271
272I'd like to thank the perl5-porters for their suggestions.
273
274
275