For my work, sometimes I send contributions to Firefox.
Mozilla has existed for a long time, and this is definitely visible in the integration of the development tools they use.
However, some of them are kinda unique, particularly their SCM: Mercurial.
Today, open source is almost a git monoculture, and it is the versioning system I have used most of the time. Therefore, I got used to forks, PRs/MRs, and so on. But Hg does not have anything of this.
Theoretically, Mozilla also supports git, with a bridge called git-cinnabar. However, I always had trouble when trying to use it. Eventually, I learned a few tricks about Mercurial.
The feature I initially missed the most was branching… It took me an embarrassing amount of time to understand that I could just checkout (err, update -r
) existing revisions and add commits to create new heads.
Then, you can use hg heads
to see all the heads you have created.
You can also assign names like you would do with git branches with bookmarks, but I do not use them often.
Part of my confusion is also due to hg log
listing in chronological order (I believe, but I am still unsure). It starts from the most recent commit it knows and then shows commits that are not ancestors of the one checked out.
Showing the graph with the -G
option makes the output a bit clearer for me.
Anyway, Mozilla decided to move Firefox to git as well over one year ago, so all of this will not be needed sooner rather than later.