relnotes/5.9
author Matt Harbison <matt_harbison@yahoo.com>
Wed, 19 Oct 2022 11:50:40 -0400
changeset 49712 92892dff03f3
parent 48300 809e780c72e5
permissions -rw-r--r--
revlog: use the user facing filename as the display_id for filelogs I had trouble isolating some LFS blob corruption detected by `hg verify` because the traceback referenced a file, but with the `data/` prefix in the `.hg/store` path, so it couldn't be located with the `file()` revset: ``` Traceback (most recent call last): File "/mnt/d/mercurial/mercurial/revlog.py", line 3209, in verifyintegrity _verify_revision(self, skipflags, state, node) File "/mnt/d/mercurial/hgext/lfs/wrapper.py", line 246, in _verify_revision orig(rl, skipflags, state, node) File "/mnt/d/mercurial/mercurial/revlog.py", line 158, in _verify_revision rl.revision(node) File "/mnt/d/mercurial/mercurial/revlog.py", line 1816, in revision return self._revisiondata(nodeorrev, _df) File "/mnt/d/mercurial/mercurial/revlog.py", line 1870, in _revisiondata self.checkhash(text, node, rev=rev) File "/mnt/d/mercurial/mercurial/revlog.py", line 1996, in checkhash % (self.display_id, pycompat.bytestr(revornode)) mercurial.error.RevlogError: integrity check failed on data/EXE/PPC/shrinksrec.exe:0 ``` (I'm a little surprised it resulted in a stacktrace instead of just a message, but that's a different issue. I'm also not sure how to trigger the simplestore case, since IIUC, it's also a revlog based store.) It's not clear how to handle the changelog and manifest (because the user doesn't interact with them as a file), so those cases are left alone. The other thing that would be nice to improve somehow is to indicate that the ":0" is a revlog revision, not the changeset revision that users are used to. I'm not sure how to handle the "or node" part though.

== New Features ==

 * `hg config` now has a `--source` option to show where each
   configuration value comes from.
 * Introduced a command (debug-repair-issue6528) to repair repositories affected
   by issue6528 where certain files would show up as modified even if they were
   clean due to an issue in the copy-tracing code.

== Default Format Change ==

These changes affect newly created repositories (or new clone) done with
Mercurial 5.9.


== New Experimental Features ==

 * A `changelogv2` format has been introduced. It is not ready for use yet, but
   will be used later to address some of the weaknesses of the current revlog
   format.
 * Initial experiment and support for `dirstatev2`, a new dirstate format that
   addresses some of the weaknesses of the current dirstate format. Python + C
   and Rust support are being implemented, but the Rust solution is the one
   currently getting the attention for performance.
 * Initial support for `rhg status`. `rhg` is the Rust wrapper executable for hg
   that shortcuts some commands for faster execution speed.

== Bug Fixes ==

 * Fixed committing empty files with `narrow`
 * Allow overriding `pip`'s pep517 compliance to build C or Rust extensions
 * Fixed regression on outgoing email when not specifying revisions
 * Fixed a regression causing bookmarks to disappear when using Rust persistent nodemap
 * Fixed a regression (in 5.9.1) introduced in 5.9 when cloning repos with
   deep filenames
 * Fixed detection of directories becoming symlinks, but only when using the
   Rust extensions.
 * Fixed ignore and include not composing in the Rust status
 * `hg commit --interactive` now handles deselecting edits of a rename
 * Fixed a case where `hg evolve` gives different results when interrupted
 * Fixed a memory leak in phases computation
 * `histedit` and `shelve` don't swallow errors when updating the working copy
   anymore
 * Improve error message when detecting content-divergence with a hidden
   common predecessor
 * No longer re-order parents in filelog, see issue6533
 * Fix revisions affected by issue6533 on the fly during exchange
 * Many Windows fixes for stability and py3 compatibility improvements
 * Many other miscellaneous fixes

== Backwards Compatibility Changes ==


== Internal API Changes ==

The Dirstate API have been updated as the previous function leaked some
internal details and did not distinguish between two important cases: "We are
changing parent and need to adjust the dirstate" and "some command is changing
which file is tracked". To clarify the situation:

* the following functions have been deprecated,

  - `dirstate.add`,
  - `dirstate.normal`,
  - `dirstate.normallookup`,
  - `dirstate.merge`,
  - `dirstate.otherparent`,
  - `dirstate.remove`,
  - `dirstate.drop`,
  - `dirstateitem.__getitem__`,

* these new functions are added for the "adjusting parents" use-case:

  - `dirstate.update_file`,
  - `dirstate.update_file_p1`,

* these new function are added for the "adjusting wc file" use-case":

  - `dirstate.set_tracked`,
  - `dirstate.set_untracked`,
  - `dirstate.set_clean`,
  - `dirstate.set_possibly_dirty`,

See inline documentation of the new functions for details.

* Additionally, the following have been deprecated:
  - `urlutil.getpath` function
  - `localrepository.updatecaches`' `full` argument

* The following have been removed:
  - `revlog.revlogio` has been removed