outgoing: add a simple fastpath when there is no common
This further speed up case like `hg bundle --all` for larger repository.
### data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog
# benchmark.name = hg.command.bundle
# bin-env-vars.hg.flavor = default
# bin-env-vars.hg.py-re2-module = default
# benchmark.variants.revs = all
# benchmark.variants.type = none-streamv2
before: 316.749699
after: 311.165461 (-1.76%, -5.58)
There is further work to be done in this area like not doing any outgoing
computation in the stream case for example. however the recent changes already
gives use a large win for a small amount of local work.
### benchmark.name = hg.command.bundle
# bin-env-vars.hg.flavor = default
# bin-env-vars.hg.py-re2-module = default
# benchmark.variants.revs = all
# benchmark.variants.type = none-streamv2
## data-env-vars.name = mercurial-public-2024-03-22-zstd-sparse-revlog
pre-%ln-change: 1.263859
the-%ln-change: 0.700229 (-44.60%, -0.56)
prev-changeset: 0.496050 (-60.75%, -0.77)
this-changeset: 0.495243 (-60.81%, -0.77)
## data-env-vars.name = tryton-public-2024-03-22-zstd-sparse-revlog
pre-%ln-change: 2.975765
the-%ln-change: 1.870798 (-37.13%, -1.10)
prev-changeset: 1.461583 (-50.88%, -1.51)
this-changeset: 1.469185 (-50.63%, -1.51)
## data-env-vars.name = pypy-2024-03-22-zstd-sparse-revlog
pre-%ln-change: 4.540080
the-%ln-change: 3.401700 (-25.07%, -1.14)
prev-changeset: 2.915810 (-35.78%, -1.62)
this-changeset: 2.911643 (-35.87%, -1.63)
## data-env-vars.name = heptapod-public-2024-03-25-zstd-sparse-revlog
pre-%ln-change: 10.138396
the-%ln-change: 7.750458 (-23.55%, -2.39)
prev-changeset: 6.665565 (-34.25%, -3.47)
this-changeset: 6.672078 (-34.19%, -3.47)
## data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog
pre-%ln-change: 399.484481
the-%ln-change: 346.508952 (-13.26%, -52.98)
prev-changeset: 316.749699 (-20.71%, -82.73)
this-changeset: 311.165461 (-22.11%, -88.32)
= Mercurial 6.7.2 =
Exceptional release following a large performance regression when cloning.
We are setting up automated benchmarks to reduce the likelihood of regressions
of the sort from happening in the future.
* phases: avoid a potentially costly dictionary interation in some case
* phases: update the phase set as we go during retract boundary
* bundle2: make the "hgtagsfnodes" part advisory
= Mercurial 6.7.1 =
Exceptional release following a crash found in delta code that can be triggered
with complex repository shapes.
* delta-search: fix crash caused by unbound variable
* sshpeer: fix path when handling invalid url exception
* subrepo: fix normalizing paths with scheme
= Mercurial 6.7 =
As usual, a *lot* of patches don't make it to this list.
== New Features ==
* JSON templates can now use structured diffstat data
* Support rhg status --rev --rev
* The index for REVLOGv1 now has a Rust implementation
* Improved `hg censor`'s output
* censor: add a command flag to skip the head checks
* censor: accept multiple revision in a single call
* usage: add a `usage.repository-role` config
* branchmap: use mmap for faster revbranchcache loading
* crecord: enable search hotkeys (issue6834)
* hg-core: separate timestamp and extra methods
* annotate: limit output to range of lines
* unbundle: faster computation of changed heads
* Large improvements of some of the phases code (23950e39281f)
* rust-filepatterns: export glob_to_re function
== New Experimental Features ==
* Introduce `hg admin::chainsaw-update` for automation and *advanced* users
== Bug Fixes ==
* templatekw: fix inconsistency of diffstat with diff.merge
* The endless stream of Python 3 cleanups continues
* Improved setup.py robustness
* Improved test suite robustness
* add: don't attempt to add back removed files unless explicitly listed
* statprof: handle `lineno == None` in more cases
* rust: fix cargo doc for hg-cpython
* rust-python-index: don't panic on a corrupted index when calling from Python
* debugindexstats: handle the lack of Rust support better
* matchers: use correct method for finding index in vector
* narrow: strip trailing `/` from manifest dir before matching it
* cext: fix potential memory leaks of list items appended with PyList_Append
* doc: document that labels must have a dot in them to have an effect
* debugformat: fix formatting for compression level
* obsutil: sort metadata before comparing in geteffectflag()
* crecord: drop calls to `curses.endwin()`
* rust-index: don't use mutable borrow for head-diff computation
* rust-index: don't use mutable borrow to computed filtered heads
== Backwards Compatibility Changes ==
Users of the Rust extensions and/or `rhg` should be aware that the new Rust
index can result in a performance degradation for push/pull on repositories
*not* using `persistent-nodemap` (see `hg help config.format.use-persistent-nodemap`).
If this is something that matters to you, please reach out to us as this is not
an insurmountable obstacle. This is a choice base on the assumption that
there are few people in this situation and our time should be spent on more
pressing matters.
== Internal API Changes ==
* 62913:498017baa34b "cleanup: remove some code scheduled to be removed after 5.9"
* 62914:88ef80210d67 "cleanup: drop `dirstate.is_changing_parent` deprecated since 6.5"
* 62915:591845f89ada "cleanup: drop `path.pushloc` deprecated since 6.5"
* 62916:d8f65fc72e7b "cleanup: drop deprecated config attribute on the revlog class"
* 62917:5c9c41273367 "cleanup: turn `pathsuboption` deprecation warning into an error"
* 62918:7b837fabc990 "cleanup: turn `wrappedfunction` deprecation warning into an error"
* 62919:eda075d7b2ac "cleanup: turn `wrapfunction` deprecation warning into an error"
* 62920:c845479fc64d "cleanup: drop the `bytes` compatibility for attribute related function"
* 63464:dcaa2df1f688 "changelog: never inline changelog"
* 63465:a93e52f0b6ff "changelog: disallow delayed write on inline changesets"
* 63825:79cd29d598af "dirstate: make the `transaction` argument of `setbranch` mandatory"
== Miscellaneous ==
* perf: support --template on perf::phases
* perf: add a --as-push option to perf::unbundle
* debug: add a debug::unbundle command that simulate the unbundle from a push
* Lots of refactorings to prepare for performance improvements and remove tech debt