Mercurial 4.4 release
1. Notable changes
1.1. Control whitespace settings for annotation on hgweb
/annotate URLs on hgweb now accept query string arguments to influence how whitespace changes impact results.
The arguments "ignorews," "ignorewsamount," "ignorewseol," and "ignoreblanklines" now have the same meaning as their [annotate] config section counterparts. Any provided setting overrides the server default.
HTML checkboxes have been added to the paper and gitweb themes to expose current whitespace settings and to easily modify the current view.
1.2. Fast, heuristic copy-tracing
A new fast heuristic algorithm for copytracing which assumes that the files moves are either:
- renames in the same directory
- moves in other directories with same names
You can use this algorithm by setting 'experimental.copytrace=heuristics'. This setting performs full copytracing if both source and destination branches contains non-public changesets only.
1.3. Other changes
- Estimated time is more accurate with non-linear progress
- "hg status -v" can now show unfinished state. For example, when in an unfinished rebase state, "hg status -v" might show:
# The repository is in an unfinished *rebase* state. # No unresolved merge conflicts. # To continue: hg rebase --continue # To abort: hg rebase --abort
- Added '--ignore-space-at-eol' diff option to ignore whitespace differences at line endings.
- show: use consistent node length in views
- show: decrease minimum displayed hash length from 5 to 4
- A new uncommit extension which provides 'hg uncommit' using which one can uncommit part or all of the changeset. This command undoes the effect of a local commit, returning the affected files to their uncommitted state.
- 'hg clone --uncompressed' uses clone bundles when possible
- 'hg annotate --skip' now prints a '*' on lines with skipped revisions
- New 'commands.update.check' feature to adjust constraints on when 'hg update' will allow updates with a dirty working copy.
- Add an experimental -L/--line-range FILE,FROMLINE-TOLINE option to 'hg log' command to follow the history of files by line range. In combination with -p/--patch option, only diff hunks within specified line range will be displayed. Feedback, especially on UX aspects, is welcome.
- Print warning when fsmonitor isn't being used on a large repository
2. 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).
3. Bug Fixes
Creating a share of a repository with a Mercurial subrepository will now share the subrepository (issue5675)
4. Performance Improvements
- improved performance when many aliases are defined
5. API Changes
5.1. remove peer.batch()
Replace with peer.iterbatch().
5.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.