Raphaël Gomès <rgomes@octobus.net> [Mon, 29 Aug 2022 16:09:30 +0200] rev 49464
rust-matchers: fix behavior of `IncludeMatcher` with multiple includes
This change adds a test for this fix as well as an additional test case that
was useful in debugging this behavior.
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Sun, 05 Jun 2022 07:16:29 +0200] rev 49463
compare-disco: support for `file` nodes specification
This leverage the `nodefromfile` feature in core. This make it possible for
callers to no longer pay the subset computation cost (and to make sure the
subset is the right one, even when the base repository is different)
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Sat, 04 Jun 2022 19:10:51 +0200] rev 49462
compare-disco: move case parsing into its own function
This is open the way to the next changeset that will allow to specify a list of
heads.
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Sat, 04 Jun 2022 19:04:01 +0200] rev 49461
compare-disco: add an option to skip the case
If we already know the context, we can save a lot of display space by skipping
the case. This also open the way to speedup to the way we specify the subsets.
(the code is hacky, but this is a quicky and dirty debug script)
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Sat, 04 Jun 2022 18:58:07 +0200] rev 49460
compare-disco: display a header by default
This help us to understand the output.
(the code is hacky, but this is a quicky and dirty debug script)
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Sat, 04 Jun 2022 18:57:19 +0200] rev 49459
compare-disco: prepare for primitive argument parsing
We need to be able to configure a couple of things, so lets prepare the code for
it.
(the code is hacky, but this is a quicky and dirty debug script)
Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 30 Aug 2022 10:52:32 +0100] rev 49458
tests: improve portability by no longer using the flag [tar --force-local]
A different way of making sure the path is not interpreted as a URL is to never
give this path to [tar], instead making tar read from stdin.
Jason R. Coombs <jaraco@jaraco.com> [Mon, 22 Aug 2022 16:59:14 -0400] rev 49457
phase-shelve: correct unicode string to honor 'shelve.store=internal'
In the case of strip-based shelves, there should be no hidden commit found.
That's because shelve.store=internal is necessary but not sufficient to enable
phase-based shelves; internal-phase must also be set.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 12 Aug 2022 14:35:34 -0700] rev 49456
status: include `repo` in template context also for resolved paths
The `repo` object needs to be in the templater context when using
e.g. `relpath`. It has been missing there since it was the unresolved
files were added to the templated output in
07ebb567e8bb.
Jason R. Coombs <jaraco@jaraco.com> [Wed, 24 Aug 2022 15:15:04 -0400] rev 49455
shelve: remove strip and rely on prior state (
issue6735)
Jason R. Coombs <jaraco@jaraco.com> [Wed, 17 Aug 2022 10:17:15 -0400] rev 49454
shelve: in test for trailing whitespace, strip commit (
issue6735)
Jason R. Coombs <jaraco@jaraco.com> [Mon, 15 Aug 2022 10:26:01 -0400] rev 49453
shelve: demonstrate that the state is different across platforms (
issue6735)
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 16 Aug 2022 20:09:31 +0200] rev 49452
phase: rename the requirement for internal-phase (BC)
The previous requirements covers both `internal` and `archived` phase. However,
the `archived` phase is not ready for usage (while the internal one is mostly
ready for years). So we split the archived on in a dedicated requirements (see
previous changeset for details) and rename the one for internal-phase. This will
avoid older client trying to use the archived phase on `internal` only
repositories.
Since the requirements stayed experimental since its introduction. It seems
fine to drop the previous version.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 16 Aug 2022 19:04:23 +0200] rev 49451
phase: introduce a dedicated requirement for the `archived` phase
See inline documentation for details.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 16 Aug 2022 18:20:42 +0200] rev 49450
phase: introduce a dedicated function to check for the archived phase
The internal-phase is "ready to use" since its introduce. However, some
question remains around the `archived` phase. So it seem safer to move them to
separated configuration and requirements. This changeset is a first of a small
series doing this.
C. Masloch <pushbx@ulukai.org> [Wed, 20 Apr 2022 19:24:39 +0200] rev 49449
rebase: add boolean config item rebase.store-source
This allows to use rebase without recording a rebase_source extra
field. This is useful for example to build a mirror converted from
another SCM (such as svn) by converting only new revisions, and
then incrementally add them to the destination by pulling from the
newly converted (unrelated) repo and rebasing the new revisions
onto the last old already stored changeset. Without this patch the
rebased changesets would always receive some rebase_source that
would depend on the particular history of the conversion process,
instead of only depending on the original source revisions.
This is used to implement a hg mirror repo of SvarDOS (a partially
nonfree but completely redistributable DOS distribution) in the
scripts at https://hg.pushbx.org/ecm/svardos.scr/
In particular, cre.sh creates an svn mirror, upd.sh recreates an
entire hg repo from the svn mirror (which takes too long to do in a
regular job), and akt.sh uses hg convert with the config item
convert.svn.startrev to incrementally convert only the two most
recent revisions already found in the mirror destination plus any
possible new revisions. If any are found, the temporary repo's
changesets are pulled into the destination (as changesets from an
unrelated repository). Then the changesets corresponding to the new
revisions are rebased onto the prior final changeset. (Finally, the
two remaining duplicates of the prior head and its parent are
stripped from the destination repository.)
Without this patch, the particular rebase_source extra field would
depend on the order and times at which akt.sh was used, instead of
only depending on the source repository. In other words, whatever
sequence of upd.sh and akt.sh is used at whatever times, it is
desired that the final output repositories always match each other
exactly.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Thu, 25 Aug 2022 16:53:56 +0100] rev 49448
tests: remove flakiness in a time-dependent test
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 25 Jul 2022 05:30:06 +0200] rev 49447
sort-revset: introduce a `random` variant
This new `sort` variant allows to shuffle any revset. It also allow for
randomly picking element using `first`.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Fri, 26 Aug 2022 11:36:20 +0100] rev 49446
tests: remove flakiness in test-nointerrupt.t
The problem was that the reaction to the signal was racing against
the completion of the command.
Since reaction to the signal is to print a line of warning,
we can fix this by waiting for that warning to appear before
allowing the command to complete.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 25 Aug 2022 05:12:25 +0200] rev 49445
perf: properly process formatter option in perf::unbundle
Otherwise, the options are not understood.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 25 Aug 2022 05:11:48 +0200] rev 49444
perf: quiet stdout output in perf::unbundle
There a lot of repetitive bundle application message we do not care about.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 25 Aug 2022 05:10:55 +0200] rev 49443
perf: quiet stderr output in perf::unbundle
There a lot of repetitive transaction message we do not care about.
Arun Kulshreshtha <akulshreshtha@janestreet.com> [Tue, 23 Aug 2022 17:31:27 -0400] rev 49442
bisect: avoid adding irrelevant revisions to bisect state
When adding new revisions to the bisect state, it only makes sense to add
information about revisions that are under consideration (i.e., those that are
topologically between the known good and bad revisions). However, if the user
passes in a revset (e.g., '!merge()' to exclude merge commits), hg will resolve
the revset first and add all matching revisions to the bisect state (which in
this case would likely be the majority of revisions in the repo). To avoid this,
revisions should only be added to the bisect state if they are between the good
and bad revisions (and therefore relevant to the bisection).
--
Here are the results of some performance tests using the `mozilla-central` repo
(since it is one of the largest freely-available hg repositories in the wild).
These tests compare the performance of a locally-built `hg` before and after
application of this series. Note that `--noupdate` is passed to avoid including
update time (which should not vary across cases).
Setup (run between each test):
$ hg bisect --reset
$ hg bisect --noupdate --bad
56c3ad4bde5c70714b784ccf15d099e0df0f5bde
$ hg bisect --noupdate --good
57426696adaf08298af3027fa77486fee0633b13
Test using a revset that returns a very large number of revisions:
$ time hg bisect --noupdate --skip '!merge()' > /dev/null
Before:
real 0m9.398s
user 0m9.233s
sys 0m0.120s
After:
real 0m1.513s
user 0m1.425s
sys 0m0.052s
Test using a revset that is expensive to compute:
$ time hg bisect --noupdate --skip 'desc("Bug")' > /dev/null
Before:
real 0m49.853s
user 0m49.580s
sys 0m0.243s
After:
real 0m4.120s
user 0m4.036s
sys 0m0.048s
Arun Kulshreshtha <akulshreshtha@janestreet.com> [Tue, 23 Aug 2022 17:31:19 -0400] rev 49441
bisect: limit ancestors to revs topologically between good and bad revs
Previously, when constructing its dict of revisions to their ancestors, bisect
would populate the dict with ALL of the descendents of the good set, which is
a bit silly because it is impossible for a revision that is a descendent of the
minimum known bad revision to be the first bad rev. Instead it makes more sense
to limit the revisions to just those topologically between the good and bad.
Arun Kulshreshtha <akulshreshtha@janestreet.com> [Tue, 23 Aug 2022 17:31:13 -0400] rev 49440
bisect: bypass changectx when translating revs to nodes
When resolving the revset given by the user into node hashes, use the changelog
to perform the translation rather than the repo object. This avoids the overhead
of constructing a changectx which is immediately discarded.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Wed, 24 Aug 2022 16:38:13 +0100] rev 49439
rhg: make [rhg status -v] work when it needs no extra output
Add support for verbose [status] when no extra output is actually needed.
This makes it so that [rhg status] is actually useful when
[tweakdefaults] is true. (since tweakdefaults implies verbose status)
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 28 Jul 2022 16:25:21 +0200] rev 49438
perf: introduce a benchmark for delta-find
That part is responsible of serious slowdown in some `hg pull/unbundle` case. So
lets add a way to benchmark it.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 19 Jul 2022 18:32:40 -0700] rev 49437
automation: set PATH when building on Windows
Sometime in the 6.2 release cycle the Windows building automation
broke. Building the wheel and even PyOxidizer based installers now fails
with:
```
Exception: PowerShell execution failed: error: subprocess-exited-with-error
Getting requirements to build wheel did not run successfully.
exit code: 1
[1 lines of output]
Unable to find a working hg binary to extract the version from the repository tags
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
```
I have a hunch this is a regression from upgrading pip in
1c00777702da,
but I haven't verified this. It may not be, as PyOxidizer has its own
bundled Python/pip. So maybe it is something in `setup.py`.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 17 Jul 2022 15:37:34 -0700] rev 49436
contrib: update Mercurial install in bootstrap environment
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 04 Jun 2022 11:18:32 -0700] rev 49435
automation: transition to Windows Server 2022
Let's keep our Windows build environment modern by upgrading to the
latest OS.
As part of the upgrade, we pick up a migration to EC2Launch Version 2.
This has a different config mechanism. So we need to port how we manage
the administrator password.
As part of migrating to the new YAML/JSON config file mechanism, we move
the code to the powershell script that is run when the instance first
launches. This ensures that the config is retained during the reboot we
perform as part of building the Windows AMI.
The motivation for this is I'm currently unable to build the Windows
2019 AMI due to an issue installing OpenSSH. This _just works_ on
Windows Server 2022. I have no clue what the root cause is. I think
it might have something to do with Microsoft not publishing the files
in the right location.
Differential Revision: https://phab.mercurial-scm.org/D12630
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 03 Jun 2022 20:25:06 -0700] rev 49434
automation: refresh requirements
I'm hitting errors installing the old version of cffi due to an
apparent issue where older versions of cffi aren't compatible with
the modern Clang I'm using. So let's upgrade packages to unbreak
things and to keep things modern.
Differential Revision: https://phab.mercurial-scm.org/D12629
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 28 Jul 2022 15:41:45 +0200] rev 49433
debug-delta-find: introduce a quiet mode
In quiet mode, we only print the summary of the search and skip the individual
steps.
Jason R. Coombs <jaraco@jaraco.com> [Wed, 17 Aug 2022 12:03:55 -0400] rev 49432
phase-shelve: also capture the state of shelve prior to unshelve
Jason R. Coombs <jaraco@jaraco.com> [Wed, 10 Aug 2022 15:31:39 -0400] rev 49431
phase-shelve: Add test for shelve technique config
Jason R. Coombs <jaraco@jaraco.com> [Wed, 10 Aug 2022 14:39:28 -0400] rev 49430
phase-shelve: Implement a 'shelve.store' experimental config
Accepts "internal" or "strip", indicating how the shelved changes are stored. Defaults to "internal", retaining compatibility for repos with "internal-phase" already enabled.
Jason R. Coombs <jaraco@jaraco.com> [Wed, 10 Aug 2022 14:16:55 -0400] rev 49429
phase-shelve: Extract function for _target_phase
Jason R. Coombs <jaraco@jaraco.com> [Tue, 02 Aug 2022 10:29:05 -0400] rev 49428
phase-shelve: expand the tests to capture use-cases supported
Jason R. Coombs <jaraco@jaraco.com> [Thu, 28 Jul 2022 13:17:36 -0400] rev 49427
phase-shelve: honor and prefer obs shelves for existence and modified time
Jason R. Coombs <jaraco@jaraco.com> [Thu, 28 Jul 2022 12:53:11 -0400] rev 49426
phase-shelve: read patch details from a (possibly internal) node in the repo
Jason R. Coombs <jaraco@jaraco.com> [Mon, 08 Aug 2022 13:40:08 -0400] rev 49425
phase-shelve: Extract function for _optimized_match for re-use
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 17 Aug 2022 02:43:44 +0200] rev 49424
obsstore: break the repo → obstore → repo loop
This should help the garbage collector to do its job. On repository with many
markers, the memory pressure from the obsstore can get quite serious.
Raphaël Gomès <rgomes@octobus.net> [Wed, 17 Aug 2022 12:00:06 +0200] rev 49423
rust-status: ignored directories are now correctly only listed if opted into
This fixes the behavior of `hg purge` removing empty ignored directory even
without `--all` or `--ignored`.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Fri, 05 Aug 2022 14:18:13 +0100] rev 49422
test: show how purge removes ignored directories
Apparently the rust code path removes ignored directories
even though the pure code path doesn't.
Show this in tests.
Arun Kulshreshtha <akulshreshtha@janestreet.com> [Tue, 16 Aug 2022 11:19:54 -0400] rev 49421
relnotes: mention chg behavior change when given --cwd
Arun Kulshreshtha <akulshreshtha@janestreet.com> [Wed, 10 Aug 2022 15:01:50 -0400] rev 49420
dispatch: change cwd when loading local config
Previously, the `_getlocal` function would not correctly load the repo config
when given a relative `rpath` and an alternate cwd via the `wd` parameter.
Normally when `--cwd` is specified, hg changes to the given directory before
attempting to load the local config (and therefore does not specify a `wd`).
The only time the function is called with `wd` set is when hg is running as a
command server (e.g., with chg), in which case each forked worker process will
attempt to configure itself via `_getlocal` before responding to the client.
When given a relative repo path, the worker fails to load the repo config,
detects a config mismatch with the client, and enters a redirect/respawn loop.
To fix this, we can simply change to the desired working directory during
config loading. (Note that simply concatenating `wd` and `rpath` won't work
in all cases. The repo path could be something more complicated than a simple
relative path, such as a `union:` repo.)
Mathias De Mare <mathias.de_mare@nokia.com> [Mon, 08 Aug 2022 17:27:49 +0200] rev 49419
contrib: add support for rhel9
Mathias De Mare <mathias.de_mare@nokia.com> [Mon, 08 Aug 2022 17:26:04 +0200] rev 49418
packagelib: use python3 by default
Arun Kulshreshtha <akulshreshtha@janestreet.com> [Fri, 12 Aug 2022 17:27:07 -0400] rev 49417
tests: work around libmagic bug in svn subrepo tests
libmagic 5.40 introduced a bug [1] wherein ASCII text files with fewer
than 3 distinct character values would be reported as binary data
rather than as text. This bug was later fixed in version 5.41 [2].
SVN uses libmagic to determine the MIME type of added files with missing
or unknown extensions [3]. This results in test failures on systems with
libmagic 5.40 installed:
$ echo a > a
$ svn add a
- A a
+ A (bin) a
A simple workaround is to change the test file's content to include
3 distinct ASCII values (including the terminating newline).
[1] https://bugs.astron.com/view.php?id=180
[2] https://bugs.astron.com/view.php?id=261
[3] https://svnbook.red-bean.com/en/1.8/svn.advanced.props.html#idm2649
Mads Kiilerich <mads@kiilerich.com> [Mon, 11 Jul 2022 22:47:56 +0200] rev 49416
rust: bump to memmap2 0.5.3, micro-timer 0.4.0, and crossbeam-channel 0.5.0
The merge in
12adf8c695ed had conflicts in rust/Cargo.lock and
rust/hg-core/Cargo.toml . Let's ignore rust/Cargo.lock - it is regenerated.
For rust/hg-core/Cargo.toml, stable had
dd6b67d5c256 "rust: fix unsound
`OwningDirstateMap`" which introduced ouroboros (and dropped
stable_deref_trait).
Default had
ec8d9b5a5e7c "rust-hg-core: upgrade dependencies" which had a lot
of churn bumping minimum versions - also patch versions. It is indeed a good
idea to bump to *allow* use of latest package. That means that major versions
should be bumped for packages after 1.0, and for packages below 1.0 minor
versions should be bumped too. But it doesn't work to try enforce a policy of
using latest patch by bumping versions at arbitrary times.
For good or bad, the merge doesn't seem to have resolved the conflicts
correctly, and many of the minor "upgrade dependencies" were lost again.
Unfortunately, it also lost the bump of memmap2 to 0.5.3, which is needed for
Fedora packaging where 0.4 isn't available. Same with micro-timer bump to 0.4
(which already is used in rhg). crossbeam-channel bump was also lost.
This change fixes that regression by redoing these "important" lines of the
merge "correctly".
I propose this for stable, even though dependency changes on stable branches
are annoying.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Mon, 15 Aug 2022 16:12:41 +0100] rev 49415
revlog: make _partialmatch fail fast on almost-hex inputs
Before this change, resolving a revision like [
0123456789^] on
a large repo can take multiple seconds because:
- hg does not realize this is a revset, so it tries various things,
including _partialmatch(b"
0123456789^")
- after the rust lookup fails, it falls back to pure hg
- pure hg takes all-but-last chars and converts them to binary,
which *succeeds*, so it does the expensive part.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 12 Jul 2022 01:13:56 +0200] rev 49414
perf-unbundle: add a perf command to time the unbundle operation
Check documentation for details.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 11 Jul 2022 23:30:24 +0200] rev 49413
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 11 Jul 2022 23:10:55 +0200] rev 49412
perf-bundle: accept --rev arguments
This is fairly standard nowaday.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 11 Jul 2022 22:50:59 +0200] rev 49411
perf-bundle: add a new command to benchmark bundle creation time
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Jul 2022 14:11:53 +0200] rev 49410
Added signature for changeset
f69bffd00abe
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Jul 2022 14:11:35 +0200] rev 49409
Added tag 6.2.1 for changeset
f69bffd00abe
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 12 Jul 2022 01:34:18 +0200] rev 49408
bundle: introduce a --exact option
I have been wanting this options for a long time.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 11 Jul 2022 23:59:34 +0200] rev 49407
bundlespec: add documentation about existing option
We have some documentation, lets make it complete.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 27 Jul 2022 12:07:18 +0200] rev 49406
debug-discovery: apply spelling fixes from Raphaël
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 26 Jul 2022 11:10:43 +0200] rev 49405
tree-discovery: fix the request debug output and progress location
This is now associated with each request.