It’s been a month and a half since I started working on the Mercurial project as part of the Google Summer of Code program. Mercurial is a free, distributed source control tool written in Python that efficiently handles projects of any size and offers an easy and intuitive interface while the Google Summer of Code is a global program that offers student developers stipends to write code for various open source software projects.

My project’s objective is to port Mercurial to py3k1, as described in my proposal. Working with the mercurial developers is being a wonderful experience. The most interesting part of the development process is the code review. Every time you want to contribute a change, you submit a patch to the mailing list and a handful of people will start contributing ideas to improve your code so it can, eventually (after some iterations - if it’s not a braindead idea :) ), be pushed to the main repository. It feels a bit frustrating when those picky people start to complain about your code, but the result tends to be much better than the first versions.

A peculiar aspect of this first half of coding is that I spent more time coding in C than in Python. As some core mercurial modules are implemented in C, I decided that porting them before all others would pay off in the future. Thus, I spent some time adapting the code to build both in Python 2.x and Python 3.x. That part is building fine and working well as far as I am concerned1. Now I’m focusing on implementing some custom fixers for 2to3 to get the python code running in py3k. More about that later…

Being a community-oriented project, we are holding public IRC meetings every Tuesday at 2pm (BRT) at #mercurial in freenode, in case you wanna join us. I am also participating in the mercurial devel and user (not so much in this one) lists.


  1. A Python version that breaks backwards-compatibility with Python 2.x. 

  2. The mercurial tests tend to explore the code paths by testing the program as a whole, instead of testing each module/class individually. Consequently, I can only test my code fully when I get the core mercurial running. 

Related content