This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Stop system select from croaking on read-only COW ""
[perl5.git] / Porting / how_to_write_a_perldelta.pod
index a6e9a29..a7bfc4a 100644 (file)
@@ -1,14 +1,18 @@
-=head1 How to write a perldelta
+=head1 NAME
+
+how_to_write_a_perldelta - How to write a perldelta
+
+=head2 Description
 
 This is intended as a guide for how to write a perldelta. There has never
 been a formal specification - the working rule is "fake up a document that
 looks something close to the existing perldeltas". So if it's unclear how
-do to do something, see if it's been done before, and if the approach works
+to do something, see if it's been done before, and if the approach works
 there, steal it.
 
 =head2 Template
 
-Note there is a file F<Porting/perldelta_template> which contains a
+Note there is a file F<Porting/perldelta_template.pod> which contains a
 skeleton version of a perldelta.pod file, which should normally be copied
 in at the start of a new release.
 
@@ -37,8 +41,13 @@ Be consistent in how bugs are referenced. One style is
 
 =item rt.perl.org
 
-C<RT #43010> inline, but enclose in square brackets after a sentence.
-C<[RT #43010]>
+C<perl #43010> inline, but enclose in square brackets after a sentence.
+C<[perl #43010]>.  This mirrors how rt.perl.org subject lines appear.
+
+=item rt.cpan.org
+
+C<rt.cpan.org #43010> inline, but enclose in square brackets after a sentence.
+C<[rt.cpan.org #43010]>.  This mirrors how rt.cpan.org subject lines appear.
 
 =item ActiveState
 
@@ -77,13 +86,13 @@ Follows this formula:
 
 For a release on a stable branch, follows this formula:
 
-    This document describes differences between the 5.10.3 release and
-    the 5.10.4 release.
+    This document describes differences between the 5.10.3 release
+    and the 5.10.4 release.
 
 For the start of a new stable branch, follows this formula:
 
-    This document describes differences between the 5.12.0 release and
-    the 5.10.0 release.
+    This document describes differences between the 5.12.0 release
+    and the 5.10.0 release.
 
 Clearly this sets the scope of which changes are to be summarised in the rest
 of the document.
@@ -97,8 +106,8 @@ notice.
 
 For a release on a stable branch, this section aspires to be
 
-    There are no changes intentionally incompatible with 5.10.3. If any exist,
-    they are bugs and reports are welcome.
+    There are no changes intentionally incompatible with 5.10.3.
+    If any exist, they are bugs and reports are welcome.
 
 =item Core Enhancements
 
@@ -129,23 +138,28 @@ collate changes to F<ext/> and F<lib/> by module, and then summarise all
 changes to a module as a group. This can be done by partitioning directories
 within F<ext/> and F<lib/> to a number of people.
 
-B<FIXME> - this could be automated, although the two below would be easier
-to start with.
+B<FIXME> - this could be automated better
+
+If Module::CoreList has been updated, then F<Porting/corelist-perldelta.pl>
+will automatically print out several sections if relevant that can be
+pasted into F<perldelta>:
 
-Start with F<Porting/cmpVERSION.pl>
+    * New Modules and Pragmata
+    * Pragmata Changes
+    * Updated Modules
+    * Removed Modules and Pragmata
 
-Augment it with a flag, so that instead of reporting which modules are
-different but have the same version, report on modules which I<are> different.
-Grab the old version from the exploded tarball, and the new version from
-the git checkout, and output the line
+Each section will have stub entries following a template like this:
 
-    =item *
+    =item C<less>
 
-    C<less> upgraded from version 0.01 to 0.02
+    Upgraded from version 0.01 to 0.02
 
-That's a start.
+It does not include modules listed in F<Porting/Maintainers.pl> under
+C<_PERLLIB>, but it's a start.  Where relevant, a summary of changes can be
+added by hand.
 
-Once that's done, a more adventurous enhancement is to automate grabbing
+A more adventurous enhancement would be to automate grabbing
 the changelogs for dual lived modules. For each of them, grab the relevant
 changes files from CPAN for the old and new versions, and if the old one is
 a strict subset of the new one, splice the extra lines right into the output,
@@ -208,7 +222,7 @@ For each file only in the newer F<MANIFEST>
 
 =over
 
-=item 1 
+=item 1
 
 Use F<git> to determine its Author
 
@@ -266,47 +280,9 @@ Changes which create B<new> files in F<t/> go here. Changes to existing files
 in F<t/> aren't worth summarising, although the bugs that they represent
 may be.
 
-B<FIXME> - this could be automated, at least as far as generating a first
-draft.
-
-=over
-
-=item 1
-
-Start with a clean exploded tarball of the previous release, and a clean
-checkout of the branch in question
-
-=item 2
-
-Take the F<MANIFEST> file of each
-
-=item 3
-
-Search for lines matching C<m!t/.*\.t!> (and I think also for new tests in
-F<ext/DynaLoader>)
+Autogenerate this section by running something like this:
 
-=item 4
-
-Diff them
-
-=item 5
-
-For each file only in the newer F<MANIFEST>
-
-=over
-
-=item 1
-
-Grab the description line from F<MANIFEST>
-
-=item 2
-
-Write out an =item section with the filename, and description, just like
-L<http://perl5.git.perl.org/perl.git/blob/maint-5.10:/pod/perl5101delta.pod>
-
-=back
-
-=back
+ # perl newtests-perldelta.pl v5.11.1 HEAD
 
 =item Known Problems
 
@@ -331,15 +307,9 @@ here.
 
 =item Acknowledgements
 
-The list of people to thank goes here.
-
-You can find the list of committers and authors by:
-
-  % git log v5.11.1..HEAD |grep Author | cut -d : -f 2 | cut -d \< -f 1 | sort | uniq
-
-And how many files where changed by:
+Generate this with:
 
-  % git diff v5.11.1..HEAD | diffstat
+  perl Porting/acknowledgements.pl v5.15.0..HEAD
 
 =item Reporting Bugs