#pragma section-numbers 2 <> = Packaging = Guidelines for making Mercurial binary packages. <> == 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 [[mpm|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 [[MailingLists|mercurial-packaging]] list for release announcements and other packaging notes. == Priorities == Every package should aim to: * make timely major, minor, and release-candidate releases * post automated nightly builds * publish automated version information == 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 [[PublishingRepositories|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 [[Download|downloads]] page * Keep up with our [[TimeBasedReleasePlan|time-based releases]] == 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]]. == Make nightly builds available == Nightly builds help users give quick feedback on bugfixes. These should be made from the tip of the stable branch. == 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|| http://mercurial.selenic.com/release/mercurial-1.7.1.tar.gz ||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 [[http://mercurial.selenic.com/sources.js|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]]. === Example .dat file URLs === * http://mercurial.selenic.com/latest.dat * http://tortoisehg.bitbucket.org/latest.dat * http://mercurial.berkwood.com/latest.dat == Stay in touch == Announcements of releases and code freezes are made on the [[MailingLists|Mercurial-packaging]] list. == See also == * TimeBasedReleasePlan * [[Download]] ---- CategoryProject