Note:
This page is primarily intended for developers of Mercurial.
Packaging
Guidelines for making Mercurial binary packages.
Contents
1. Keeping up with Mercurial
There are no official binary releases of Mercurial. All builds are made by volunteers. Source code release are made approximately once a month by Matt Mackall according to the TimeBasedReleasePlan. Packagers should be prepared to make a release on the first of every month. Packagers should be subscribed to the mercurial-packaging list for release announcements and other packaging notes.
2. Priorities
Every package should aim to:
- make timely major, minor, and release-candidate releases
- post automated nightly builds
- publish automated version information
3. Things to note
Don't enable any extensions by default
Configure pager.pager to a reasonable default for your platform (e.g. more, less, sensible-pager, etc)
Consider packaging the hgweb scripts (to help users publish repositories without having to download the scripts separately)
Consider packaging relevant items from the contrib directory
- Run the test suite on your platform
List your package on the downloads page
Keep up with our time-based releases
4. SSL support
Packagers are encouraged to integrate as well as possible with the platforms existing PKI, for example by distributing a hgrc.d/cacert.rc with configuration of web.cacerts. If the platform doesn't have a suitable CA list you might want to distribute your own - for example the one from cURL/Mozilla. See CACertificates.
5. Make nightly builds available
Nightly builds help users give quick feedback on bugfixes. These should be made from the tip of the stable branch.
6. Version information protocol
Mercurial.selenic.com runs a cron job that polls a set of package publishers to build a set of available binary packages. For instance, it polls http://mercurial.selenic.com/latest.dat, which contains lines of the form:
100 1.7.1 .* http://mercurial.selenic.com/release/mercurial-1.7.1.tar.gz Mercurial source release
The fields are:
priority |
100 |
sort order, with 100 being lowest |
version number |
1.7.1 |
version of the advertised package |
user agent regex |
.* |
a regex to match against web browser User-Agent strings (the source packages matches all) |
url |
address of the binary to download |
|
name/description |
Mercurial source release |
description to display in link anchor |
The cron job will poll all known sources and build a javascript include that can be used to find the best package for a given user. Typically, this would mean listing the first entry with a matching regex (and possibly any others that matched the same expression).
To add a .dat file to the poll list, mail a URL to mpm.
6.1. Example .dat file URLs
7. Stay in touch
Announcements of releases and code freezes are made on the Mercurial-packaging list.