Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 27 Dec 2023 18:02:26 +0100] rev 51154
bundle: do not detect --base argument that match nothing as lack of argument
With the previous version of the code, if --base did not match anything, it will
be handled as if no --base was provided and will fallback to using discovery
with the default path. This has two issues :
- The resulting bundle won't match what the user requested,
- if not default path is configured, it will crash.
We now properly distinct between the two cases and if the --base query does not
find any changeset, we will assume that everything under --rev needs to be sent.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 27 Dec 2023 18:42:13 +0100] rev 51153
bundle: highlight misbehavior when --base does not match any revision
See next changeset for fix and details.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 18 Nov 2023 00:16:15 +0100] rev 51152
generate-churning-bundle: fix script for python3
This script has apparently not run for a long time.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 21 Dec 2023 01:45:43 +0100] rev 51151
persistent-nodemap: respect the mmap setting when refreshing data
After writing updated data, we reload the in-memory data. However, that logic
was… wrong. We were doing file read when mmap was requested and when the
configuration was requesting to not use mmap… we were using it.
This should now be fine.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 07 Dec 2023 03:49:48 +0100] rev 51150
persistent-nodemap: avoid writing nodemap for empty revlog
The format cannot encode the lack of tip_rev.
There is currently nothing known to write such empty nodemap right now, but the
change we are preparing on default reveal this issue. So I had rather fix it on
stable.
Julien Cristau <jcristau@mozilla.com> [Tue, 12 Dec 2023 11:47:48 +0100] rev 51149
histedit: remove superfluous echo() and endwin() calls (issue6859)
ncurses patchlevel 20231111 started returning an error from endwin() if
called twice without a intervening screen update.
Per Sven Joachim in
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1058041#17: "AFAICS,
invoking curses.echo() and curses.endwin() is superfluous
because curses.wrapper already does that for you, and calling
curses.endwin() twice throws an error with the newer ncurses. Removing
those two lines should fix the problem."
Raphaël Gomès <rgomes@octobus.net> [Thu, 07 Dec 2023 14:22:55 +0100] rev 51148
Added signature for changeset 71bd09bebbe3
Raphaël Gomès <rgomes@octobus.net> [Thu, 07 Dec 2023 14:22:46 +0100] rev 51147
Added tag 6.6.1 for changeset 71bd09bebbe3
Raphaël Gomès <rgomes@octobus.net> [Thu, 07 Dec 2023 14:19:02 +0100] rev 51146
relnotes: add 6.6.1
Anton Shestakov <av6@dwimlabs.net> [Sat, 02 Dec 2023 15:10:28 -0300] rev 51145
procutil: move stdin assignment outside of try-finally block
There is an stdin variable in the global scope of this module. And in the
`finally` block of this try-finally statement we're checking `if stdin is not
None`. Let's make sure we don't confuse code check tools into thinking we want
to use global stdin by moving this line of code outside of `try`.
This was caught by pytype 2023.11.21 on Python 3.11.2.
Anton Shestakov <av6@dwimlabs.net> [Sat, 02 Dec 2023 15:02:03 -0300] rev 51144
zeroconf: give inet_aton() str instead of bytes
All other uses of this function in this extension are already fixed (i.e. use
strings instead of bytes).
This was caught by pytype 2023.11.21 on Python 3.11.2.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Dec 2023 16:29:43 +0100] rev 51143
revlog: avoid wrongly updating the data file location on "divert"
If we are in the inline case, we need to align the location of the "data" file
with the temporary location of the file (i.e. "00changelog.i.a"). However we
should not do that for non-inline case… and before this changeset we had been
doing it. In addition `index_file` is already a property taking care of updating
the "segment file" filename when needed. So we can simply remove all that code.
As a result, code trying to read the diverted data before they were committed
ended deeply confused as the "00changelog.i.a" file is nothing like the
"00changelog.d" file.
However nothing corrupted data as all writing where properly handled outside of
the "segment file".
In "best" cases this small in-memory corruption of the filename when unnoticed
until the transaction was committed or rolled back and in the worse case, some
data reading was failing during the transaction and resulted in the transaction
to be rolled back. However wrong data never reached the disk, so this bug should
be have corrupted any repository.
This is not catch by tests because most test use a small repository and
therefor an inline revlog. In addition the bug only triggers when a
changelog read is done in the following "rare" situation:
- after some delayed write
- after that data have been written in a "divert" file (i.e. `00.changelog.i.a`)
- before transaction commit
- outside of a "writing" context
The issue was introduced in d83d788590a8
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 07 Dec 2023 00:34:08 +0100] rev 51142
revlog: avoid exposing delayed index entry too widely in non-inline revlog
Before this change, the index entry would be seen as "appended" to the data
file. It did not hurt too much as there are never accessed for reading, but this
was odd. So lets stop doing so.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Dec 2023 15:38:15 +0100] rev 51141
revlog: add one more assert about state of thing when splitting
This assert is currently happy, but it does not hurt to adds it to clarify
expected state and catch potential error in the future.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 02 Dec 2023 02:13:23 +0100] rev 51140
censor: fix things around inlining
The temporary revlog cannot go through the inline → split process as this would
break at transaction commit. (that might be fixable, but lets keep things
simple for now). We introduce a cleaner way to enforce this as the previous one
was broken in 6.6
On the way we remove multiple weird, fragile and broken overwrite of revlog
attributes and we focus on passing the configuration across.
We also had to update the test to actually create a non-inline revlog.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 02 Dec 2023 02:12:21 +0100] rev 51139
revlog: add a `may_inline` argument to revlog
This allow for a clean skipping of the inline feature when needed, for example
by censor.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 02 Dec 2023 02:11:20 +0100] rev 51138
revlog: allow explicit passing of config to revlog
This will be useful to fix censor in a later changeset.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 02 Dec 2023 01:06:35 +0100] rev 51137
censor: show that the `not-inline` → `inline` test is broken
The source revlog should not be inlined and it is…
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 03 Dec 2023 04:49:49 +0100] rev 51136
perf-tags: fix clear_cache_fnodes to actually clear that cache
The function was not doing it what it advertise for a long time. So we fix it
and we add a way for the perf extensions to detect broken version.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 03 Dec 2023 04:43:08 +0100] rev 51135
perf-tags: fix the --clear-fnode-cache-rev code
It seems like this code never run?
Arseniy Alekseyev <aalekseyev@janestreet.com> [Mon, 04 Dec 2023 17:20:31 +0000] rev 51134
tests: do not fail tests in a state with uncommitted .py file removal
The problem is that [hg locate] lists removed files too.
We use [hg files] instead because that does not list removed files.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 02 Dec 2023 00:52:37 -0500] rev 51133
tests: fill in the Windows pattern for `$EADDRNOTAVAIL$` matching
This fixes test-https.t on Windows.
It looks like the real error translation is "Cannot assign requested address.",
and the message here is the start of a longer description, so I'm not sure why
this part is emitted. But it's not worth digging into, as it's evidently the
same failure.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 02 Dec 2023 00:34:44 -0500] rev 51132
tests: avoid a cascading failure on Windows
The `identify --debug` command here on Windows emits
skip updating dirstate: identity mismatch
because of the debug switch, which got captured and added to `.hgtags`, and then
hijinx ensued. The point of `--debug` seemed to be to get the long hash, so
just do that with templating. I have not idea if the message is indicating a
problem- there seems to be many more of them in other tests that are not present
on Linux.
Matt Harbison <matt_harbison@yahoo.com> [Fri, 01 Dec 2023 23:58:12 -0500] rev 51131
phabricator: stringify the argument to `getattr()`
This fixes a "TypeError: getattr(): attribute name must be string" crash and
subsequent test spew. This likely broke in 18c8c18993f0 and was missed in CI
because `pytest-vcr` is missing.
Martin von Zweigbergk <martinvonz@google.com> [Mon, 13 Nov 2023 09:19:11 -0800] rev 51130
py3: pass unicode strings to hasattr() throughout
I guess we missed these instances because they're not covered by tests.
This is a graft of 1625fe807c04a490f9516bc8e14140e570c06146 that landed on
default.
Raphaël Gomès <rgomes@octobus.net> [Tue, 21 Nov 2023 16:20:58 +0100] rev 51129
relnotes: add 6.6
There are no differences between the rc and the actual release.
Raphaël Gomès <rgomes@octobus.net> [Tue, 21 Nov 2023 16:18:25 +0100] rev 51128
Added signature for changeset 26c57e7a0890
Raphaël Gomès <rgomes@octobus.net> [Tue, 21 Nov 2023 16:18:23 +0100] rev 51127
Added tag 6.6 for changeset 26c57e7a0890
Raphaël Gomès <rgomes@octobus.net> [Tue, 07 Nov 2023 16:59:37 +0100] rev 51126
Added signature for changeset 27055614b685
Raphaël Gomès <rgomes@octobus.net> [Tue, 07 Nov 2023 16:59:36 +0100] rev 51125
Added tag 6.6rc0 for changeset 27055614b685
Raphaël Gomès <rgomes@octobus.net> [Tue, 07 Nov 2023 16:07:53 +0100] rev 51124
relnotes: add 6.6rc0
Raphaël Gomès <rgomes@octobus.net> [Tue, 07 Nov 2023 15:21:11 +0100] rev 51123
branching: merge default into stable for 6.6rc0
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Nov 2023 23:17:10 +0100] rev 51122
unstable: do not consider internal phases when computing unstable
The revisions that are not part of the "working" set by other means should not
be considered for the evolution related computation.
This impact the test introduced in 5f9af8422b31 as this is actually a more
semantic fix of the issue.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Nov 2023 23:15:58 +0100] rev 51121
unstable: use the `_mutablerevs` function when computing content divergent
This is a useful function to get the revision relevant to these computation,
lets make sure all code use it, so that we can improve that `_mutablerevs`
function in a later changeset.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Nov 2023 23:15:17 +0100] rev 51120
unstable: use the `_mutablerevs` function when computing phase divergent
This is a useful function to get the revision relevant to these computation,
lets make sure all code use it, so that we can improve that `_mutablerevs`
function in a later changeset.
Raphaël Gomès <rgomes@octobus.net> [Mon, 06 Nov 2023 11:07:54 +0100] rev 51119
rust: add explicit resolver field to top-level cargo manifest file
Since Rust 1.51.0, Cargo has support for a better dependency resolver.
Workspace packages (like ours) need to explicitely set the field, so let's.
https://doc.rust-lang.org/edition-guide/rust-2021/default-cargo-resolver.html
Raphaël Gomès <rgomes@octobus.net> [Mon, 06 Nov 2023 11:06:08 +0100] rev 51118
rust: run a clippy pass with the latest stable version
Our current version of clippy is older than the latest stable.
The newest version has new lints that are moslty good advice, so let's apply
them ahead of time. This has the added benefit of reducing the noise for
developpers like myself that use clippy as an IDE helper, as well as being
more prepared for a future clippy upgrade.
Raphaël Gomès <rgomes@octobus.net> [Mon, 06 Nov 2023 11:02:18 +0100] rev 51117
rust-clippy: ignore clippy's recommendation for "useless" cast
See explanation inline.
Raphaël Gomès <rgomes@octobus.net> [Mon, 06 Nov 2023 17:12:04 +0100] rev 51116
branching: merge stable into default
Martin von Zweigbergk <martinvonz@google.com> [Tue, 31 Oct 2023 22:42:46 -0700] rev 51115
smartset: don't ignore hidden revs when intersecting
This fixes the bug I demonstrated in the previous commit, but I'm not sure at
all if it's the right way of doing it.
Martin von Zweigbergk <martinvonz@google.com> [Tue, 31 Oct 2023 22:33:45 -0700] rev 51114
tests: demonstrate crash in `unstable()` with internal-phase orphans
Raphaël Gomès <rgomes@octobus.net> [Wed, 18 Oct 2023 14:50:14 +0200] rev 51113
rust-matchers: fix quadratic complexity in `FileMatcher`
Concretely, this command:
```
$ echo hg up -r <nodeid>; time hg revert dir1 dir2 -r <othernode> --debug
hg up -r <nodeid>
real 0m14.690s
user 0m14.766s
sys 0m5.430s
```
was much slower despite using 16 cores before this change.
The approach taken here is the same one used in match.py, in exactmatcher.
This changeset was originally written by Valentin Gatien-Baron in a private
repository.
I have redacted the commit message and did a minor clean up of the code.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 27 Oct 2023 08:54:41 +0200] rev 51112
revlog: add a small cache of unfiltered chunk
This can provides a massive boost to the reading of multiple revision and the
computation of a valid delta chain.
This greatly help operation like `hg log --patch`, delta computation (helping
pull/unbundle), linkrev adjustment (helping copy tracing).
A first round of benchmark for `hg log --patch --limit 1000` shows improvement
in the 10-20% range on "small" repository like pypy or mercurial and large
improvements (about 33%) for more complex ones like netbeans and mozilla's.
These speeds up are consistent with the improvement to `hg pull` (from a server
sending poor deltas) I saw benchmarking this last year. Further benchmark will
be run during the freeze.
I added some configuration in the experimental space to be able to further test
the effect of various tuning for now. This feature should fit well in the
"usage/resource profile" configuration that we should land next cycle.
When it does not provides a benefit the overhead of the cache seem to be around
2%, a small price for the big improvement. In addition I believe we could shave
most of this overhead with a more efficent lru implementation.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 27 Oct 2023 02:57:09 +0200] rev 51111
revlog: minor refactor in the chunk gather process
We will introduce some caching in this method in the next changeset, we make
some of the most "disruptive" change first as touching this could break (and
maybe did during the development process).
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 24 Oct 2023 11:08:49 +0200] rev 51110
changelog-delay: move the delay/divert logic inside the (inner) revlog
Instead of hacking throught the vfs/opener, we implement the delay/divert logic
inside the `_InnerRevlog` and `randomaccessfile` object. This will allow to an
alternative implementation of the `_InnerRevlog` that does not need to use Python details.
As a result, the new implementation can use the transaction less agressively
and avoid some extra output since no data had been written yet. That seems like
a good side effect.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Oct 2023 05:37:37 +0200] rev 51109
revlog: add a `canonical_index_file` attribute on inner revlog
This is currently the same and the index_file but it will become more complex
when we start doing delayed write.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Oct 2023 03:41:58 +0200] rev 51108
changelog-delay: move "delayed" check to a more official API
To avoid reaching inside the inner object in the future, we needs some official
API. We put one of such API early to reduce the size of the final diff.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Oct 2023 03:29:46 +0200] rev 51107
changelog-delay: move the appender class next to randomaccessfile
We want to move the delay/divert logic at the revlog level (to have all IO
related logic in the _InnerRevlog) we start with small piece that are easy to
move on their own.