GSoC/GCI Archive
Google Summer of Code 2009

Mercurial (a member of the Software Freedom Conservancy)

Web Page: http://www.selenic.com/mercurial/wiki/index.cgi/SummerOfCode

Mailing List: mercurial@selenic.com

Mercurial is a Distributed Version Control System (DVCS), and we would like to participate in 2009's Summer of Code. In recent years (notably since the Linux kernel project started looking for a new VCS), DVCSs have rapidly started to gain traction. For open source projects, especially, the use of a distributed system can be a great enabler, in that it's much easier to keep track of your own changes and publish them back to the community in a structured way. With centralized systems, you have a central repository that only a happy few have (write) access to, and people spend a lot of time mailing around diffs. With distributed systems, everyone has their own branch, and it's very easy to publish it on the web, compare the changes to those on some other branch or merge two branches back together. This has worked especially well since good DVCS hosting providers have come into being, like GitHub and Bitbucket. Written largely in Python (with the exceptions of a few performance-critical core modules), it is easy to develop for and allows for good code organization and clean abstractions. Moreover, it has been optimized from the start for good performance, using an append-only datastore, minimizing random disk access and smart uses of compression. Finally, it has extensive features for sharing changesets, over HTTP, SSH and in files over email and has an innovative extension (Mercurial Queues) to help building and organizing changesets into a thoroughly useful source history.

Projects

  • Towards a better inotify extension The inotify extension relies on Linux file system event notification features to provide a fast access to the directory state: registering the watched directories with inotify, it is able to keep track of the repository status without walking the repository itself. This extension greatly improves performance on large repositories. It is however still experimental, and lacks support for windows and Mac OS. My project is to improve inotify extension reliability, and to port it to Mac Os.