Upgrade Notes
Changes that may affect existing usage when upgrading Mercurial. See WhatsNew for a more in-depth list of changes, including things that don't necessarily require special action when upgrading.
Contents
- 5.2
- 5.1
- 5.0
- 4.9
- 4.8
- 4.7
- 4.6
- 4.5
- 4.4.1
- 4.4
- 4.3: drop support for Python 2.6
- 4.2
- 4.1.3
- 4.1
- 4.0
- 3.9: enforces TLS1.1 or later by default
- 3.8
- 3.7
- 3.6
- 3.5.1: template paths are no longer trusted
- 3.5: no more support for Python 2.4 or 2.5
- 3.4.1: minor changes
- 3.4: minor changes
- 3.3: minor changes
- 3.2: bid merge on by default, SSLv3 disabled
- 3.1.1: unbundle doesn't move bookmarks
- 3.1: minor changes
- 3.0: minor changes
- 2.9.2: minor changes
- 2.8: minor changes
- 2.6: minor changes
- 2.4: minor changes
- 2.3: minor changes
- 2.2: minor changes
- 2.1.2: strip ignores -n
- 2.1.1: revert pull return code change, compile issue on OS X
- 2.1: phases, various minor changes
- 2.0: subrepo aborts recursive commits, minor backout and alias changes
- 1.9.1: guessmime, revert behavior restored
- 1.9: minor changes, drop experimental parentdelta format
- 1.8: bookmarks are now a core feature
- 1.7.3: minor changes
- 1.7: dotencode repository format
- 1.6: hgwebdir unified with hgweb
- 1.5: Small behavior changes
- 1.4: Minor changes
- 1.3: Python 2.4 or later required
- 1.2: Translations and command line options
- 1.1.1: Minor issues
- 1.1: New repository layout
- 1.0: Minor changes
- 0.9.5: Minor output changes
- 0.9.2: New repository layout
- 0.9: New repository format
- 0.8: Small behavior changes
- 0.7: Windows hardlink cloning
- 0.6c: Directory Escaping
- See also
1. 5.2
hg grep now searches working copy file contents by default. We recognize
- this is a significant change from past behavior, but surveys of large bodies of users indicated nobody used (and almost nobody understood) the previous
no-flags behavior of hg grep. The new behavior aligns with the behavior most users expected (including hg's maintainers), which also happens to be the behavior of git grep. Given that the old behavior was confusing to the point of being unusable, we were comfortable changing this behavior.
- this is a significant change from past behavior, but surveys of large bodies of users indicated nobody used (and almost nobody understood) the previous
The experimental infinitepush extension is believed to be unused, and will be deleted at
the end of 2020 unless users contact mercurial-devel@mercurial-scm.org.
The experimental narrow extension has undergone some wire protocol changes. Clients and servers will both need to be upgraded.
2. 5.1
The graphmod code no longer supports lines mixing parent/grandparent styles
Python 3 support is in beta, but we expect at least some users at this point in Python 2's lifecycle due to distro deprecations. Please work on porting your extensions to Python 3 now, as in the near future we expect Python 3 to be the preferred Python for Mercurial.
3. 5.0
Nothing meriting upgrade notes.
4. 4.9
Nothing meriting upgrade notes.
5. 4.8
- The experimental narrow extension has undergone perf and correctness improvements, bug fixes and introducing new capabilities to make it more robust. It's expected that narrow clients with new mercurial version won't be able to interact with narrow server using older version of mercurial. It is recommended to update both client and server versions if you are using narrow for improvements.
- Emails from the patchbomb extension will always be printed as though they are iso-8859-1 if they're not valid us-ascii. Previously, previewed emails were always claimed to be us-ascii and might contain invalid byte sequences.
- 'hg debugdata' no longer accepts the path to a revlog file.
- Bulk-renaming of the formatter template keywords:
- "{abspath}" and "{file}" to "{path}". Any "{path}" is a repository-absolute path. Use "{path|relpath}" to convert it to a filesystem path.
- "{copy}" in status command to "{source}".
- "{oldhashes}" and "{newhashes}" in journal template to "{oldnodes}" and "{newnodes}" respectively.
- "{line_number}" to "{lineno}".
- "{status}" of resolve command to "{mergestatus}".
- A repository will no longer use shared storage if it has a ".hg/sharedpath" file but no entry in ".hg/requires" saying it is shared.
- This change should not have any end-user impact, as all shared repos should have a ".hg/requires" file indicating this.
6. 4.7
- The fileset expression may include untracked files by default. Use "tracked()" to explicitly filter out files not existing at the context revision.
- graft: reuse --user, --date, a --log values in 'hg graft --continue' (BC)
- revset: fix heads() order to always follow the input set (BC)
- revset: make id() an empty set for ambiguous nodeid (BC)
- revset: make id() to resolve node id prefix in unfiltered repo (BC)
- templater: consistently join() string-like object per character (BC)
7. 4.6
- Support for connecting to Mercurial servers older than 0.9.1 has been removed.
- Support for the experimental manifestv2 format has been removed, as it was never completed and failed to meet expectations.
- '{' in output filename passed to archive/cat/export is taken as a start of a template expression.
- Query string shorts in hgweb like "?cs=@" have been removed. Use URLs of the form "/:cmd" instead.
- HTTP client no longer accepts text/plain and application/hg-changegroup Content-Type values as a valid Mercurial command response. These should only be encountered on pre 1.0 Mercurial servers.
8. 4.5
log --follow-first -rREV, which is deprecated, now follows the first parent of merge revisions from the specified REV just like log --follow -rREV.
log --follow -rREV FILE.. now follows file history across copies and renames.
- transaction: register summary callbacks only at start of transaction
hgweb's graph view no longer supports browsers that lack <canvas> support
graphlog: add another graph node type, unstable, using character *
- remove: print message for each file in verbose mode only while using '-A'
9. 4.4.1
9.1. Backwards Compatibility Changes
- subrepos now default the Git and Subversion support to off to known security defects in those components. See 'hg help config.subrepos' for more information, including how to re-enable Git and Subversion subrepo support.
10. 4.4
10.1. Backwards Compatibility Changes
- The config option for copytrace 'experimental.disablecopytrace' is now replaced with 'experimental.copytrace' which defaults to 'on'. If you need to turn off copytracing, add '[experimental] copytrace = off' to your config.
- 'hg clone --stream' should now be used instead of --uncompressed. --uncompressed is marked as deprecated and is an alias for --stream. There is no schedule for elimination of --uncompressed.
- The 'experimental.updatecheck' name for the new 'commands.update.check' feature is now deprecated, and will be removed after this release.
- Mercurial subrepositories are now shared instead of cloned when the parent repository is shared. This prevents dangling subrepository references in the share source. Previously shared repositories with cloned subrepositories will continue to function unchanged.
- Push no longer triggers a pushkey hook when updating phases. Use the new 'txnclose-phase' and 'txnclose-phase' hooks instead. (Applies when both server and client use version 4.4 or above).
10.2. API Changes
10.2.1. remove peer.batch()
Replace with peer.iterbatch().
10.2.2. Other changes
- @peer.batchable can no longer emit local values
- @peer.batchable functions must now yield exactly 2 values
- Rename attributes on sshpeer to reflect peer API
- peer.peerrepository has been removed. Use repository.peer abstract base class to represent a peer repository.
- revset.stringset() now takes 'order' as the last argument.
11. 4.3: drop support for Python 2.6
11.1. Behavior changes
- amend: strip backup file name changed (BC)
- histedit: strip backup file name changed (BC)
- rebase: strip backup file name changed (BC)
- annotate: restructure formatter output to be nested list (BC)
- archival: flag missing files as a dirty wdir() in the metadata file (BC)
- bookmarks: warn about bookmark names that unambiguously resolve to a node (BC)
- clonebundle: update hook arguments (BC)
- commit: do not look up committemplate in template paths (BC)
- fetch: remove shorthand of --edit colliding against -e/-ssh in remoteopts (BC)
- formatter: open raw template file in binary mode (BC)
- graphlog: do not look up graphnodetemplate in template paths (BC)
- histedit: pass multiple nodes to strip (BC)
- histedit: remove moving bookmarks message on verbose (BC)
- histedit: unify strip backup files on success (BC)
- histedit: use scmutil.cleanupnodes (BC)
- match: don't print explicitly listed files with wrong case (BC)
rebase: allow rebase even if some revisions need no rebase (BC) (issue5422)
rebase: use scmutil.cleanupnodes (issue5606)
- revset: fix order of first/last members in compound expression (BC)
revset: fix order of last() n members where n > 1 (BC)
- setup: drop support for Python 2.6 (BC)
- sparse: add a requirement when a repository uses sparse (BC)
- sparse: require [section] in sparse config files (BC)
streamclone: consider secret changesets (BC) (issue5589)
- strip: include phases in bundle (BC)
- update: show the commit to which we updated in case of multiple heads (BC)
util: raise ParseError when parsing dates (BC)
11.2. Internal API changes
- bundle2: record changegroup data in 'op.records' (API)
- changegroup: delete unused 'bundlecaps' argument (API)
- changegroup: deprecate 'getlocalchangroup' (API)
- changegroup: don't fail on empty changegroup (API)
- changegroup: let callers pass in transaction to apply() (API)
- changegroup: remove option to allow empty changegroup (API)
- changelog: make sure datafile is 00changelog.d (API)
- cmdutil: drop deprecated hack to pass file object to makefileobj() (API)
- cmdutil: pass templatespec tuple directly to changeset_templater (API)
- commands: move templates of common command options to cmdutil (API)
- context: inline makememctx (API)
- dirstate: expose a sparse matcher on dirstate (API)
- dirstate: mark {begin,end}parentchange as deprecated (API)
- extensions: prohibit registration of command without using @command (API)
- hidden: rename "revealedrevs" to "pinnedrevs" (API)
- localrepo: mark walk convenience method as deprecated (API)
- localrepo: remove unused addchangegroup() (API)
match: implement repr() and update users (API)
- match: replace match class by match function (API)
- osutil: proxy through util (and platform) modules (API)
- registrar: move cmdutil.command to registrar module (API)
- repoview: rename '_getdynamicblockers' to 'revealedrevs' (API)
- revlog: rename constants (API)
- revset: make repo.anyrevs accept customized alias override (API)
- sparse: refactor activeprofiles into a generic function (API)
- templater: add simple interface for unnamed template (API)
12. 4.2
- commit: optionally strip quotes from commit template (BC)
- filemerge: optionally strip quotes from merge marker template (BC)
- graphlog: optionally strip quotes from graphnode template (BC)
- pager: don't terminate with extreme prejudice on SIGPIPE (BC)
- pager: exit cleanly on SIGPIPE (BC)
- patchbomb: use modern pager to display -n/--test result (BC)
- rcutil: let environ override system configs (BC)
- rebase: allow rebasing children of working directory to working directory if a new branch has been set (BC)
templatekw: make join() escape values of extras (BC) (issue5504)
- util: always force line buffered stdout when stdout is a tty (BC)
setup: use setuptools on Windows (BC) (issue5400)
13. 4.1.3
serve: hg serve --stdio is now extremely paranoid about command line flags. This breaks anyone passing --config to hg serve --stdio in order to fix a security issue. See this change for more details.
14. 4.1
- chg: send type information via S channel (BC)
- crecord: rewrite status line text (BC)
- hgweb: link to raw-file on annotation page (BC)
- hook: do not redirect stdout/err/in to ui while running in-process hooks (BC)
- profiling: make statprof the default profiler (BC)
- profiling: use vendored statprof and upstream enhancements (BC)
- rebase: fail-fast the pull if working dir is not clean (BC)
- wireproto: only advertise HTTP-specific capabilities to HTTP peers (BC)
15. 4.0
- copy: distinguish "file exists" cases and add a hint (BC)
- bundle2: remove 'experimental.bundle2-exp' boolean config (BC)
- debugextension: change "testedwith" to a list (BC)
- flags: allow specifying --no-boolean-flag on the command line (BC)
- journal: use fm.formatdate() to pass date tuple in appropriate type (BC)
- journal: use fm.formatlist() to pass hashes in appropriate type (BC)
- journal: use fm.hexfunc() to get full hash in JSON/template output (BC)
rebase: rebase changesets in topo order (issue5370) (BC)
- revset: fix order of nested '_(|int|hex)list' expression (BC)
- revset: fix order of nested 'or' expression (BC)
- revset: fix order of nested 'range' expression (BC)
- revset: make reverse() noop depending on ordering requirement (BC)
- revset: make sort() noop depending on ordering requirement (BC)
- templater: make pad() evaluate boolean argument (BC)
- wireproto: unescape argument names in batch command (BC)
16. 3.9: enforces TLS1.1 or later by default
Mercurial 3.9 is less forgiving about insecure SSL/TLS configurations. See SecureConnections for more.
- dispatch: defer environment variable resolution in alias commands (BC)
- hgcia: remove hgcia (BC)
- mail: unsupport smtp.verifycert (BC)
- sslutil: abort when unable to verify peer connection (BC)
- sslutil: stop checking for web.cacerts=! (BC)
update: fix bare --clean to work on new branch (issue5003) (BC)
- url: add distribution and version to user-agent request header (BC)
17. 3.8
3.8.1 contains a noisy deprecation warning that was intended only for developers, please use 3.8.2.
Untrusted hooks may now trigger operation aborts. Minor changes to templates and graphlog.
- bugzilla: do not load style file if template is specified (BC)
- convert: keep converted hg parents that are outside convert.hg.revs (BC)
- destutil: choose non-closed branch head at first (BC)
- graphmod: set default edge styles for ascii graphs (BC)
hook: report untrusted hooks as failure (issue5110) (BC)
- notify: do not load style file if template is specified (BC)
- pull: activate a bookmark matching with the destination of the update (BC)
- rebase: choose default destination the same way as 'hg merge' (BC)
- serve: rename --daemon-pipefds to --daemon-postexec (BC)
shelve: adds restoring newly created branch (issue5048) (BC)
- shelve: preserve newly created branch on non-bare shelve in wctx (BC)
- templatefilters: drop broken "jsonescape" from filters table (BC)
templatefilters: make json filter be byte-transparent (BC) (issue4926)
- templatekw: switch ctx of list expression to rev of {parents} (BC)
update: change default destination to tipmost descendant (issue4673) (BC)
18. 3.7
Minor changes to backout and merge.
- backout: commit changeset by default (BC)
- filemerge: default change/delete conflicts to 'leave unresolved' (BC)
- filemerge: default regular prompts to 'leave unresolved' (BC)
- histedit: pick an appropriate base changeset by default (BC)
- merge: move almost all change/delete conflicts to resolve phase (BC) (API)
- merge: refuse update/merge if there are unresolved conflicts (BC)
pull: return 255 value on update failure (issue4948) (BC)
19. 3.6
Miscellaneous tweaks.
- cmdutil: stop tryimportone from using dirstateguard (BC)
- commit: abort when a committemplate is not changed (BC)
dispatch: error out on invalid -R path even if optionalrepo (issue4805) (BC)
histedit: use one editor when multiple folds happen in a row (issue3524) (BC)
- incoming: request a bundle2 when possible (BC)
- merge: perform all premerges before any merges (BC)
phases: return zero for no-op operations (issue4751) (BC)
- resolve: perform all premerges before performing any file merges (BC)
revsets: makes follow() supports file patterns (issue4757) (BC)
- templater: switch ctx of list expression to rev of revset() (BC)
windows: read all global config files, not just the first (issue4491) (BC)
- wireproto: properly parse false boolean args (BC)
20. 3.5.1: template paths are no longer trusted
- hgweb: fix trust of templates path (BC)
21. 3.5: no more support for Python 2.4 or 2.5
A new wire protocol (bundle2) is enabled and preferred by clients. When talking with a compatible server (Mercurial 3.4 and newer), pull and push operations will use the new protocol to transfer data. Old clients can still talk to new servers and new clients can still talk to old servers.
- bookmarks: abort the whole push if bookmarks fails to update (BC)
- convert: when converting from Perforce use original local encoding by default (BC)
- phases: abort the whole push if phases fail to update (BC)
- devel: rename 'all' to 'all-warnings' (BC)
- setup.py: drop compatibility with Python 2.4 and 2.5 (BC)
sshpeer: break "OutOfBandError" feature for ssh (BC)
templatekw: display active bookmark more consistently (issue4552) (BC)
- templater: do not reevaluate rawstring as template (BC)
- templater: take any string literals as template, but not for rawstring (BC)
templater: tokenize decimal integer literal (issue4638) (BC)
22. 3.4.1: minor changes
- localrepo: rename hook argument from TXNID to txnid (BC)
- localrepo: use correct argument name for pretxnclose hooks (BC)
templater: strictly parse leading backslashes of '{' (issue4569) (BC)
23. 3.4: minor changes
- push: abort when revisions evaluate to empty set (BC)
- log: display closing-branch nodes as "_" (BC)
- log: make -fr show complete history from the given revs (BC)
push: acquire local 'wlock' if "pushback" is expected (BC) (issue4596)
- resolve: silence warning of unknown pats for -l/--list (BC)
- color: be more conservative about setting ANSI mode on Windows (BC)
- histedit: allow histedit --continue when not on a descendant (BC)
- ssl: set explicit symbol "!" to web.cacerts to disable SSL verification (BC)
unbundle: acquire 'wlock' when processing bundle2 (BC) (issue4596)
- ui: disable revsetaliases in plain mode (BC)
- tags: an internal cache of tags has been rewritten to make it scale better for repositories with hundreds of heads and tens of thousands of files.
- The new tags cache is used automatically. No manual action is necessary to upgrade the tags cache.
- The first times tags data is accessed after upgrade, a one-time repopulation of tags cache data will occur. On very large repositories, this could take several seconds - possibly over a minute. This repopulation should be nearly instantaneous for most "normal" sized repositories.
- To manually trigger a repopulation, run any command that displays tags info, such as "hg tags."
- You can verify the new tags cache is present by looking for the presence of ".hg/cache/hgtagsfnodes1" and ".hg/cache/tags2*" files.
See issue4550 for more.
24. 3.3: minor changes
- add: add back forgotten files even when not matching exactly (BC)
- addremove: add back forgotten files (BC)
- addremove: print relative paths when called with -I/-X (BC)
- bundles: do not overwrite existing backup bundles (BC)
- dispatch: only check compatibility against major and minor versions (BC)
- extensions: only check compatibility against major and minor versions (BC)
ignore: resolve ignore files relative to repo root (issue4473) (BC)
- patchbomb: don't honor whitespace and format-changing diffopts (BC)
- revset: allow rev(-1) to indicate null revision (BC)
25. 3.2: bid merge on by default, SSLv3 disabled
- log: do not hide the public phase in debug mode (BC)
- merge: use bid merge by default (BC)
- pushbookmark: do not attempt to update bookmarks if the push failed (BC)
alias: expand "$@" as list of parameters quoted individually (BC) (issue4200)
- i18n: detect UI language without POSIX-style locale variable on Windows (BC)
- ssl: only support TLS (BC)
- mq: write '# Parent ' lines with two spaces like export does (BC)
- mq: write headers for new HG patches in the same order as export (BC)
26. 3.1.1: unbundle doesn't move bookmarks
unbundle: don't advance bookmarks (issue4322) (BC)
27. 3.1: minor changes
- filemerge: use non-minimal conflict marker regions (BC)
- graft: customize graft conflict markers (BC)
- merge: add conflict marker formatter (BC)
- rebase: specify custom conflict marker labels for rebase (BC)
- resolve: abort when not applicable (BC)
- strip: drop -b/--backup option (BC)
- update: specify custom conflict markers for update (BC)
28. 3.0: minor changes
This release has significant changes to the revset implementation which now has different performance characteristics.
- clone: abort if default destination has no meaningful name (BC)
- dirstate: report bad subdirectories as match.bad, not just a warning (BC)
- extensions: remove the inotify extension (BC)
- sshpeer: only print out 'running ssh' messages in debug mode (BC)
- the interhg extension was removed, please use the websub configuration instead.
29. 2.9.2: minor changes
backout: correct commit status of no changes made (BC) (issue4190)
30. 2.8: minor changes
TLSv1.0 or greater is now required for SSL connections for security reasons. This should be compatible with over 99% of existing webservers. Use ui.tls=False to allow SSLv2 or SSLv3 connections.
- hgweb: always run search when a query is entered (BC)
- rebase: preserve working directory parent (BC)
- rebase: remove bailifchanged check from pullrebase (BC)
sslutil: add a config knob to support TLS (default) or SSLv23 (BC) (issue4038)
31. 2.6: minor changes
dispatch: exit with status 1 for an InterventionRequired exception (BC)
- dispatch: print 'abort:' when a pre-command hook fails (BC)
export: clobber files with -o (BC) (issue3652)
- update: now also check for missing files with --check (issue3595) (BC)
32. 2.4: minor changes
- bookmarks: when @ bookmark diverges, don't double the @ sign (BC)
- bookmarks: clone will no longer update to a bookmark named 'default'
33. 2.3: minor changes
- bookmarks: pull new bookmarks from remote by default (BC)
- rebase: do not add second parent to rebased changeset (drop detach option) (BC)
34. 2.2: minor changes
This release has a significant memory leak, fixed in 2.2.1
- commit: abort on merge with missing files (BC)
convert/bzr: convert all branches (issue3229) (BC)
- phase: when phase cannot be reduced, hint at --force and return 1 (BC)
- posix: disable cygwin's symlink emulation (BC)
- posix: ignore execution bit in cygwin (BC)
- templates/filters: extract the user portion of an email address (BC)
35. 2.1.2: strip ignores -n
strip ignores -n to avoid confusion with --dry-run/-n elsewhere, use --no-backup (issue3327)
36. 2.1.1: revert pull return code change, compile issue on OS X
This release has a known compile failure on OS X
- pull return code now matches its pre-2.1 behavior
37. 2.1: phases, various minor changes
The new Phases feature intentionally prevents some misuse of the rebase and mq extensions.
- Rebase and mq users with unpublished changes may need to synchronize phases once after upgrade with:
$ hg phase --force --draft "public() and outgoing()"
bookmarks are now automatically advanced on 'hg update' with no revision (issue2894)
- annotate appends a newline after non newline-terminated file listings
- grep now uses 'multiline' regex mode by default
- pull now returns 1 when no changes found to match commit/incoming/outgoing/push.
38. 2.0: subrepo aborts recursive commits, minor backout and alias changes
- The commit command now aborts when there are uncommitted subrepos, use the -S option to recurse
- The backout command is fundamentally unhelpful for fixing merges, so it no longer 'supports' them
Aliases of alternate command names no longer shadow the main command (issue2993)
39. 1.9.1: guessmime, revert behavior restored
- revert now requires a specific revision to revert a merge, restoring the pre-1.9 behavior
hgweb now returns raw files as type application/binary for security, see the web.guessmime config setting to restore the old behavior
40. 1.9: minor changes, drop experimental parentdelta format
- config: ignore include errors for nonexistent files
eol: rename hook into checkheadshook, add checkallhook (issue2665)
- graphlog: always sort revisions topologically
- mq: print "'foo' 'bar'", not "['foo', 'bar']" when showing guards
- patch: deprecate ui.patch / external patcher feature
- revert: drop requirement to use -r to revert with two parents
- revlog: remove support for parentdelta
contrib/hg-ssh from older Mercurial releases will not be compatible with version 1.9, please update your copy.
- users of the hgcia extension configuration will need to add a strip configuration in order to get correct urls.
(See MissingRequirement for information on migrating any repositories using the experimental parentdelta format.)
41. 1.8: bookmarks are now a core feature
- This release contained an undesirable behavior change for 'fast-forward' merges, use 1.8.1
- The old bookmarks "track.current" behavior is now on by default
Bookmarks are no longer listed by hg tags
Building on Windows now requires the ctypes module rather than PyWin32
Extensions that use pushkey to send non-ASCII values will break because of 3790452d499b. Older versions will encode/decode keys and values with string-escape whereas newer versions will not and this leads to double-encoded keys and values. Extensions can detect this situation by including a single backslash in all values and decode the data an extra time if they see a double backslash.
42. 1.7.3: minor changes
- Tagging now requires -f if it would create a new head
SSL now warns if no CA certificates are configured (see CA Certificates)
43. 1.7: dotencode repository format
- New dotencode repository format
- This repository format more safely encodes leading '.' (periods) (which are problematic on OS X, for example in '.DS_Store') and ' ' (spaces) (which are problematic on Windows) in store filenames.
This change should be invisible to most users, see UpgradingMercurial for information on format changes.
- New experimental ‘parentdelta’ repository format
- Increases compression efficiency for repositories with branchy history.
- Parentdelta support is not available yet for bundles or network transfers, which will use the standard, less efficient format.
Not used by default. Specify --config format.parentdelta=1 to create repositories using it.
- The format may change in future versions -- use at your own risk.
44. 1.6: hgwebdir unified with hgweb
hgweb.cgi and hgwebdir.cgi combined (though old installs of either will continue to work)
- hgweb and command line templates now require escaping of open braces ('\{') that aren't part of template expressions
- hgweb now delivers output of external changeset hooks to clients
the churn extension lost the --progress flag (uses the ProgressExtension instead)
45. 1.5: Small behavior changes
hg heads now shows all branch heads, use --topo for old behavior
hg annotate now follows copies and renames by default, use --no-follow for old behavior
the repo#name URL syntax now refers to all branch heads if name is a branch
servers now allow clone --uncompressed by default, set server.uncompressed=false for old behavior
the {file_copies} template now displays copies unconditionally, use {file_copies_switch} for old behavior
the templates/ directory has moved inside mercurial/
mq patches are automatically upgraded to git patches, use mq.git=keep for old behavior
the mq qnew command no longer requires --force to create a new patch
46. 1.4: Minor changes
- convert: external cvsps is no longer supported, replaced by builtin cvsps
color: the --no-color option has been deprecated in favor of --color=never
templater: remove support for ## syntax (which was deprecated in 1.3) in favor of {} syntax
47. 1.3: Python 2.4 or later required
- The functionality of the alias extension has been moved to the core.
48. 1.2: Translations and command line options
There is a known issue in this release with Mercurial reporting version 'unknown' when building from a tarball. To correct this, simply replace __version__.py in the install directory with the one shipped in the tarball.
- Mercurial now supports local translations of messages. If your tools look for particular English messages in Mercurial output, they should disable translations with LC_ALL=C in the environment.
- Mercurial now allows command line options to appear after non-option arguments in the command line. To pass an argument beginning with '-', use the '--' option to signal the end of options. In particular, this is required for the qguard command in the mq extension.
- the graphlog extension now uses -G to show graphs, as log -g now enables git-style patches
- The deprecated imerge extension is removed
49. 1.1.1: Minor issues
- hgwebdir no longer walks collections recursively to avoid higher overhead
- to use recursive collections, specify '**' rather than '*'
- use 'hg co null' to remove your working directory to reduce recursion time
- resolve now requires the -a switch to resolve all files
50. 1.1: New repository layout
hgwebdir in 1.1 walks collections recursively, which can be very CPU-intensive on repos with check-outs (issue1336)
New fncache repository format
- This repository format more safely encodes long paths and filenames that are reserved on Windows
- Used when creating new repositories. Specify "--config format.usefncache=0" to create repositories compatible with Mercurial 1.0
- This change will only be visible to users when using an older version to locally access a newly created repository
- Several API changes in core Mercurial
- adding container and iterator interfaces to revlog/localrepo
- abstraction of repository store
- better use of context objects throughout the code
- added API to commit file contents straight from memory
- Changes in hgweb
- Code has been changed to provide clearer abstractions and WSGI compliance
- Different way of specifying content-type for hgweb templates
- Changes in convert extension
- Builtin cvsps is now enabled by default when converting from a CVS repository. To use the external cvsps tool set the following option: "--config convert.cvsps=cvsps -A -u --cvs-direct -q"
Review ApiChanges if you have code using hg or maintain your own templates
51. 1.0: Minor changes
- sample global merge tool defaults distributed in "contrib/mergetools.hgrc"
- bisect is now a built-in command, the extension should not be used anymore
- hgk extension configuration file changed from .gitk to .hgk
- "hg" script sets Windows standard streams to binary mode at startup to avoid CR corruption in redirections
- custom hgweb templates should specify the Content-Type header using the "mimetype" template in the map file
- old-style hgweb templates (pre-0.9.2) have been removed
- churn is now in hgext/
52. 0.9.5: Minor output changes
"hg manifest -v" displays a new one-character long column between permissions and file names, for executable and symlink bits, like:
$ hg manifest -v 644 normalfile 755 * isexec 644 @ islink
"contrib/hg-ssh" from older Mercurial releases will not be compatible with version 0.9.5, please update your copy.
53. 0.9.2: New repository layout
The repository layout has been improved to guard against issues with case-insensitive filesystems and improve interoperability for repositories shared between Unix and Windows systems.
Newly created repositories will use the new layout by default. To convert an old repository, use clone --pull.
Note: Versions 0.9.1 and earlier of Mercurial cannot read repositories with the new layout directly, but they can clone, pull from, and push to servers using the new layout.
54. 0.9: New repository format
The repository file format has been improved. This has resulted in an average 40% reduction in disk space usage. The new format (called RevlogNG) is now the default.
Mercurial works perfectly with both the old and new repository file formats. It can transfer changes transparently between repositories of either format.
To use the new repository format, simply use hg clone --pull to clone an existing repository.
Note: Versions 0.8.1 and earlier of Mercurial cannot read RevlogNG repositories directly, but they can clone, pull from, and push to servers that are serving RevlogNG repositories.
55. 0.8: Small behavior changes
The diff and status commands are now tree-wide by default to match the behavior of commit. To get the old behavior, simply use 'hg diff .' to diff the current working directory.
GPG signing is now done with the gpg extension in contrib/.
The deprecated --text option for commit, rawcommit, and tag has been removed. Use --message instead.
The copy/rename --parents option have been removed as these commands now behave more like their UNIX equivalents.
56. 0.7: Windows hardlink cloning
As of 0.7, hardlink cloning is now supported on Windows with NTFS and ActiveState Python. Because old versions cannot properly determine the link count of hardlinked files, using old versions of Mercurial on a new repository containing hardlinks may be dangerous.
57. 0.6c: Directory Escaping
Mercurial 0.6c introduced a layout change that affects a small number of repositories. To avoid potential future name collisions, repositories containing directory names ending in ".i", ".d", or ".hg" (eg: etc/init.d/foo) need escaping. If you have a repository containing such directories, it can be updated with the following UNIX command:
$ find .hg -type d -name "*.[di]" -exec echo mv {} {}.hg ";"
58. See also
Advice on upgrading Mercurial
API Changes for extension developers