Anyone who’s worked with a sufficiently large project eventually ends up establishing vendor branches to track and merge upstream releases. Maintaining these branches is time-consuming, redundant work because everyone who needs a vendor branch of a project needs approximately the same thing.

With centralized version control tools, you have two choices:

  • Apply patches integrating the changes from upstream releases. This approach avoids the need to set up vendor branches, but it will not allow three-way merges, increasing the developers time spent resolving conflicts. Patches also cannot represent many types of changes, requiring more manual work to upgrade.
  • Download, extract, and commit each upstream release to your project’s own vendor branch. This is also time consuming and requires regular work checking for upstream releases. It does, however, allow three-way merges and applying all types of changes.

Distributed version control systems, like Bazaar, allow you to branch your project from a remote “vendor” branch, providing all the advantages of a local vendor branch with none of the headaches. Moreover, tools like Bazaar track the last merges from remote vendor branches and automatically apply changes made since your last merge.

For Drupal, Four Kitchens maintains vendor branches of stable Drupal 5 and 6 releases:

  • bzr://vcs.fourkitchens.com/drupal/5
  • bzr://vcs.fourkitchens.com/drupal/6

We also maintain vendor branches for Pressflow:

  • bzr://vcs.fourkitchens.com/pressflow/5
  • bzr://vcs.fourkitchens.com/pressflow/6

Branching from these allows you to upgrade your project with a simple “bzr merge [vendor-branch-url]”. The popular vendor branch URLs are shown above.