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 py3k[^1], 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 concerned[^1]. 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.