All about handling missing repository requirements.
1. What is a missing requirement?
When an old version of Mercurial attempts to read an on-disk repository using features it doesn't support, it immediately aborts with a "requirement error" to avoid compatibility problems.
This only happens when a newer version of Mercurial creates a repository via init or clone and an older version is used to access that repository on the same disk or network filesystem. All versions of Mercurial are compatible over HTTP or SSH connections.
The following table shows which Mercurial versions support each requirement:
RevlogNG is used
The directory .hg/store contains the subdirectories data (see CaseFoldingPlan)
store files are named to work around Windows limitations described in fncacheRepoFormat.
shared store support
Leading '.' (period) or ' ' (space) in store filenames are encoded (34d8247a4595)
1.7 - 1.8.4
Use parentdelta for new revlogs (experimental, replaced by generaldelta)
Use generaldelta for improved delta chaining
2. What do I do now?
2.1. Use a newer Mercurial
See the above table to find a version that supports the missing requirement. Upgrading is generally painless, see UpgradingMercurial for more information.
2.2. Downgrade your repository over the network
Because all versions of Mercurial can interoperate over the network, an old client can simply pull from a repository served by a new client:
# run this on the new client $ hg serve listening at http://hostname:8000/ (bound to *:8000) # run this on the old client $ hg clone http://hostname:8000/ downgraded-repo
2.3. Downgrade your repository with a new client
The format configuration option may be used to instruct Mercurial to create older repository formats. For example, to convert a 'dotencode' repository into the previous format, the command
hg --config format.dotencode=0 clone --pull repoA repoB
can be used, which of course requires a Mercurial version that supports the 'dotencode' capability.