Drupal's CVS repository was pronounced dead this Thursday 24 February at 6:08 pm US Eastern Time. Cause of death was reported acute age combined with an inability to properly merge. CVS is survived by approximately 7000 Drupal projects and a new farm of Git repositories.
Drupal CVS was first opened on 15 January 2001, when Drupal version 3.0.0 was checked in by Drupal project lead Dries Buytaert. It grew quickly, as did the project, as it was at the time leading open source version control system available.
From an early age, CVS showed an aptitude for user contributions. Its parents impressed on it very early a belief in the principles of Free Software and the GNU General Public License, and from the earliest commits CVS required that all code that was submitted be licensed under the GPL. CVS quickly spawned two repositories, one for Drupal core and one for user contributed modules and themes.
Early on it also partnered with the Drupal Project Module band, which allowed CVS to reach out to thousands of new fans and contributors. More importantly, it gave CVS access to the Drupal.org website. It was a partnership that would prove critical to CVS's later success, as well as to that of Drupal itself.
CVS's fame increased as Drupal grew. Over the next several years an ever-increasing number of developers gravitated toward's Drupal, and its contributions repository continued to accept new projects. In the early years of its career, the CVS contributions repository, or "contrib" as it was known to its friends, had only a single access level. Users approved by the infrastructure team were able to create an unlimited number of projects, and could commit to any project. Surprisingly that worked well for many years thanks to the Drupal community's generally cooperative nature.
By late 2006, however, the community had grown to the point that such a free-wheeling approach was no longer sustainable. Rather than be swept away, CVS made an effort to change with the times. It partnered with Derek Wright, an up and coming young developer and musician, to implement per-repository access controls. Shortly afterward, Derek took over as head of the Project* band and he and CVS went on to implement official releases for modules. That allowed developers to tag and track stable releases of modules, track issues against releases, and do all of those things that "real" projects could do.
CVS was on top of its game. Teaming up with Nedjo Rogers and Earl Miles, the CVS/Derek team spun off the Update status module for Drupal 5, allowing site maintainers to be directly notified when new module versions were available. It was so successful that the module migrated into Drupal 6 core.
"CVS is awesome compared to the 'poor man's version control' I was doing at a place for a few months," noted Karoly "chx" Negyesi, a leading Drupal developer who spent a lot of time with CVS. "You took the file, you moved it to say foo.module.20110224-01 and then copied it to foo.module and edited that. CVS compared to this is space age."
Alas, it was not to last. While CVS was busy adding auxiliary features, a new wave of version control systems was entering the market. Subversion, started in 2000, promised the world a "Better CVS" and many other projects switched to it while Drupal remained with its tried-and-true friend. Then in the middle of the decade a new breed of version control systems started appearing: Distributed version control. Bazaar, born in 2004, Git, born in 2005, and Mercurial, also born in 2005, quickly took the software world by storm. Soon, calls for Drupal to switch to a more modern version control system grew louder.
It was a hard time to be CVS. Four different camps all wanted to see it replaced, but could not agree on with what. While its siblings at other projects were being replaced (KDE, for instance, migrated from CVS to Subversion several years ago) Drupal CVS hung onto its career by a thread.
That all ended in February of 2010. In a fit of boredom, Drupal 7 maintainer Angie "webchick" Byron decided that something needed to be done about CVS. "Testbot was offline that afternoon, so I needed to do something to keep myself occupied," Byron later said. "Sleep wasn't an option, naturally. So I figured, that CVS thing, it's not going anywhere but we are. I mean it was nice and all, but we'd kinda outgrown it. So I said 'Hey community, figure this out!' And they did, because Drupal is just cool like that."
The rapid discussion that followed quickly narrowed down the options to Git and Bazaar, the two leading open source DVCSes. Further research concluded that Git was the better supported option, with more resources available to help get users up to speed. With the support and funding of the Drupal Association, a Git Migration Team was formed to move CVS into retirement to make way for a newer version control system. The core team consisted of CVS's former partner Derek Wright, Angie Byron, Sam Boyer, Randy Fay, and Melissa Anderson, plus a cadre of volunteers who worked on various parts of the process.
For a year, CVS watched as its former colleagues worked to replace it. Unable to keep up with the rapidly increasing pace of Drupal development CVS slipped into depression, eventually signing up for a Twitter account to vent its frustrations. Early stumbles in the migration development process turned into breakneck progress as the team worked out the kinks, rewrote large swaths of the Version Control API and Project modules, and maintained a Git mirror to help users get used to the new version control system. A last minute plea for more testing pushed back the release date by a week, but that was to be the last reprieve.
On 24 February, the Drupal.org infrastructure team disabled the pserver process that allowed users to connect to repositories to commit new code and started the migration script they had worked so hard to create. Drupal CVS slipped into read-only mode, from which it is not expected to recover. Eyewitness John Albin Wilkins reported that its last words were "Why's it getting so dark in here? RCS? RCS, is that you?!?". Drupal.org itself shut down for 12 hours to mark its passing,
As long-time Drupal developers gathered in #Drupal-CVSSupport on IRC to pay their respects, the mood was somber yet hopeful. Randy even composed a ballad to note it's passing. In the final commit ever to Drupal CVS, number 505,090, Earl "merlinofchaos" Miles said simply "So long and thanks for all the commits." "CVS is an ugly, ratty but comfortable pair of pants," he continued. "Git is a new, stylish, stiff pair that needs to break in. Good, but I'll miss my pants."
"Drupal grew with CVS," Negyesi observed. "So it did serve us well so far. I have no bad feelings. It's limited, yes, that's why we are moving, but let's not forget how far we got."