archive: defer opening the output until a file is matched
Before, if no file is matched, an error is thrown, but the archive is
created anyway. When using hgweb, an error 500 is returned as the
response body already exists when the error is seen.
Afterwards, the archive is created before the first match is emitted.
If no match is found, no archive is created. This is more consistent
behavior as an empty archive is not a representable in all output
formats, e.g. tar archives.
= Mercurial 6.5.3 =
* "hgweb: pass strings in WSGI environment correctly from wsgicgi"
* "perf: introduce more cache invalidation option in perf::tags"
* "perf: add a `--clear-fnode-cache-rev` argument to perf::tags"
* "perf: add a --update-last flag to perf::tags"
* "blackbox: add a option to duplicate output to stderr too"
* "tags: avoid expensive access to repo.changelog in a loop"
* "revlog: fix a bug where NULL_NODE failed to be resolved to NULL_REV"
* "httppeer: fix static-http: scheme autodetection (issue6833)"
* "tests: backed out changeset 8037ddacad47"
* "stream-clone: fix a crash when a repo with an empty revlog is cloned"
* "censor: accept censored revision during upgrade"
* "revlog: avoid opening and closing the file for each cloned revision"
= Mercurial 6.5.2 =
* hgweb: encode WSGI environment using the ISO-8859-1 codec
* rhg: fix the bug where sparse config is interpreted as relglob instead of glob
* gpg: fix an UnboundLocalError whenever using --force
* transaction: fix __repr__() and make the default name bytes
* setup: make the error "Unable to find a working hg binary" more informative
* tests: avoid test environment affecting setup.py
* run-tests: detect HGWITHRUSTEXT value
= Mercurial 6.5.1 =
* A bunch of improvements to Python 3.12 compatibility
* repoview: fix the filter created by `extrafilter`
* Improve portability of the test suite
* fncache: fix a bug that corrupts the fncache after transaction rollback
* revlog: fix the naming scheme use by split temporary file
* perf: fix perf::tags
= Mercurial 6.5 =
As usual, a lot of patches don't make it to this list since they're more internal.
== New Features ==
* Improved Python 3.12 compatiblity
* configitems: enable changegroup3 by default (unless using infinitepush)
* extras: expose 'retained_extras' for extensions to extend
* stabletailgraph: implement stable-tail sort
* stabletailgraph: naive version of leap computation
* bundle: introduce a "v3" spec
* clone-bundles: add a basic first version of automatic bundle generation
* clone-bundles: garbage collect older bundle when generating new ones
* clone-bundles: only regenerate the clone bundle when cached ration is low
* clone-bundles: also control automation based on absolute number of revisions
* clone-bundles: add a configuration to control auto-generation on changes
* clone-bundles: introduce a command to refresh bundle
* clone-bundles: add a command to clear all bundles
* clone-bundles: add an option to generate bundles in the background
* clonebundles: add support for inline (streaming) clonebundles
* clonebundles: adds a auto-generate.serve-inline option
* match: add `filepath:` pattern to match an exact filepath relative to the root
* hgweb: add "children" into the JSON template for a changeset
* hgweb: add support to explicitly access hidden changesets
* pull: add --remote-hidden option and pass it through peer creation
* hidden: add support for --remote-hidden to HTTP peer
* hidden: support passing --hidden with `serve --stdio`
* hidden: add support to explicitly access hidden changesets with SSH peers
* perf: introduce a `perf::stream-locked-section` command
* perf: add a function to find a stream version generator
* perf: add support for stream-v3 during benchmark
* perf: add a perf::stream-generate command
* perf: add a perf::stream-consume
* cli: make debugnodemap capable of inspecting an arbitrary nodemap
* rust: configure MSRV in Clippy
* rhg: make `rhg files` work if `ui.relative-files=true` is specified
* rhg: support `rhg files` with `ui.relative-paths=false`
* rhg: support `status --print0`
* tree-manifest: allow `debugupgraderepo` to run on tree manifest repo
* library: enable runpy invocation on mercurial package
* library: incorporate demandimport into runpy invocation
* exchange: allow passing no includes/excludes to `pull()`
== New Experimental Features ==
* stream-clone: add an experimental v3 version of the protocol
* stream-clone: support streamv3 on the cli [hg bundle]
== Bug Fixes ==
* mail: add a missing argument to properly override starttls
* bundle: include required phases when saving a bundle (issue6794)
* outgoing: fix common-heads computation from `missingroots` argument
* strip: do not include internal changeset in the strip backup
* bundle: abort if the user request bundling of internal changesets
* bundle: prevent implicit bundling of internal changeset
* encoding: avoid quadratic time complexity when json-encoding non-UTF8 strings
* sha1dc: Make sure SHA1DC_BIGENDIAN is set on Darwin/PowerPC
* zstd: hack include order to ensure that our zstd.h is found
* dirstate: better error messages when dirstate is corrupted
* stream-clone: avoid opening a revlog in case we do not need it
* treemanifest: make `updatecaches` update the nodemaps for all directories
* rust-hg-core: move from `ouroboros` to `self_cell`
* rust-dependencies: switch from `users` to `whoami`
* dirstate-v2: actually fix the dirstate-v2 upgrade race
* dirstate: avoid leaking disk space in `hg debugrebuilddirstate`
* clonebundles: add warning if auto-generate is enabled without formats
* win32mbcs: unbyteify some strings for py3 support
* rust-revlog: fix incorrect results with NULL_NODE prefixes
* rust-revlog: fix RevlogEntry.data() for NULL_REVISION
== Backwards Compatibility Changes ==
* infinitepush: aggressively deprecated infinite push
* narrow: indicated the default of 'Yes' when confirming auto-remove-includes
== Internal API Changes ==
* Store walk was reworked to fix small race conditions in stream-clone and
greatly improve its API robustness and flexibility.
== Miscellaneous ==
* Typechecking support was improved in a lot of places
* Removed more useless compat code for now unsupported Python versions
* Sped up zstd usage in Rust contexts
* revlog: add an exception hint when processing LFS flags without the extension
* ui: keep the progress bar around when writing if stdout is not a tty
* transaction: use a ".bck" extension for all backup file