Contributing

Repositories and Relevant Files

Most code for hg.mozilla.org and related services can be found in the version-control-tools repo. In this repo, the following directories are relevant:

ansible/roles/hg-ssh
Ansible role for the hg.mozilla.org SSH/master servers.
ansible/roles/hg-ssh-server
Shared Ansible role for Mercurial SSH servers.
ansible/roles/hg-web
Ansible role for the hg.mozilla.org HTTP/mirror servers.
docs/hgmo
Sphinx documentation related to hg.mozilla.org (you are reading this now).
hgext
Various Mercurial extensions. Many of which are used on hg.mozilla.org.
hgext/hgmo
Contains hodgepodge of Mercurial customizations specific to hg.mozilla.org.
hghooks
Mercurial hooks that run (primarily) on hg.mozilla.org.
hgserver
Mercurial code and tests specific to Mercurial servers.
hgtemplates
Mercurial templates. Contains both upstream templates and Mozilla customizations.
hgtemplates/gitweb_mozilla
Fork of the gitweb Mercurial web style with Mozilla customizations. If you want to hack the theming on hg.mozilla.org, this is what you modify.
hgwsgi
WSGI and Mercurial config files for repos on hg.mozilla.org.
pylib/mozautomation
Python package containing utility code for things like defining names and URLs of common repos, parsing commit messages, etc.
pylib/mozhg
Python package containing shared Mercurial code (code using Mercurial APIs and therefore covered by the GPL).
pylib/vcsreplicator
Code for managing replication of data from Mercurial master server to read-only mirrors.

Terraform code for managing associated AWS infrastructure can be found in the devservices-aws repo under the hgmo directory.

Hacking the Theming

The version-control-tools repository contains all the files necessary to run a local hgweb server that behaves close enough to the actual server to facilitate hacking on the theming (the visual layout of the site).

To run a local server, run the following:

$ hg --config extensions.hgmo=/path/to/vct/hgext/hgmo serve --hgmo

Among other things, the hgmo extension adds a flag to hg serve that activates hg.mozilla.org mode. This will activate some other extensions and configure the style settings to run out of the version-control-tools repository.

Styles for Mercurial are checked into the hgtemplates/ directory in version-control-tools. The default style for Mercurial is paper. However, hg.mozilla.org runs the gitweb_mozilla theme. This theme is based off of the gitweb theme.

The hgtemplates/gitweb_mozilla/map file is the main file mapping template names to their values. Some templates are large and split into their own .tmpl file.

Hint

To figure out what templates are used for various URLs, read hg help hgweb.

Hint

If you modify a template file, changes should be visible on next page load: no server restart is necessary. However, some pages are cached, so you may need to force reload the page in your browser via shift-reload or similar.