Paul Hammant's Blog: Facebook Scaling Mercurial for Trunk-Based Development
Durham Goode, of Facebook runs through what they’ve done to Mercurial in 17 mins. All tech talks should be like this; Credit to the speaker and the editors at Twitter who packaged the presentation for us netizens:
There’s a number or pieces to the extensions they have made to Mercurial that are interesting, but the one sticks out (to me) is watchman and it is running the whole time watching your working-copy to see what you have modified from base, so that the ‘hg status’ command does not have to walk a directory tree in any respect. Back in the day CVS used to query the back-end server with a digest of every file one at a time, asking “has this changed”. Subversion’s big advance was to keep the baseline version in a co-located .svn folder so that it didn’t have to ask the backend at all. Perforce has a “have set” on the server in RAM for your checkout/working-copy, and knows already what you’ve changed, this the answer to the essential ‘status’ question is as quick as one second. Thus to me, this new facet of Mercurial is a spoonful of Perforce for the masses. I’m a fan of Perforce, and I wish they had a client-side daemon too that included a ‘watcher’ capability, for various duties, but most of all local-branching.
Mercurial becomes Subversion 2.0 ?
Here’s a strategy for the Subversion and Mercurial teams: Reverse Takeover. Mercurial absorbs Subversion development.
I’m the co-creator of Selenium 1 (the dominant industry web-testing technology), and we did a reverse takeover with Simon Stewart’s WebDriver (now Selenium 2 of course). Both ThoughtWorks’ creations. This was at the suggestion of Jason Huggins (the other co-creator of 1.0) in an email titled “Webdriver + Selenium = Fish&Chips (1 great combo?)” in mid 2007 to Simon. Pat Lightbody was a huge force in Selenium development, and had already been successful with a reverse takeover of Apache’s “Struts” repackaging WebWork as Struts 2. He was a huge fan the second he heard about the idea and and was pivotal in the WebDriver to Selenium2 transition. In the field of software development, reverse takeover allows a team to park some code that’s harder to maintain, and point at a new hotter future more easily. Maybe at that moment some of the earlier developers (like I did for Se) step back even more. Team dynamics change immediately. With Selenium2 we were happy for meritocracy backed by democracy backed by a benevolent dictator: Simon. We considered moving to Apache, but decided against because of the rules against of benevolent dictator.
For Mercurial becoming Subversion 2, here at the technical goals:
- Mercurial perfectly supports the command line syntax of Svn 1.x
- Backend repos gets rewritten to Subversion 2.0 (nee Mercurial 3.0) format as part of package upgrade
- Working Copy get rewritten to be Subversion 2.0 format (perhaps now a shallow or full clone) on first use
- Command line backwards compatibility is retained, albeit with new sub-commands too. Or maybe you get a mode of operation.
As subversion is already approved in most corporations, upgrades to “new versions of the same thing” are somewhat easier. In effect Mercurial gets an adoption boost, and the Selenium team get to point at something proudly for many years to come. Of course, for it to be a reverse take over, the Mercurial team would need to agree to let go of their name. The project would probably also have to stay at Apache (because of trademarks) and that has consequences for team dynamics: meritocracy backed by democracy only.
Job trends for each: