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.

1. 4.2-rc

2. 4.1.3

3. 4.1

4. 4.0

5. 3.9: enforces TLS1.1 or later by default

Mercurial 3.9 is less forgiving about insecure SSL/TLS configurations. See SecureConnections for more.

6. 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.

7. 3.7

Minor changes to backout and merge.

8. 3.6

Miscellaneous tweaks.

9. 3.5.1: template paths are no longer trusted

10. 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.

11. 3.4.1: minor changes

12. 3.4: minor changes

13. 3.3: minor changes

14. 3.2: bid merge on by default, SSLv3 disabled

15. 3.1.1: unbundle doesn't move bookmarks

16. 3.1: minor changes

17. 3.0: minor changes

This release has significant changes to the revset implementation which now has different performance characteristics.

18. 2.9.2: minor changes

19. 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.

20. 2.6: minor changes

21. 2.4: minor changes

22. 2.3: minor changes

23. 2.2: minor changes

/!\ This release has a significant memory leak, fixed in 2.2.1

24. 2.1.2: strip ignores -n

25. 2.1.1: revert pull return code change, compile issue on OS X

/!\ This release has a known compile failure on OS X

26. 2.1: phases, various minor changes

$ hg phase --force --draft "public() and outgoing()"

27. 2.0: subrepo aborts recursive commits, minor backout and alias changes

28. 1.9.1: guessmime, revert behavior restored

29. 1.9: minor changes, drop experimental parentdelta format

(See MissingRequirement for information on migrating any repositories using the experimental parentdelta format.)

30. 1.8: bookmarks are now a core feature

31. 1.7.3: minor changes

32. 1.7: dotencode repository format

33. 1.6: hgwebdir unified with hgweb

34. 1.5: Small behavior changes

35. 1.4: Minor changes

36. 1.3: Python 2.4 or later required

37. 1.2: Translations and command line options

38. 1.1.1: Minor issues

39. 1.1: New repository layout

/!\ hgwebdir in 1.1 walks collections recursively, which can be very CPU-intensive on repos with check-outs (issue1336)

40. 1.0: Minor changes

41. 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.

42. 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.

43. 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.

44. 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.

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.

46. 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 ";"

47. See also