# Mercurial 4.5 (2018-02-01)


## Mercurial 4.5 release 

### New Features 

#### revert --interactive 
The revert command now accepts the flag --interactive to allow reverting only
some of the changes to the specified files.


#### Accessing hidden changesets 
Set config option 'experimental.directaccess = True' to access hidden
changesets from read only commands.


#### githelp extension 
The `githelp` extension provides the `hg githelp` command. This command
attempts to convert a `git` command to its Mercurial equivalent. The extension
can be useful to Git users new to Mercurial.


#### Largefiles changes 

- largefiles: add a 'debuglfput' command to put largefile into the store
- largefiles: add support for 'largefiles://' url scheme
- largefiles: allow to run 'debugupgraderepo' on repo with largefiles
- largefiles: convert EOL of hgrc before appending to bytes IO
- largefiles: explicitly set the source and sink types to 'hg' for lfconvert
- largefiles: modernize how capabilities are added to the wire protocol


#### hgweb changes 

hgweb now shows more information about commits: phase (if it's not public), obsolescence status (with a short explanation and links to the successors) and instabilities (e.g. orphan, phase-divergent or content-divergent).

Client-side graph code has been simplified by delegating more work to the backend, so /graph page is now more in sync with /log page, visually and feature-wise. Unfortunately, this code change means that 3rd-party themes for 4.5+ are required to have `graphentry.tmpl` template available (copy it from the base theme if you don't use `%include` and then reference it in map file) and render entries in `graph.tmpl` -- look at one of the core themes to see what it needs to look like. JS functions that create graph vertices and edges are now available in `Graph.prototype`, making it possible to call the original functions from custom theme-specific functions if needed.

Graph now shows different symbols for normal, branch-closing, obsolete and unstable commits, and marks currently checked out commit with a circle around its graph node.

There's also now `json-graph` API endpoint that can be used for rendering commit graph in 3rd-party applications.


#### Other Changes 

- When interactive revert is run against a revision other than the working directory parent, the diff shown is the diff to <em>apply</em> to the working directory, rather than the diff to <em>discard</em> from the working copy. This is in line with related user experiences with 'git' and appears to be less confusing with 'ui.interface=curses'.
- Let 'hg rebase' avoid content-divergence by skipping obsolete changesets (and their descendants) when they are present in the rebase set along with one of their successors but none of their successors is in destination.
- A new experimental config flag, 'rebase.experimental.inmemory', makes rebase perform an in-memory merge instead of doing it on-disk in the working copy.
- The `HGPLAINEXCEPT` environment variable can now include `color` to allow automatic output colorization in otherwise automated environments.
- A new unamend command in uncommit extension which undoes the effect of the amend command by creating a new changeset which was there before amend and moving the changes that were amended to the working directory.
- A '--abort' flag to merge command to abort the ongoing merge.
- An experimental flag '--rev' to 'hg branch' which can be used to change branch of changesets.
- bundle2 read I/O significantly improved
- bundle2 memory use significantly reduced during read
- clonebundle: it is now possible to serve the clonebundle using a git-lfs compatible server.
- templatefilters: add slashpath() to convert path separator to slash (Bts:issue5572)
- A new experimental config flag, 'inline-color-diff', adds within-line color diff capacity
- histedit: add support to output nodechanges using formatter to help with editor integrations




### Backwards Compatibility Changes 

- `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 &lt;canvas&gt; support
- hgweb: only include graph-related data in jsdata variable on /graph pages
- graphlog: add another graph node type, unstable, using character `*`
- remove: print message for each file in verbose mode only while using '-A'



### Bug Fixes 

- Bookmark, whose name is longer than 255, can again be exchanged again between 4.4+ client and servers (Bts:issue5165)
- The convert extension works with bzr &lt; 2.6.0 again (Bts:issue5733)
- Mercurial will now attempt to use hardlinks on NTFS on Windows (Bts:issue4580)
- The revset `x^::` is now correctly parsed as `(x^)::` instead of being an error (Bts:issue5764)
- Setting the diff.noprefix configuration option no longer breaks the `--stat` flag on `hg diff` (Bts:issue5759)
- `hg outgoing` now honors `:pushurl` paths from hgrc (Bts:issue5365)
- log: translate column labels at once (Bts:issue5750)
- patch: improve heuristics to not take the word `diff` as header (Bts:issue1879)
- templater: look up symbols/resources as if they were separated (Bts:issue5699)
- http and ssh: support for emitting extra debug logs about requests as they happen



### API Changes 

- `bundlerepo.bundlerepository.bundle` and `bundlerepo.bundlerepository.bundlefile` are now prefixed with an underscore.
- Rename bundlerepo.bundlerepository.bundlefilespos to _cgfilespos.
- dirstate no longer provides a 'dirs()' method.  To test for the existence of a directory in the dirstate, use 'dirstate.hasdir(dirname)'.
- mapping does not contain all template resources. use context.resource() in template functions.
- `text=False|True` option is dropped from the vfs interface because of Python 3 compatibility issue. Use `util.tonativeeol/fromnativeeol()` to convert EOL manually.
- `wireproto.streamres.__init__` no longer accepts a `reader` argument. Use the `gen` argument instead.
- exchange.getbundlechunks() now returns a 2-tuple instead of just an iterator.
- bundle2 parts are no longer seekable by default
- memfilectx: the changectx argument is now mandatory in constructor
