These instructions assume you have already cloned the perl git repository and have checked out the blead branch. The blead branch should be clean of extraneous files
$ cd ~/git $ git clone git://perl5.git.perl.org/perl.git $ git checkout blead $ git clean -dxf
The rest of the instructions assume your perl git repo is ~/git/perl
Start in the Module-Build source directory. This should *NOT* be the distdir -- you need the custom Module::Build subclass in inc/. Checkout a fresh copy from the release tag, e.g.:
$ git checkout 0.35_09
Next, run the "Build.PL" file and then the "patch_blead" action, giving the git repository directory as an argument:
$ perl Build.PL $ Build patch_blead ~/git/perl
After add-packages.pl finishes, ~/git/perl will be on the a new branch. Verify that and see what changes have been made:
$ git branch $ git status
Examine changes and determine if they should be staged or if an error occurred.
Next, modify the Module::Build section of Porting/Maintainers.pl to indicate the distribution file on which the patch is based. Note the version that is being replaced -- you'll need this later when creating the commit message. Update any other metadata necessary, then add this file to the index.
$ vim Porting/Maintainers.pl $ git add Porting/Maintainers.pl
Now that Maintainers.pl is updated, verify that blead matches CPAN with the core-cpan-diff tool:
$ perl Porting/core-cpan-diff -m http://cpan.dagolden.com/ Module::Build
If there are any differences, you can get a diff like this:
$ perl Porting/core-cpan-diff -d -r -m http://cpan.dagolden.com/ Module::Build
Note that the
patch_blead action will copy in files, but will not remove files in bleadperl that resulted from deletions or renames. Pay careful attention if
core-cpan-diff suggests this is the case. You'll need to "git rm" them by hand.
If any files were added or removed, be sure to edit Perl's MANIFEST file and stage it to be committed.
$ vim MANIFEST $ git add MANIFEST
If any files were added or removed from bin/, you'll need to make changes in utils/ in the Perl source.
Also, you need to add a note to pod/perldelta.pod in the "Updated Modules" section:
$ vim pod/perldelta.pod $ git add pod/perldelta.pod
Commit the branch and use the editor to create a commit message. The first line should be like this: "Update Module::Build to 0.33_02". (Use the correct version, of course.) The rest of the file should contain an excerpt from the Changes file since the last version in blead (i.e. the old version number in Porting/Maintainers.pl)
$ git commit ### In editor ### Update Module::Build to 0.33_02 0.33_02 - Mon Jun 15 12:23:55 EDT 2009 Bug-fixes: - Fixed tests for bleadperl 0.33_01 - Sat Jun 13 20:24:42 EDT 2009 [... rest of Changes ...]
Build and test Perl to confirm the changes don't break anything. This takes a while, but saves embarassment posting a buggy patch to perl5-porters. For example:
$ ./Configure -des -Dusedevel $ make && make test
Git can automatically create the patch email for perl5-porters:
$ git format-patch origin
This creates a single '0001...' email message file. If you have configured your perl git repository for sending email direct to perl5-porters, you can send it with this command:
$ git send-email 0001-Updating-Module-Build-to-0.33_02.patch
In your ~/git/perl repository, set the destination email:
$ git config sendemail.to firstname.lastname@example.org
You may need to set some configuration for your particular email/ISP setup. For example, to set global git config to send email via a gmail account:
$ git config --global sendemail.smtpserver smtp.gmail.com $ git config --global sendemail.smtpssl 1 $ git config --global sendemail.smtpuser YOURUSERNAME@gmail.com
With this setup, you will be prompted for your gmail password when you run 'git send-email'.
DANGER -- ADVANCED GIT HERE
If something breaks in the test or after committing you realize you need to tweak the branch, you can go ahead and make changes and commit them to the branch as normal.
Then, before regenerating the patch, squash them into a single patch using interactive rebase:
$ git rebase -i origin
In the editor, you will have the option to choose how commits are rebased. Leave the first entry as 'pick' and make all subsequent entries 'squash'. After you leave the editor, a new editor window will open and you will have the opportunity to combine all commit messages. Generally, you'll want to keep the initial Changes list and just delete the other commit messages.
Afterwards, regenerate and send the patch as described above.