This guide will help you work on Mailman 2.1.x. For Mailman 3 see DEV/Home.
Quick start
You need bzr 2.0 or higher.
% bzr init-repo mailman % cd mailman % bzr branch lp:mailman
Developing Mailman using Bazaar and Launchpad
The Mailman source code was originally maintained using CVS, and only a few people had write access to the code. Later, development was moved to SourceForge and then the CVS repository was converted to Subversion. This proved to be a successful transition, as Subversion provided many benefits over CVS.
Now however, it's become clear that even Subversion has its limitations, and better options exist. Specifically, we are now using the distributed (or decentralized) revision control system (dvcs) called Bazaar. Bazaar has many beneficial features, both for the core developers and for casual, third party developers. These include:
- No write access to the central repository is necessary in order to develop, maintain, version control, and publish unofficial contributions.
- No connection to a repository server is necessary in order to commit changes.
- Much better branching and merging operations; no need to commit partially completed work.
- Much better merge tracking.
Ability to sign revisions with GPG.
Written in Python, with an easy plug-in architecture.
- Simple and intuitive commands.
What are the most immediate benefits? Tops on my list is the ability to commit changes and use all the benefits of version control without having to be connected to the server hosting the official branches. That means it's much easier for me to develop Mailman when, say I'm on a train. Once I'm back on the net, I can push the changes back to the hosted service and then everyone else can see the latest updates.
The other really cool thing is that unofficial developers can much more easily maintain their own branches, with easy synchronization and merging with the official branches. That means 1) the core developers are no longer a bottleneck for you to publish your cool Mailman hacks; 2) your branches are much easier for core developers to review and merge than using a bunch of diff files.
Using a dvcs such as Bazaar is an eye-opening change, so I hope you give it a try.
Bazaar
We have chosen Bazaar as the dvcs for Mailman. Bazaar is free software, released under the GPL.
You should be able to learn enough about Bazaar (often called bzr after its command name) to be productive in a few hours, if you are already familiar with other revision control systems. I encourage you to read up on the Bazaar web site. Also, Bazaar is available on all major platforms; with many having packages available already (certainly so for Ubuntu Linux and Mac OS X via MacPorts).
I highly recommend Bazaar version 2.0 or newer. Use bzr --version to see what version you've got.
Full disclosure: Barry's company, Canonical develops Bazaar. This means Barry has some inside avenues for addressing any issues we might have with Bazaar.
Launchpad
Launchpad is a distributed software development platform which can be used to host Bazaar branches (among other things). We will use Launchpad to host the official Mailman branches. It's important to note that you do not need to use Launchpad to host and publish your own branches! If you have a web server or sftp site, you can easily host your own branches. We use Launchpad because it's highly available and backed up, and it is well integrated with other services we may some day take advantage of.
Full disclosure: Barry's company Canonical also develops and maintains Launchpad, which means he has some inside avenues for addressing any issues we might have with the hosting service.
Accessing branches
You can get a local copy of one of the official branches by using these commands:
Branch | Description | Bazaar command |
2.1 | Stable release | bzr branch lp:mailman/2.1 |
3.0 | Active development branch | bzr branch lp:mailman |
Write access
Write access is generally not needed
Normally you don't need to be a member of mailman-coders or have write access to contribute. You publish your changes to an unofficial branch either on Launchpad or elsewhere and create a merge proposal to merge your branch.
In order to get write access to these branches, you must join the mailman-coders Launchpad team. So of course, this means you must first register on Launchpad. You can request membership in this team, but you must be approved by a team owner. This is how we control write access to the official branches, so only core Mailman developers will be approved.
Once you are a member of mailman-coders, you will create your own local branches:
% bzr branch lp:mailman
where <you> is your Launchpad user name, and <branch> has the same meaning as above. You can make all the local changes and commits you want, and then when you're ready to push your changes to the official branches, you will use bzr push from your branch directory.
You can read more about using team branches on Launchpad.
Publishing your unofficial branches
You can always publish your own unofficial branches any way you want. You can also use Launchpad's branch hosting service. Non-core developers can publish their own branches any place you want – it doesn't have to be on Launchpad. If you want to take advantage of Launchpad's code hosting facilities, you can register with Launchpad and then push your own branches to it using:
bzr push lp:~<you>/mailman/<whatever>
You may add your branch to the list of unofficial branches, but in order to get your changes accepted, you create a merge proposal for your branch.
Getting branch change notifications
Join the mailman-checkins@python.org mailing list; this list will get branch change notifications just like it did with Subversion commits.