I'm a second year student of CS in Bucharest, Romania. I'd like to apply to mercurial for GSOC2009.
The idea that I would like to implement is an hg extension to allow mercurial to act as a client for bzr.
I roamed the wikis of both projects and looked a bit at the source code of similar projects (hgsubversion, bzr-git).
The extension will work by communicating with a .bzr tree that gets created by the hg bzr clone command. The extension will handle the translating of external related commands to bzr. I think only a subset of hg's commands are needed since most of the work (ex. merging) should be handled by hg itself. Here's a list:
- hg bzr clone - Copy the root directory, create a .bzr dir and transform the data in order to create a .hg repo and continue work in there with hg.
- hg bzr pull - Compare the state of the two repos (.hg and .bzr). Fetch the changes, transform and feed them to mercurial so that hg update can be handled from the inside.
- hg bzr push - Compare the state of the two repos and transform the latest hg commits into bzr commits, get those commited to the bzr repo and push from there.
AFAICS, most of the work in this project will be in translating the changesets from hg format to bzr format.