If you have modified a package to expand its functionality or to fix a
bug, you should contribute your changes back to the community (some
licenses force you to do so, and it is generally considered immoral not to).
Before creating the patch, you must first obtain the latest sources of the
package you wish to patch from CVS by running the commands (the package
in this example is Foo_Bar):
cvs -d:pserver:email@example.com:/repository login
password is phpfi
cvs -d:pserver:firstname.lastname@example.org:/repository co pear/Foo_Bar
Now that you have the latest sources, you can edit the relevant file(s).
Make sure that your patch is fully compatible with the PEAR coding
After you have finished adding/changing the code, TEST it: We will not
accept code that hasn't been carefully tested.
When you are absolutely sure the new code doesn't introduce bugs, create a
unified diff by running:
cvs diff -u >Foo_Bar.diff
The resulting .diff file contains your patch. This diff makes it easy
for us to see what has been changed.
Next step is to submit the patch. Send a mail to email@example.com and
Cc the maintainer(s) of the package. The subject of the mail should be
prefixed with '[Patch]' to make it clear you are submitting a patch. Also
include a verbose explanation of what the patch does.
Don't forget to attach the .diff file to the mail. The maintainers of
the package are usually listed in the header of each source file. Apart
from that their email adresses are available on the package information
page on http://pear.php.net/.
If you are using Outlook or Outlook Express, please change the file
extension of the diff file to .txt, because Outlook's MIME-Type
detection depends on the file extension and attachments with a
MIME-Type not equal to text/plain will be rejected
by our mailinglist software.
If your patch does break backwards compatibility, the chances are fairly
good that the maintainers won't be happy about it. Thus you should always
try to fix a bug in a way that does not seriously change the public API.
But if there is absolutely no way to keep backwards compatibility and/or
if your patch contains a groundbraking improvement, even API changes are