Manuel Jacob <me@manueljacob.de> [Tue, 31 May 2022 01:06:29 +0200] rev 49297
convert: inline Python 3 variant of url2pathname_like_subversion()
Manuel Jacob <me@manueljacob.de> [Tue, 31 May 2022 00:50:29 +0200] rev 49296
py3: constant-fold some `pycompat.ispy3`
Manuel Jacob <me@manueljacob.de> [Sun, 29 May 2022 15:38:01 +0200] rev 49295
py3: use `zip()` instead of trying to use `itertools.izip()`
Manuel Jacob <me@manueljacob.de> [Sun, 29 May 2022 15:33:39 +0200] rev 49294
py3: replace mention of “xrange” in docstring by “range”
Manuel Jacob <me@manueljacob.de> [Sun, 29 May 2022 15:32:43 +0200] rev 49293
py3: remove xrange() compatibility code
Some code used its own xrange() compatibility code instead of
pycompat.xrange().
Manuel Jacob <me@manueljacob.de> [Sun, 29 May 2022 15:17:27 +0200] rev 49292
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de> [Sun, 29 May 2022 12:38:54 +0200] rev 49291
hgweb: remove dead code handling UnicodeDecodeError
I’m quite confident that the error can’t happen on Python 3, as the main
motivation for separating bytes and str in Python 3 was to avoid this class of
errors.
Manuel Jacob <me@manueljacob.de> [Sun, 29 May 2022 12:28:31 +0200] rev 49290
cleanup: remove import of already imported module
Manuel Jacob <me@manueljacob.de> [Sun, 29 May 2022 12:25:24 +0200] rev 49289
cleanup: rename some functions to avoid redefinitions
Manuel Jacob <me@manueljacob.de> [Sat, 28 May 2022 22:08:13 +0200] rev 49288
thirdparty: remove Python 2-specific selectors2 copy
The selectors module was added in Python 3.4. Because we require Python 3.6, it
will always be available. Therefore the selectors2 module is not imported.
I’ve verified that the selectors2-specific workaround in commandserver.py is not
necessary with the selectors module from the standard library. It returns an
empty list if timeout was exceeded.
The pytype directive was needed to silence the following error:
File "/tmp/mercurial-ci/mercurial/worker.py", line 299, in _posixworker: No attribute 'close' on int [attribute-error]
In Union[_typeshed.HasFileno, int]
File "/tmp/mercurial-ci/mercurial/worker.py", line 299, in _posixworker: No attribute 'close' on _typeshed.HasFileno [attribute-error]
In Union[_typeshed.HasFileno, int]
Raphaël Gomès <rgomes@octobus.net> [Wed, 08 Jun 2022 15:46:04 +0200] rev 49287
branching: merge stable into default
Manuel Jacob <me@manueljacob.de> [Thu, 02 Jun 2022 23:57:56 +0200] rev 49286
chg: replace mercurial.util.recvfds() by simpler pure Python implementation
On Python 3, we have socket.socket.recvmsg(). This makes it possible to receive
FDs in pure Python code. The new code behaves like the previous
implementations, except that it’s more strict about the format of the ancillary
data. This works because we know in which format the FDs are passed.
Because the code is (and always has been) specific to chg (payload is 1 byte,
number of passed FDs is limited) and we now have only one implementation and
the code is very short, I decided to stop exposing a function in
mercurial.util.
Note on terminology: The SCM_RIGHTS mechanism is used to share open file
descriptions to another process over a socket. The sending side passes an array
of file descriptors and the receiving side receives an array of file
descriptors. The file descriptors are different in general on both sides but
refer to the same open file descriptions. The two terms are often conflated,
even in the official documentation. That’s why I used “FD” above, which could
mean both “file descriptor” and “file description”.
Anton Shestakov <av6@dwimlabs.net> [Mon, 06 Jun 2022 13:58:32 +0400] rev 49285
parsers: drop one extra argument to PyErr_Format
GCC gave the following warning during `make local`:
mercurial/cext/parsers.c: In function 'dirstate_item_from_v1_data':
mercurial/cext/parsers.c:413:30: warning: too many arguments for format [-Wformat-extra-args]
413 | "unknown state: `%c` (%d, %d, %d)", state, mode,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To reproduce, you might need to add the -Wformat-extra-args flag, because it
isn't present for me when building for the default python3. But I can see this
warning while simply building 6.1 with `make PYTHON=python2 clean local`.
I don't think this NULL was useful, because other instances of PyErr_Format()
don't have any NULLs as the final argument, but keep in mind that I don't know
python's C API.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 03 Jun 2022 17:39:58 +0200] rev 49284
search-discovery-case: update documentation of a function
We return data, it is simpler when we know what these data means.
Manuel Jacob <me@manueljacob.de> [Sun, 22 May 2022 03:50:34 +0200] rev 49283
worker: avoid potential partial write of pickled data
Previously, the code wrote the pickled data using os.write(). However,
os.write() can write less bytes than passed to it. To trigger the problem, the
pickled data had to be larger than 2147479552 bytes on my system.
Instead, open a file object and pass it to pickle.dump(). This also has the
advantage that it doesn’t buffer the whole pickled data in memory.
Note that the opened file must be buffered because pickle doesn’t support
unbuffered streams because unbuffered streams’ write() method might write less
bytes than passed to it (like os.write()) but pickle.dump() relies on that all
bytes are written (see https://github.com/python/cpython/issues/93050).
The side effect of using a file object and a with statement is that wfd is
explicitly closed now while it seems like before it was implicitly closed by
process exit.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 03:12:23 +0200] rev 49282
mr-template: drop the "title and description"
I though I would affect the template in the menu itself, however it just a
normal piece of text that should not be here.
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:32:33 +0200] rev 49281
debugindex: add a `rank` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:34:33 +0200] rev 49280
debugindex: add a `sd-chunk-size` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:34:21 +0200] rev 49279
debugindex: add a `sidedata-offset` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:34:43 +0200] rev 49278
debugindex: add a `sd-comp-mode` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:33:36 +0200] rev 49277
debugindex: add a `chunk-size` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:33:13 +0200] rev 49276
debugindex: add a `data-offset` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:33:47 +0200] rev 49275
debugindex: add a `comp-mode` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:33:25 +0200] rev 49274
debugindex: add a `flags` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:34:10 +0200] rev 49273
debugindex: add a `delta-base` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:43:17 +0200] rev 49272
debugindex: add a `full-size` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:32:54 +0200] rev 49271
debugindex: add a `p2-rev` column
This will be useful in case of corrupted index.
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:32:45 +0200] rev 49270
debugindex: add a `p1-rev` column
This will be useful in case of corrupted index.
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