Wednesday, December 8, 2010

Heads-up: Umbraco sourcecode at CodePlex to switch to Mercurial

With help from the fantastic folks at CodePlex we're working to migrate our sourcecode repo from its current TFS/SVN-compatible storage over to Mercurial. The work should be complete within a week, so we wanted to give people some lead-time ahead of it happening.

Umbraco is an open-source project, but the majority of people never need to see or compile the code for themselves. We provide release builds on CodePlex and via Microsoft's WebPI - so if that's you, don't worry: this doesn't affect the way you work or how we'll issue releases. If you're involved with, or just plain interested in the source-code, read on!

Mercurial explained in three paragraphs

Mercurial (Hg if you're into your Periodic Table) is a DVCS or Distributed Version Control System. It's insanely fast for general usage, awesome, and of course trendy.

It differs from SVN or TFS in that it's not tied to a server for common operations. In fact, when you have a bunch of code on your machine managed by Mercurial you also have a hidden database of all the changeset history. All operations like committing changes, rolling back, etc. are done entirely locally in that database - so it's really quick, and works offline.

Once you're ready to share those commits with other team-members, Mercurial can 'push' those changesets to a shared location, and likewise you can 'pull' too. That's the major difference from our previous setup: with a DVCS like Mercurial, the 'master' copy of a repository isn't a controlling server, it's simply the place which your group agrees they are going to use as their 'meeting point'. In this case as ever, we're using CodePlex.

So, if you weren't already, now you're an expert!

Well, sadly the topic is far more involved than I can cover here. However, we're going to post a few helper articles on blogs and the Wiki. Hg has a lot of benefits for such a distributed team as ours, but like any change it has a learning curve - and if you're not familiar with Mercurial, we want to help out. Aaron has suggested a Mercurial 101 post, and a guide to submitting patches - and we'll also be posting a "Collaboration cheat-sheet" soon too.

But, as ever, please do share any questions or ideas you have either in the comments or on Our.

The Umbraco Hg repo - what to expect

Migrated history

  • The new Hg repo will contain a port of a lot of the history on Umbraco 4, but with some of the dud folders and branches removed.
  • It will also no longer contain the source-code for Umbraco version 3.x, since work on this ceased a long time ago.
  • Around roughly the same time as the migration, we'll also be importing our Umbraco 5 codebase into this same store Party smile

Branching conventions

What with JUNO (4.6) progressing, and the success of the 4.5 release, we've been aiming to steadily raise the bar for Umbraco's codebase over the past year. At the HQ and combined with the brilliant volunteers in the 4.x and 5.x core teams, we want to make the platform even easier to adopt and more satisfying on which to collaborate.

One juicy opportunity as part of this switch is to bring our branching and tagging strategy into line. Anyone who has browsed the repository in the past will know that it's been tricky to intuit your way around changesets. Here's how we'll be laying things out in the new repository:

  • Example Umbraco Hg repoMercurial Named Branches: Used for "lines of development", related to a product version or sprint sandbox. So we'll have named branches for 4.6.0, 5.0 etc as you can see in green here.
  • Mercurial Tags: Used as release or milestone markers. So in the 4.6.0 branch you might find a changeset tagged with "Release-4.6.0" and "Release-4.6.1" a month later. Seen in yellow here.

With this in mind, you are able to Update your working folder to a named branch at a particular 'release' tag to get straight to the right stuff. No more having to browse a combined folder structure to find your way around. It's not going to be the 100% ideal for retrospective changesets, but we've come as close to this as possible and will be sticking to it for 5.0 in the future.

Links to further information

As I said, we'll soon post some Umbraco-specific guides, but in the meantime, here's some handy resources:

Want to be updated on everything Umbraco?

Sign up for the Umbraco newsletter and get the latest news and special offers send directly to your inbox

Are you sure, that's your real e-mail?