One of the fun things about working on a version control system like Bazaar is that the userbase has a high level of proficiency in contributing back into the tool. So, how does one contribute code back into Bazaar?
Making the change
Any contributions should be developed against the current development version of Bazaar.
First, get a local copy of the development mainline (See Why make a local copy of bzr.dev?.)
$ bzr init-repo ~/bzr $ cd ~/bzr $ bzr branch lp:bzr bzr.dev
You may wish to consider using this copy of Bazaar. See Installation for details.
Now make your own branch:
$ bzr branch bzr.dev suitable_name_for_your_change
The last argument is the name for your branch, try to give it a descriptive name saying what you are changing. In this new branch you can study the code, make a fix or a new feature. Feel free to commit early and often (after all, it's your branch!).
Please see the Bazaar Developer Guide for hints and style suggestions. Documentation improvements are an easy place to get started giving back to the Bazaar project. The documentation is in the doc/ subdirectory of the Bazaar source tree.
When you are done, make sure that you commit your last set of changes as well! Once you are happy with your changes, ask for them to be merged, as described below.
Making a Merge Proposal
The Bazaar developers use Launchpad to further enable a truly distributed style of development. Anyone can propose a branch for merging into the Bazaar trunk. To do so, after you have committed your last set of changes, you need to push your branch to Launchpad. To do this, you will need a Launchpad account and user name, e.g. your_lp_username. You can push your branch to Launchpad directly from Bazaar:
$ bzr push lp:~your_lp_username/bzr/suitable_name_for_your_change
After you have pushed your branch, you will need to propose it for merging to the Bazaar trunk. Go to https://launchpad.net/your_lp_username/bzr/suitable_name_for_your_change and choose "Propose for merging into another branch". Select "bzr:trunk" to hand your changes off to the Bazaar developers for review and merging.
Why make a local copy of bzr.dev?
Making a local mirror of bzr.dev is not strictly necessary, but it means
You can use that copy of bzr.dev as your main bzr executable, and keep it up-to-date using bzr pull.
Certain operations are faster, and can be done when offline. For example:
- bzr bundle
- bzr diff -r ancestor:...
- bzr merge
When it's time to create your next branch, it's more convenient. When you have further contributions to make, you should do them in their own branch:
$ cd ~/bzr $ bzr branch bzr.dev additional_fixes $ cd additional_fixes #hack, hack, hack