Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 00:54:19 +0200] rev 49269
debugindex: introduce a concept of "verbose-only" column
We are about to add a bunch of new column and most of them are probably only
relevant to --verbose.
We add some more testing of the `--verbose` mode in a sidedata context.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 00:59:44 +0200] rev 49268
debugindex: move to a flexible column
Each column is now declared as a decorated function. This will make it much
simpler to add more new column in the future.
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:13:13 +0200] rev 49267
debugindex: rename the parent column to mention nodeid
We will add new columns with the "revnum" version of the parent. It will be
useful in case we need to inspect a corrupted revlog index.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 00:59:51 +0200] rev 49266
debugindex: align column name on the right
It will be simpler to align everything on the same side, and the right seems a
better side as it match the value alignment.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 30 May 2022 23:24:14 +0200] rev 49265
debugindex: move the logic into its own module
Adding more information will significantly increase the amount of code. So we
move the code into its own module before making it more complex.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 30 May 2022 11:30:48 +0200] rev 49264
debugindex: rename to debugindex debug-revlog-index
The command dump some content of the revlog index and omit a lot of
information. I am going to make it display the missing information.
For clarity, we rename the command to explicitly mention revlog.
Manuel Jacob <me@manueljacob.de> [Mon, 30 May 2022 16:18:12 +0200] rev 49263
node: stop converting binascii.Error to TypeError in bin()
Changeset f574cc00831a introduced the wrapper, to make bin() behave like on
Python 2, where it raised TypeError in many cases. Another previous approach,
changing callers to catch binascii.Error in addition to TypeError, was backed
out after negative review feedback [1].
However, I think it’s worth reconsidering the approach. Now that we’re on
Python 3 only, callers have to catch only binascii.Error instead of both.
Catching binascii.Error instead of TypeError has the advantage that it’s less
likely to cover a programming error (e.g. passing an int to bin() raises
TypeError). Also, raising TypeError never made sense semantically when bin()
got an argument of valid type.
As a side-effect, this fixed an exception in test-http-bad-server.t. The TODO
was outdated: it was not an uncaught ValueError in batch.results() but uncaught
TypeError from the now removed wrapper. Now that bin() raises binascii.Error
instead of TypeError, it gets converted to a proper error in
wirepeer.heads.<locals>.decode() that catches ValueError (superclass of
binascii.Error). This is a good example of why this changeset is a good idea.
Catching TypeError instead of ValueError there would not make much sense.
[1] https://phab.mercurial-scm.org/D2244
Manuel Jacob <me@manueljacob.de> [Mon, 30 May 2022 00:45:00 +0200] rev 49262
revlog: make try block smaller
Making try blocks as small as possible is generally a good idea, especially
when catching very general errors like TypeError.
Manuel Jacob <me@manueljacob.de> [Mon, 30 May 2022 00:39:53 +0200] rev 49261
revlog: make round-down pattern clearer
Raphaël Gomès <rgomes@octobus.net> [Thu, 02 Jun 2022 16:24:06 +0200] rev 49260
branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 27 May 2022 02:54:20 +0200] rev 49259
test-revlog: adds a new root revision with a delta against nullrev
We add a revision with null parent but that is not the first revision of the
revlog. It make it a different a case that is worthy of testing.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 27 May 2022 02:52:46 +0200] rev 49258
test-revlog: adds a non-root revision with a delta against nullrev
Using a revision with non-null parents makes it a different case that is worthy
of testing.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 27 May 2022 03:14:23 +0200] rev 49257
test-revlog: update the patch used to test delta againts nullrev
We need to be careful to not create invalid delta for changelog. Changelog is
special because it does not use any delta in practice and don't use general
delta in its format.
Using the new patch will help use to test more cases.
Anton Shestakov <av6@dwimlabs.net> [Fri, 27 May 2022 14:37:12 +0400] rev 49256
tests: remove hg10 requirement from test-check-pylint.t
Since pylint does its own directory traversal to find files to check and
doesn't use hg locate command, this requirement is not valid.
See also a29f071751df.
Anton Shestakov <av6@dwimlabs.net> [Fri, 27 May 2022 14:33:32 +0400] rev 49255
tests: add hg10 requirement to test-check-module-imports.t
This requirement exists to make sure for hg has locate command, which is used
in this test file for getting a list of files to check. Since in theory current
versions of tests could be run on older hg, it doesn't hurt to mark even this
version requirement (as old as it is).
See also: a29f071751df.
Manuel Jacob <me@manueljacob.de> [Sun, 22 May 2022 00:10:58 +0200] rev 49254
worker: implement _blockingreader.readinto() (issue6444)
The core logic for readinto() was already implemented in read(), so this is
mostly extracting that code into its own method.
Another fix for issue6444 was committed to the stable branch: 2fe4efaa59af.
That is a minimal fix that implements readinto() only on Python versions that
require readinto() (3.8.0 and 3.8.1), which is the right approach for the
stable branch. However, I think that this changeset has its value. It improves
performance in cases when pickle can use readinto(), it reduces code
duplication compared to the other patch, and by defining readinto() on all
Python versions, it makes behavior more consistent across all Python versions.
This changesets reverts the other change.
Manuel Jacob <me@manueljacob.de> [Sat, 21 May 2022 23:31:30 +0200] rev 49253
worker: stop relying on garbage collection to release memoryview
On CPython, before resizing the bytearray, all memoryviews referencing it must
be released. Before this change, we ensured that all references to them were
deleted. On CPython, this was enough to set the reference count to zero, which
results in garbage collecting and releasing them.
On PyPy, releasing the memoryviews is not necessary because they are implemented
differently. If it would be necessary however, ensuring that all references are
deleted would not be suffient because PyPy doesn’t use reference counting.
By using with statements that take care of releasing the memoryviews, we ensure
that the bytearray is resizable without relying on implementation details. So
while this doesn’t fix any observable bug, it increases compatiblity with other
and future Python implementations.
Manuel Jacob <me@manueljacob.de> [Sat, 21 May 2022 22:24:02 +0200] rev 49252
worker: add docstring to _blockingreader
Manuel Jacob <me@manueljacob.de> [Sat, 21 May 2022 22:22:19 +0200] rev 49251
worker: explain why pickle reading stream has to be unbuffered
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 17 May 2022 13:53:14 +0100] rev 49250
bundle: quick fix to ludicrous performance penalty
We tried a `hg bundle --base ':(tip^)' --rev 'all()'` on a large repository and
it spent 3 minutes on this 2 list comprehensions. This change remove this cost.
There are still a lot of low hanging fruits as the command still take 30
seconds. However this is a trivial patch with a massive speedup so I'll just
sent it.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 20 May 2022 14:27:46 +0200] rev 49249
deltas: add a debug-delta-find command to analyse delta search
See command documentation for details.
For some reason, pytype is confused by our usage of None/deltainfo variable, so
I had to quiet it.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 19 May 2022 23:39:42 +0100] rev 49248
deltas: add a `debug.revlog.debug-delta` config option enable output
This provide a way to enable the code introduced in the previous changeset. This
will provide a large amount of output when applying a bundle with details about
each delta "computation".
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 19 May 2022 23:39:23 +0100] rev 49247
deltas: add code to display information about the result of `finddeltainfo`
I have been looking into performance issue around pull and getting more
information about the computation and time involved into applying each revision
is very useful. There will be various way to use this new output, so I am
introducing the code first.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 21 Apr 2022 11:32:51 +0200] rev 49246
test: update `test-sparse-revlog` output
This got changed at some point.
Manuel Jacob <me@manueljacob.de> [Wed, 25 May 2022 17:23:16 +0200] rev 49245
branching: fix wrong merge conflict resolution from 13dfad0f9f7a
13dfad0f9f7a merged stable into default, but accidentally added the
_blockingreader class from stable (but deindented) instead of merging the
changes from stable (2fe4efaa59af) into the existing _blockingreader class.
This resulted in the _blockingreader being there two times.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 19 May 2022 00:51:36 +0100] rev 49244
debugdeltachain: detect a special case where parents are "skipped"
See inline comment for details, this is a case where the delta is neither
against p1 or p2, Yet it is still a simple delta part of a simple chain.
We now display them as `skip1/skip2` instead of `other`.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 18 May 2022 17:29:03 +0100] rev 49243
debugdeltachain: document the possible value for deltatype
So that one can understand what is displayed by the command.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 18 May 2022 17:22:32 +0100] rev 49242
debugdeltachain: also display p1/p2
Looking at the parents is a common need when trying to understanding why a delta
was chosen, having it readily available helps a lot.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 18 May 2022 16:50:55 +0100] rev 49241
debugdeltachain: glob variance of "test-generaldelta"
We mostly care about generaldelta happening, the exact details of storage size
variation is not really important so we can glob it instead of having multiple
lines for each variances.
This will make updating the output of the command simpler.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 18 May 2022 16:07:55 +0100] rev 49240
debugdeltachain: use the symbolic constant to access entry information
This is more robust and easier to read
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 18 May 2022 15:55:14 +0100] rev 49239
debugdeltachain: distinct between snapshot and "other" diffs
Snapshot are expected to be healthy behavior, while "other" is a bit more
suspicious. So we distinct between the two to make it easier to inspect
repositories.
Raphaël Gomès <rgomes@octobus.net> [Wed, 25 May 2022 13:28:24 +0200] rev 49238
branching: merge stable into default
Anton Shestakov <av6@dwimlabs.net> [Tue, 24 May 2022 19:09:24 +0400] rev 49237
revlog: use appropriate format char for int ("i" instead of "I")
From https://docs.python.org/3.8/c-api/arg.html#numbers :
i (int) [int]
Convert a Python integer to a plain C int.
I (int) [unsigned int]
Convert a Python integer to a C unsigned int, without overflow checking.
Anton Shestakov <av6@dwimlabs.net> [Tue, 17 May 2022 21:49:36 +0400] rev 49236
revlog: use %d to format int instead of %lu (issue6565)
The issue says gcc warns that the data types don't match. I couldn't reproduce
the warning locally for some reason, but this patch shouldn't break things.
Maybe %lu was simply a copy-paste error from 6b1eae313b2f
(https://phab.mercurial-scm.org/D10625).
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 06 Apr 2021 03:24:26 +0200] rev 49235
filelog: show the passed argument on error
The error now do more than stating what it need. It also state what it got.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 06 Apr 2021 03:23:46 +0200] rev 49234
manifest: improve error message in case for tree manifest
In the case where tree manifest is not enabled but we still receive an sub
directory information for the manifest. The error now inform which sub-directory
was passed.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 13 May 2022 15:19:57 +0200] rev 49233
branchmap: use a context manager when writing the branchmap
This is cleaner and safer. The previous code date from long before we had
context manager available.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 05 Apr 2022 05:01:58 +0200] rev 49232
auto-upgrade: skip the operation if the repository cannot be locked
This seems like a fine default behavior for now. If some users wants something
more aggressive we can make the behavior configurable in the future.
Differential Revision: https://phab.mercurial-scm.org/D12619
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 05 Apr 2022 04:45:48 +0200] rev 49231
auto-upgrade: add a test case where the repository is already locked
This show the current behavior when the repository to auto-upgrade is already
locked.
The current behavior is to abort, which is probably not great. Now that we have
a proper test, we can think about the behavior we wants in a later tests.
Differential Revision: https://phab.mercurial-scm.org/D12618
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 05 Apr 2022 04:43:34 +0200] rev 49230
wait-on-file: properly wait on any files and symlink
This make the utility more useful, for example to wait on a lock file.
We also add an explicit -L check since the lock are "weird" symlink.
Differential Revision: https://phab.mercurial-scm.org/D12617
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 05 Apr 2022 04:41:09 +0200] rev 49229
debuglock: make the command more useful in non-interactive mode
The existing prompt mode simply release the lock immediately in non-interactive
mode. That is quite useless in the test so now the non-interactive mode simply
wait for a signal.
Differential Revision: https://phab.mercurial-scm.org/D12616
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 05 Apr 2022 03:36:31 +0200] rev 49228
auto-upgrade: add a test case with no permission to lock the repository
This show the current behavior when the repository is unlockable.
The current behavior is to abort, which is probably not great. Now that we have
a proper test, we can think about the behavior we want in a later changeset.
Differential Revision: https://phab.mercurial-scm.org/D12615
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 22 Mar 2022 14:14:52 +0100] rev 49227
auto-upgrade: introduce a way to auto-upgrade to/from dirstate-v2
This is similar to what we introduced for `share-safe`, but apply to the
tracked-hint feature.
Differential Revision: https://phab.mercurial-scm.org/D12614
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 05 Apr 2022 05:20:05 +0200] rev 49226
auto-upgrade: introduce a way to auto-upgrade to/from tracked-hint
This is similar to what we introduced for `share-safe`, but apply to the
tracked-hint feature.
Differential Revision: https://phab.mercurial-scm.org/D12613
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 04 Apr 2022 19:30:32 +0200] rev 49225
upgrade: split some logic from UpgradeOperation
The logic for automatic-upgrade and the upgrade-repo should be able to use the
same code. However that code often need an UpgradeOperation object to function.
So we start spliting the Operation into a minimal component that we will be
able to reuse outside of the "classic" upgrade path.
We will put the base-class to use in the next changeset.
Differential Revision: https://phab.mercurial-scm.org/D12612
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 05 Apr 2022 05:19:47 +0200] rev 49224
auto-upgrade: introduce a way to auto-upgrade to/from share-safe
This is the first "automatic-upgrade" capability. In the following commits,
similar features are coming for other "fast to upgrade" formats.
This is different from the `safe-mismatch.source-not-safe` and
`safe-mismatch.source-safe` configuration that deal with mismatch between a
share and its share-source. Here we are dealing with mismatch between a
repository configuration and its actual format.
We will need further work for cases were the repository cannot be locked. A
basic protection is in place to avoid a infinite loop for now, but it will get
proper attention in a later changeset.
Differential Revision: https://phab.mercurial-scm.org/D12611
Raphaël Gomès <rgomes@octobus.net> [Fri, 15 Apr 2022 22:02:07 +0200] rev 49223
rust: make requirements public
These can be used by any client crates (including `rhg`), no need to make them
private to the crate.
Differential Revision: https://phab.mercurial-scm.org/D12610
Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 10 May 2022 20:30:26 +0100] rev 49222
clone: use better names for temp files
Before this commit, the file names are /tmp/tmpn8smvlr8
After this commit, they are more like /tmp/hg-clone-n8smvlr8/00manifest.ndb3qj52v6,
which makes it much clearer what these files correspond to.
Differential Revision: https://phab.mercurial-scm.org/D12623
Anton Shestakov <av6@dwimlabs.net> [Mon, 02 May 2022 16:27:14 +0400] rev 49221
tests: make sure .js files stay in ASCII encoding (issue6559)
Differential Revision: https://phab.mercurial-scm.org/D12620
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 13 May 2022 15:48:53 +0200] rev 49220
ci: have rust-cargo-test inherit from all
This help changing configuration for everything at the same time.
This was initially the case before being dropped by mistake in 0ddd5e1f5f67.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 19 May 2022 01:34:51 +0100] rev 49219
copies-sdc: mark upgrade action as changelog only
We don't need to recompute the other revlog to add the changelog-v2 feature.
This simplify upgrade that use copies-sdc (as shown in the tests).
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 19 May 2022 01:24:16 +0100] rev 49218
changelog-v2: mark upgrade action as changelog only
We don't need to recompute the others revlog to add the changelog-v2 feature.
This does not have much effect in practice as the `copies-sdc` upgrade still
triggers the other revlogs. This will be fixed in the next changeset.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 19 May 2022 01:40:37 +0100] rev 49217
copies-sdc: no longer suppress the upgrade output
To make sure the upgrade simplification we need are taken into account, we need
to see more of the output of `debugupgraderepo`. The --quiet flag simplify the
output a lot and globing the `preserved` field mean this output should remains
stable across (future) unrelated changes.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 19 May 2022 01:37:59 +0100] rev 49216
copies-sdc: no longer use revlogv2 in `test-copies-in-changeset.t`
We only need changelog-v2 and its usage is automatically inferred. So we can
simplify the test by dropping this.
This is important to test future simplification of the update process in the
coming changesets.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 16 May 2022 23:12:49 +0100] rev 49215
fix-ci: backed out changeset 308e45f7b455
The chg variant of the CI see a failure on `tests/test-narrow-pull.t`.
Bisecting point the failure as starting at this small changeset…
Backing it out, restore the CI on default. It was never broken on
stable, which is even more puzzling.
Raphaël Gomès <rgomes@octobus.net> [Tue, 17 May 2022 12:05:09 +0100] rev 49214
branching: merge stable into default
Martin von Zweigbergk <martinvonz@google.com> [Thu, 12 May 2022 07:36:37 -0700] rev 49213
branching: merge with stable
Martin von Zweigbergk <martinvonz@google.com> [Thu, 21 Apr 2022 10:39:52 -0700] rev 49212
rust-repo: make `Send` by not storing functions in `LazyCell`
We (Google) want to use `Repo` in a context where we can store it in
`Mutex<Repo>`. However, that currently doesn't work because it's not
`Send` because the `LazyCell` initialization functions are not
`Send`. It's easy to fix that by passing them to the `get_or_init()`
and `get_mut_or_init()` functions. We'll probably also want `Repo` to
be `Send` (and even `Sync`) in core later, so this seems like a step
in the right direction.
Differential Revision: https://phab.mercurial-scm.org/D12582
Augie Fackler <augie@google.com> [Thu, 05 May 2022 14:45:28 -0400] rev 49211
obsolete: remove two unused constants
I'm not sure what these constants were intended for, but they have no
users so it's time to say goodbye.
Differential Revision: https://phab.mercurial-scm.org/D12609
Augie Fackler <augie@google.com> [Thu, 05 May 2022 14:47:26 -0400] rev 49210
node: manually implement Debug
I got too irritated today with the default Debug implementation of
hg::revlog::Node while playing with a new parser. This isn't quite
what I wanted, but it wasn't much code and it at least gives you
output that's easy to visually compare to a node.hex()ed identifier
from the Python side of things.
Sadly, this doesn't influence the output in lldb or the VSCode
debugger extension that uses lldb under the covers, but it at least
means debug prints are a little more useful.
Differential Revision: https://phab.mercurial-scm.org/D12608