Why
Ubuntu is released every six months, and every single package in Ubuntu has a Bazaar branch. When we open up a new release, we want to have Bazaar branches for every package in that release.
Constraints
- Must NOT copy existing branch data -- disk space is limited.
- Must make new Launchpad branches for every source package in the old release.
- New branches must be the official branches for the new release.
- New branches must not be stacked, since they will become the new default stacked-on branches.
- All data from old branches must be preserved.
- Old branch unique names must not change.
- Roughly 16,000 branches to be created.
- Approximately 300GB of branch data.
- Must take less than a day, ideally less than an hour.
Process
Prerequisites
- New distroseries to be created
- Import script turned off
Algorithm
For all official RELEASE pocket branches in the old DistroSeries:
- Create a new Bazaar branch stacked on the old branch.
- Package branch with same owner, distribution, sourcepackage as the old branch.
- distroseries is the new distroseries
name is the name of the distroseries, preserving the current schema for the imported package branches.
Swap the .bzr directories for the old branch and new branch using filesystem operations.
- Manually change the stacked-on URL of the newly-created branch to point to the full unique name of the new database branch.
- Repeat previous two steps for mirrored version of branch.
- Link the new branch to the RELEASE pocket of the new distroseries.
Post-conditions
- A new branch will exist, not stacked on anything, officially linked to the RELEASE pocket of the new series.
A bzr log of the new branch will be exactly the same as for the old branch.
- The old branch will be stacked on the new branch.
When done
- Re-activate the import script.
Testing
- Smoke testing on developer machines using launchpad.dev.
- Load testing by borrowing dogfood or staging and simulating a release of Ubuntu
End-user testing
To catch unexpected errors, we need to get actual users working on a newly released source package branch in anger.
Here's what we can do:
- Find a source package branch that's being actively used by willing beta testers.
- Move the karmic branch data away to a safe place.
- Delete the karmic branches in the database
Run the 'branch-ubuntu' process above, but only for that package and for jaunty->karmic rather than karmic->(karmic+1)
- Pull the previously shelved karmic branch data into the newly created branch
- Get people to start using this.
Notes
- This process should also work for Debian branches, despite the name of this wiki page.
- We intend to run this as a script in the Launchpad.net data centre.
Questions
- Would this be useful as a per-branch feature?
- Does this have upstream applications?
- How will this affect our backup process?