Manuel Jacob <me@manueljacob.de> [Thu, 02 Jun 2022 04:39:49 +0200] rev 49274
py3: don’t subscript socket.error
On Python 2, socket.error was subscriptable. On Python 3, socket.error is an
alias to OSError and is not subscriptable. The except block passes the
exception to self.send_error(). This fails on both Python 2 (if it was
executed) and Python 3, as it expects a string.
Getting the attribute .strerror works on Python 2 and Python 3, and has the
same effect as the previous code on Python 2.
Anton Shestakov <av6@dwimlabs.net> [Mon, 06 Jun 2022 13:58:32 +0400] rev 49273
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.
Manuel Jacob <me@manueljacob.de> [Thu, 02 Jun 2022 02:05:11 +0200] rev 49272
demandimport: eagerly load msvcrt module on PyPy
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 03 Jun 2022 17:39:58 +0200] rev 49271
search-discovery-case: update documentation of a function
We return data, it is simpler when we know what these data means.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 03:08:15 +0200] rev 49270
ci: drop the phabricator refresh step
Now that phabricator is no longer in us, we should avoid this useless step to
save time and simplify things.
Manuel Jacob <me@manueljacob.de> [Sun, 22 May 2022 03:50:34 +0200] rev 49269
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 49268
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.
Manuel Jacob <me@manueljacob.de> [Sun, 22 May 2022 01:48:20 +0200] rev 49267
hghave: make black version regex work with newer versions of black
Black commit
117891878e5be4d6b771ae5de299e51b679cea27 (included in black >=
21.11b0) dropped the string "version " from the output of "black --version". To
make the regex work with newer black versions, make matching of "version "
optional.
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:32:33 +0200] rev 49266
debugindex: add a `rank` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:34:33 +0200] rev 49265
debugindex: add a `sd-chunk-size` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:34:21 +0200] rev 49264
debugindex: add a `sidedata-offset` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:34:43 +0200] rev 49263
debugindex: add a `sd-comp-mode` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:33:36 +0200] rev 49262
debugindex: add a `chunk-size` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:33:13 +0200] rev 49261
debugindex: add a `data-offset` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:33:47 +0200] rev 49260
debugindex: add a `comp-mode` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:33:25 +0200] rev 49259
debugindex: add a `flags` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:34:10 +0200] rev 49258
debugindex: add a `delta-base` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:43:17 +0200] rev 49257
debugindex: add a `full-size` column
Pierre-Yves DAVID <pierre-yves.david@octobus.net> [Wed, 01 Jun 2022 01:32:54 +0200] rev 49256
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 49255
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 49254
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 49253
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 49252
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 49251
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 49250
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 49249
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 49248
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 49247
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 49246
revlog: make round-down pattern clearer
Mads Kiilerich <mads@kiilerich.com> [Tue, 24 May 2022 14:29:44 +0200] rev 49245
rust: relax im-rc dependency to allow minor updates
This "15.0.*" requirement came from
0d99778af68a and is now replaced with plain
"15.0".
AFAICS, it really should allow (but not necessarily require) im-rc 15.1 .
Narrow requirement requirements with wildcard in the version is not used in
other places.
Raphaël Gomès <rgomes@octobus.net> [Thu, 02 Jun 2022 16:24:06 +0200] rev 49244
branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net> [Thu, 02 Jun 2022 16:19:39 +0200] rev 49243
Added signature for changeset
6b10151b9621
Raphaël Gomès <rgomes@octobus.net> [Thu, 02 Jun 2022 16:19:31 +0200] rev 49242
Added tag 6.1.3 for changeset
6b10151b9621
Sandu Turcan <idlsoft@gmail.com> [Tue, 03 May 2022 21:44:30 -0400] rev 49241
narrow_widen_acl: enforce narrowacl in narrow_widen (SEC)
Reviewer note: this was sent by the author as a simple bugfix, but can be
considered a security patch, since it allows users to access things outside
of the ACL, hence the (SEC) prefix.
However, this affects the `narrow` extention which is still marked as
experimental and has relatively few users aside from large companies with
their own security layers on top from what we can gather.
We feel (Alphare: or at least, I feel) like pinging the packaging list is
enough in this case.
Raphaël Gomès <rgomes@octobus.net> [Mon, 30 May 2022 11:52:31 +0200] rev 49240
chg: ignore already closed fds when cleaning up
This should fix this error we see in the CI from time to time:
```
--- /tmp/mercurial-ci/tests/test-chg.t
+++ /tmp/mercurial-ci/tests/test-chg.t.err
@@ -187,6 +187,26 @@
$ chg bulkwrite --pager=on --color no --config ui.formatted=True
paged! 'going to write massive data\n'
killed! (?)
+ Traceback (most recent call last):
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/commandserver.py", line 509, in _serverequest
+ sv.cleanup()
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/chgserver.py", line 382, in cleanup
+ self._restoreio()
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/chgserver.py", line 461, in _restoreio
+ os.close(fd)
+ OSError: [Errno 9] Bad file descriptor
+ Traceback (most recent call last):
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/commandserver.py", line 693, in _acceptnewconnection
+ self._runworker(conn)
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/commandserver.py", line 744, in _runworker
+ prereposetups=[self._reposetup],
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/commandserver.py", line 509, in _serverequest
+ sv.cleanup()
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/chgserver.py", line 382, in cleanup
+ self._restoreio()
+ File "/tmp/hgtests._uvojvqb/install/lib/python/mercurial/chgserver.py", line 461, in _restoreio
+ os.close(fd)
+ OSError: [Errno 9] Bad file descriptor
[255]
```
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 27 May 2022 02:54:20 +0200] rev 49239
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 49238
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 49237
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 49236
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 49235
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, 29 May 2022 14:44:19 +0200] rev 49234
tests: work around non-thread-safeness of sysconfig.get_config_var()
Manuel Jacob <me@manueljacob.de> [Sun, 22 May 2022 00:10:58 +0200] rev 49233
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 49232
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 49231
worker: add docstring to _blockingreader
Manuel Jacob <me@manueljacob.de> [Sat, 21 May 2022 22:22:19 +0200] rev 49230
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 49229
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 49228
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 49227
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 49226
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 49225
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 49224
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 49223
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 49222
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 49221
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 49220
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 49219
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 49218
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 49217
branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 24 May 2022 11:19:24 +0200] rev 49216
workflow: add a default template for Merge Request
Introduce a first basic template to try the feature.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 24 May 2022 10:34:42 +0200] rev 49215
run-tests: prevent race-condition when picking a channel
Before this, multiple jobs could search the list at the same time and pick the
same free channel.
We now project this search/assignment with a simple lock.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 24 May 2022 09:57:53 +0200] rev 49214
run-tests: send the test result after freeing the channel
Sending the message about the test being "done" signals to the main thread that
a new test can be started. Before this changeset, we sent this signal before
freeing the channel, there is room for a race condition where a new test would
search for a channel before the old test freed the one it used.
This is an example of the failure it would produce:
https://foss.heptapod.net/mercurial/mercurial-devel/-/jobs/552404
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 24 May 2022 09:36:40 +0200] rev 49213
run-tests: also send a message in the Keyboard interrupt case
The next patch will do something equivalent, so lets do the change in an
independant changeset first in case we need to bisect something in the future.
Anton Shestakov <av6@dwimlabs.net> [Tue, 24 May 2022 19:09:24 +0400] rev 49212
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 49211
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).
Arseniy Alekseyev <aalekseyev@janestreet.com> [Sun, 22 May 2022 14:21:59 +0200] rev 49210
rhg: correctly handle the case where diffs are encoded relative to nullrev
returning a valid entry for nullrev fix chain that delta against nullrev.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Sun, 22 May 2022 23:26:06 +0200] rev 49209
test-revlog: test a repository that contains a diff against nullrev
We are witnessing a crash in the rust code, so we lets make sure this case is
tested.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 17 May 2022 14:36:57 -0400] rev 49208
worker: adapt _blockingreader to work around a python3.8.[0-1] bug (
issue6444)
Python 3.8.0 is the latest I can load on Ubuntu 18.04, and I regularly hit the
TypeError because this function is missing. While it can be avoided by
disabling worker usage via config option, that's a bit obscure.
I'm limiting the function definition to the narrow range of affected pythons
because there were other bugs in this area that were worked around, that I don't
fully understand. See the bug report for discussions on why the narrow range,
and related commits working around other bugs.
Differential Revision: https://phab.mercurial-scm.org/D12627
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 06 Apr 2021 03:24:26 +0200] rev 49207
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 49206
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.
Anton Shestakov <av6@dwimlabs.net> [Wed, 04 May 2022 13:53:12 +0400] rev 49205
doc: use an absolute path in sys.path
The idea and rationale is similar to https://phab.mercurial-scm.org/D12599
(landed as
1b6e381521c5).
Differential Revision: https://phab.mercurial-scm.org/D12622
Anton Shestakov <av6@dwimlabs.net> [Wed, 04 May 2022 13:48:40 +0400] rev 49204
check-py3-compat: use an absolute path in sys.path
The idea and rationale is similar to https://phab.mercurial-scm.org/D12599
(landed as
1b6e381521c5).
Differential Revision: https://phab.mercurial-scm.org/D12621
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 13 May 2022 15:19:57 +0200] rev 49203
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.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Thu, 19 May 2022 12:23:38 +0100] rev 49202
rhg: align the dirstate v2 writing algorithm with python
Use the same algorithm of file append as python does, where we do a manual
seek instead of relying on O_APPEND. (see the reasons in the inline comment)
Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 17 May 2022 14:59:25 +0100] rev 49201
test-dirstate: actually test the append code path in dirstate v2
Apparently it's not sufficient to modify a file to force the dirstate
write-out, so the append code path was untested.
By removing a file instead of changing we're forcing append to happen.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 05 Apr 2022 05:01:58 +0200] rev 49200
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 49199
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 49198
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 49197
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 49196
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 49195
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 49194
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 49193
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 49192
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 49191
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 49190
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 49189
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 49188
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 49187
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 49186
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 49185
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 49184
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 49183
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 49182
branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 17 May 2022 00:09:51 +0100] rev 49181
ci: do not trigger phabricator for merge-request
The fast the phabricator steps has a `rules` entry makes it selected for the
special `merge_requests` pipelines. The other ones behave as default and are not
selected tot the mrege_request pipelines.
This result in a second pipeline to be created, with only the phabricator
pipeline in it. Which usually succeed fast (since there is nothing to do).
This is harmful as this create a false sense of "the series is passing" and
Gitlab will use this simplistic pipeline for validation.
By explicitly preventing the pipeline to be created in the merge-request case,
we prevent this situation to happens
Note that the job will be dropped (alonside phabricator) in the next two weeks
anyway.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 12 May 2022 07:36:37 -0700] rev 49180
branching: merge with stable
Kyle Lippincott <spectral@google.com> [Wed, 11 May 2022 17:56:29 -0700] rev 49179
amend: stop specifying matcher, get all copies in wctx
When we're recreating the commit that we'll be committing, we don't want to
filter our copy information based on just the *new* [versions of the] files
we're amending. The test has an example of this case, but for clarity, the
situation is:
```
$ hg cp src dst && hg commit
<do some work>
$ hg amend some_unrelated_file.txt
$ hg status --copies
A dst
A some_unrelated_file.txt
```
What *should* happen is that `dst` should remain marked as a copy of `src`, but
this did not previously happen. `matcher` here only includes the files that were
specified on the commandline, so it only gets the copy information (if any, in
this example there's not) for `some_unrelated_file.txt`. When it goes to apply
the memctx to actually create the commit, the file copy information is
incomplete and loses the information for the files that shouldn't have been
affected at all by the amend.
Differential Revision: https://phab.mercurial-scm.org/D12625
Kyle Lippincott <spectral@google.com> [Wed, 11 May 2022 17:56:10 -0700] rev 49178
amend: add test showing poor behavior when copies are involved
Differential Revision: https://phab.mercurial-scm.org/D12624
Martin von Zweigbergk <martinvonz@google.com> [Thu, 21 Apr 2022 10:39:52 -0700] rev 49177
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 49176
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 49175
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
Arseniy Alekseyev <aalekseyev@janestreet.com> [Thu, 05 May 2022 15:38:29 +0100] rev 49174
censor: make rhg fall back to python when encountering a censored node
This is to make it support censor.policy=ignore without having
to duplicate that logic.
Also, change the censor test in such a way that it uses rhg now,
because extensions are disabled except when we call [hg censor].
Differential Revision: https://phab.mercurial-scm.org/D12607
Matt Harbison <matt_harbison@yahoo.com> [Wed, 04 May 2022 16:01:55 -0400] rev 49173
contrib: migrate off of a couple of bitbucket URLs
I noticed this when diffing the thg installer against Mercurial to see what was
missing. There are a handful of other URLs in i18n and extension example help
text if anyone cares to update those.
Differential Revision: https://phab.mercurial-scm.org/D12606
Matt Harbison <matt_harbison@yahoo.com> [Wed, 04 May 2022 13:39:49 -0400] rev 49172
diff: add help text to highlight the ability to do "merge diffs"
Differential Revision: https://phab.mercurial-scm.org/D12605
Anton Shestakov <av6@dwimlabs.net> [Mon, 02 May 2022 12:10:28 +0400] rev 49171
followlines: don't put Unicode directly into the .js file (
issue6559)
Apparently some web server setups may serve this file in a different encoding
than UTF-8, and that results in visual garbage in the followlines button that
renders for every line in a file. So instead of using this Unicode character in
UTF-8 we can encode it as \u2212. Or, to be more explicit, we can use −
HTML entity, which resolves into exactly that character.
Since now we're using innerHTML property to set the minus part of the button,
let's use it to set the plus part as well (even though the plus sign was plain
ASCII). A wise man once said "A foolish consistency is the hobgob... eh,
whatever." Throw a brick at me if this makes things worse.
Differential Revision: https://phab.mercurial-scm.org/D12597
Matt Harbison <matt_harbison@yahoo.com> [Thu, 28 Apr 2022 11:20:17 -0400] rev 49170
wix: bump the minimum Windows required to 8.1
PyOxidizer binaries are built with py 3.9.6, so not even Windows 7 is supported.
Unfortunately, there don't appear to be more recent values for newer versions of
Windows, but at least Windows 8.1 is still in extended support for another 9
months or so.
Differential Revision: https://phab.mercurial-scm.org/D12596
Matt Harbison <matt_harbison@yahoo.com> [Thu, 28 Apr 2022 11:01:41 -0400] rev 49169
wix: drop python2 conditionals
Differential Revision: https://phab.mercurial-scm.org/D12595
Anton Shestakov <av6@dwimlabs.net> [Wed, 27 Apr 2022 19:45:19 +0400] rev 49168
tests: fix misspelling of supersede
Differential Revision: https://phab.mercurial-scm.org/D12589
Martin von Zweigbergk <martinvonz@google.com> [Tue, 26 Apr 2022 09:06:30 -0700] rev 49167
filemerge: add configs to disable some or all partial merge tools
When rolling out partial merge tools to users, it's useful to be able
to easily turn one or all of them off if a problem is discovered. This
patch adds support for that. They can of course also be useful for
individual users to be able to temporarily turn off a tool they are
otherwise using.
Differential Revision: https://phab.mercurial-scm.org/D12588
Arseniy Alekseyev <aalekseyev@janestreet.com> [Wed, 04 May 2022 17:40:23 +0100] rev 49166
censor: fix [hg update] away from a revision with censored files
Differential Revision: https://phab.mercurial-scm.org/D12604
Arseniy Alekseyev <aalekseyev@janestreet.com> [Fri, 22 Apr 2022 14:39:00 +0100] rev 49165
censor: demonstrate a bug
Differential Revision: https://phab.mercurial-scm.org/D12584
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 18:17:44 +0200] rev 49164
branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 18:04:46 +0200] rev 49163
Added signature for changeset
0ddd5e1f5f67
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 18:04:06 +0200] rev 49162
Added tag 6.1.2 for changeset
0ddd5e1f5f67
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 18:00:01 +0200] rev 49161
ci: remove py2-rust support
Nobody cares about this very narrow usecase, and py2 support is over by
July 1st. This helps with the CI load, and removes some flakiness.
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 17:45:20 +0200] rev 49160
relnotes: add release notes for 6.1.2
Mads Kiilerich <mads@kiilerich.com> [Tue, 03 May 2022 12:41:21 +0200] rev 49159
docs: use proper rst markup for preformatted blocks
The multiple lines were re-flowed to a single line, both in man page and html.
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 15:49:20 +0200] rev 49158
test-dirstate: print something when the check is skipped
This makes a programming error obvious in cases when it should not be skipped
Differential Revision: https://phab.mercurial-scm.org/D12602
Raphaël Gomès <rgomes@octobus.net> [Wed, 04 May 2022 15:48:13 +0200] rev 49157
test-dirstate: fix detection of Rust environment variable
The Rust path never actually worked. This change also improves clarity of the
comment. The next change will ensure we print something when this check fails.
Differential Revision: https://phab.mercurial-scm.org/D12601
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Apr 2022 17:15:35 +0200] rev 49156
rust-dirstate-v2: fix the unused bytes counter when rewriting the dirstate
As per the previous patch, the counter was incorrectly carried over from the
old docket when it should be reset for a complete rewrite.
Differential Revision: https://phab.mercurial-scm.org/D12594
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Apr 2022 17:11:51 +0200] rev 49155
rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
This was picked up by @aalekseyev when doing unrelated debugging.
The Rust implementation was never resetting this counter, so a brand new file
would carry over the old counter.
As I write this, my counter is a supposed 7389089 unused bytes for a total of
170978 bytes in the data file. Feel free to post your own high score.
Differential Revision: https://phab.mercurial-scm.org/D12593
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Apr 2022 16:24:55 +0200] rev 49154
test-dirstate: use new `--docket` flag to get the data uuid
This is more robust.
Differential Revision: https://phab.mercurial-scm.org/D12592
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Apr 2022 15:22:08 +0200] rev 49153
debugcommands: remove `debugdirstateignorepatternhash`
This is replaced by the more complete `--docket` option to `debugstate`.
Differential Revision: https://phab.mercurial-scm.org/D12591
Raphaël Gomès <rgomes@octobus.net> [Thu, 28 Apr 2022 15:19:19 +0200] rev 49152
dirstate-v2: add flag to `debugstate` to print docket information
This is useful information that we don't easily have access to currently,
unless you speak fluent xxd.
This replaces `debugdirstateignorepatternshash`, which I'll remove in the next
changeset.
Differential Revision: https://phab.mercurial-scm.org/D12590
Matt Harbison <matt_harbison@yahoo.com> [Mon, 02 May 2022 22:04:59 -0400] rev 49151
doc: use an absolute path in sys.path to work around a python DLL loading bug
This bug[1] was causing the zstd entry under "Available Compression Engines" to
be omitted from the documentation for some versions of python3. I could
upgrade, but past upgrades have broken venvs and clobbered installed packages.
It's a trivial workaround, so there's no sense in leaving this subtle issue. It
was flushed out by changing the module policy here from 'allow' to 'c', and
seeing this error:
ImportError: DLL load failed while importing parsers: The parameter is incorrect.
[1] https://github.com/python/cpython/issues/87271
Differential Revision: https://phab.mercurial-scm.org/D12599
Raphaël Gomès <rgomes@octobus.net> [Mon, 25 Apr 2022 16:45:03 +0200] rev 49150
rhg: fix dirstate-v2 data file removal system
In D12581 I introduced logic to remove the previous dirstate-v2 data file
after a new one is created (and its corresponding docket), but the logic was
flawed. I fixed it and made it simpler to understand by gather all logic in
a single expression.
Differential Revision: https://phab.mercurial-scm.org/D12586
Raphaël Gomès <rgomes@octobus.net> [Tue, 19 Apr 2022 12:27:40 +0200] rev 49149
rhg: use `Command::exec` instead of `Command::status`
`rhg` is supposed to be a transparent executable, using a subprocess defeats
that purpose. See inline comments for more details.
This also introduces the `which` crate to check if the fallback executable
actually exists to help debugging (plain `execve` doesn't give much
information).
The error code 253 is used to signify that the fallback is not found, but may
mean in the future that it is otherwise invalid if we start being more
specific.
Differential Revision: https://phab.mercurial-scm.org/D12578
Martin von Zweigbergk <martinvonz@google.com> [Wed, 27 Apr 2022 15:47:57 +0200] rev 49148
commit: don't use hard-coded `.hg/last-message.txt` path in error message
Whoever wrote D8463 just used a hard-coded path to
`.hg/last-message.text` instead of using the relative path that was
already available in the `msgfn` variable (and used just a few lines
up in related message). Let's fix that.
Differential Revision: https://phab.mercurial-scm.org/D12585
Raphaël Gomès <rgomes@octobus.net> [Mon, 25 Apr 2022 11:09:33 +0200] rev 49147
branching: merge stable into default
This also added the small fix need in Rust tests for the new
`DirstateMap::pack_v2` API change in stable.
Raphaël Gomès <rgomes@octobus.net> [Thu, 21 Apr 2022 15:10:57 +0200] rev 49146
rust-dirstate-v2: clean up previous data file after the docket is written
This was overlooked before and caused many data files to keep living forever.
We could potentially consider adding a random cleanup of them in case they
slipped through one day.
Differential Revision: https://phab.mercurial-scm.org/D12581
Raphaël Gomès <rgomes@octobus.net> [Thu, 21 Apr 2022 14:47:13 +0200] rev 49145
rust-dirstate-v2: save proper data size if no new data on append
This is currently only triggered with the tests ran with `--rhg` without
`--rust`, by "luck", there probably always was something to write, like an
mtime when also using Rust extensions alongside `rhg`.
Differential Revision: https://phab.mercurial-scm.org/D12580
Kyle Lippincott <spectral@google.com> [Tue, 19 Apr 2022 12:17:23 -0700] rev 49144
amend: move "return None for removed files" into block handling filestoamend
This is just a small logic cleanup from D12573, no change in behavior.
Differential Revision: https://phab.mercurial-scm.org/D12576
Raphaël Gomès <rgomes@octobus.net> [Tue, 12 Apr 2022 17:35:25 +0200] rev 49143
rust-dirstatemap: remove unused helper from the old API
Differential Revision: https://phab.mercurial-scm.org/D12541
Raphaël Gomès <rgomes@octobus.net> [Tue, 12 Apr 2022 17:35:02 +0200] rev 49142
rust-status: stop using `state()` in the dispatch logic
Let's use the new API.
Differential Revision: https://phab.mercurial-scm.org/D12540
Raphaël Gomès <rgomes@octobus.net> [Tue, 12 Apr 2022 17:34:18 +0200] rev 49141
rust-status: stop using `state()` in `handle_normal_file`
Let's use the new API
Differential Revision: https://phab.mercurial-scm.org/D12539
Raphaël Gomès <rgomes@octobus.net> [Tue, 12 Apr 2022 17:30:34 +0200] rev 49140
rust-dirstatemap: stop using `state()` in the cache logic
Let's use the new API
Differential Revision: https://phab.mercurial-scm.org/D12538
Raphaël Gomès <rgomes@octobus.net> [Tue, 12 Apr 2022 16:24:25 +0200] rev 49139
rust-dirstatemap: stop using `.state` in `is_from_other_parent`
This is a deprecated API and will be removed one day.
Differential Revision: https://phab.mercurial-scm.org/D12537
Raphaël Gomès <rgomes@octobus.net> [Tue, 12 Apr 2022 17:29:21 +0200] rev 49138
rust-dirstate-entry: add `modified` method
This will also be used in other places later in the series.
Differential Revision: https://phab.mercurial-scm.org/D12536
Raphaël Gomès <rgomes@octobus.net> [Tue, 12 Apr 2022 17:27:56 +0200] rev 49137
rust: remove use of `EntryState` in `DirsMultiset`
Let's use the new API.
Differential Revision: https://phab.mercurial-scm.org/D12535
Raphaël Gomès <rgomes@octobus.net> [Tue, 12 Apr 2022 17:26:23 +0200] rev 49136
rust: use `entry.tracked()` directly
This is the new API
Differential Revision: https://phab.mercurial-scm.org/D12534
Raphaël Gomès <rgomes@octobus.net> [Tue, 12 Apr 2022 17:25:38 +0200] rev 49135
rust-hg-cpython: remove use of `EntryState`
Let's use the new API
Differential Revision: https://phab.mercurial-scm.org/D12533
Raphaël Gomès <rgomes@octobus.net> [Fri, 08 Apr 2022 18:10:12 +0200] rev 49134
rust-dirstatemap: use a checked sub instead of a potentially underflowing one
This was missed in
2593873cda0f
Differential Revision: https://phab.mercurial-scm.org/D12532
Raphaël Gomès <rgomes@octobus.net> [Fri, 08 Apr 2022 17:55:03 +0200] rev 49133
rust-dirstatemap: add simpler version of `get_node_mut`
This will help reduce code and footgun potential for simpler callers.
Differential Revision: https://phab.mercurial-scm.org/D12531
Raphaël Gomès <rgomes@octobus.net> [Fri, 08 Apr 2022 17:22:39 +0200] rev 49132
rust-dirstatemap: use `get_node_mut` instead or `get_or_insert_node`
This (along with the docstring), makes it more obvious that we're not expecting
to insert a node here. This is less prone to bugs in later refactorings.
Differential Revision: https://phab.mercurial-scm.org/D12530
Raphaël Gomès <rgomes@octobus.net> [Fri, 08 Apr 2022 16:56:52 +0200] rev 49131
rust-dirstatemap: add `each_ancestor` argument to `get_node_mut`
This forces the callers to think about if the counters in the ancestors
need to be adjusted.
Differential Revision: https://phab.mercurial-scm.org/D12529
Raphaël Gomès <rgomes@octobus.net> [Fri, 08 Apr 2022 16:53:06 +0200] rev 49130
rust-dirstatemap: add simpler method `get_or_insert_node` for the common case
All but one case use the exact same input for most arguments, this simplifies
code and reduces footgun potential.
Differential Revision: https://phab.mercurial-scm.org/D12528
Raphaël Gomès <rgomes@octobus.net> [Fri, 08 Apr 2022 16:05:47 +0200] rev 49129
rust-dirstatemap: inline the last `get_or_insert` call
The `get_or_insert` method was dangerous because it did not take the
`DirstateMap` counters into account. This particular instance does not need
to update the counters.
Differential Revision: https://phab.mercurial-scm.org/D12527
Raphaël Gomès <rgomes@octobus.net> [Fri, 08 Apr 2022 16:04:17 +0200] rev 49128
rust-dirstatemap: add `set_cached_mtime` helper method
This will help remove the `get_or_insert` method, which is dangerous because it
does not take the `DirstateMap` counters into account
Differential Revision: https://phab.mercurial-scm.org/D12526
Raphaël Gomès <rgomes@octobus.net> [Fri, 08 Apr 2022 16:03:39 +0200] rev 49127
rust-dirstatemap: add `clear_cached_mtime` helper method
This will help remove the `get_or_insert` method, which is dangerous because it
does not take the `DirstateMap` counters into account.
Differential Revision: https://phab.mercurial-scm.org/D12525
Raphaël Gomès <rgomes@octobus.net> [Tue, 29 Mar 2022 18:21:40 +0200] rev 49126
rust-dirstatemap: add unit tests
These were missing and have already proven valuable since they have found
two bugs (fixed in previous patches).
There may be other behavior to test, but this gives us a decent coverage.
Differential Revision: https://phab.mercurial-scm.org/D12524
Raphaël Gomès <rgomes@octobus.net> [Tue, 29 Mar 2022 17:27:36 +0200] rev 49125
rust: add `Debug` trait to a bunch of structs
This is useful when... debugging. Right now the output is not in the most
readable state it could be, but this is very low effort and is good enough
for now. We may want to write a nicer custom debug formatter for some of those
structs in the future.
Differential Revision: https://phab.mercurial-scm.org/D12523
Raphaël Gomès <rgomes@octobus.net> [Wed, 30 Mar 2022 11:39:53 +0200] rev 49124
rust-dirstatemap: use `&HgPath` instead of `HgPathBuf` in `copy_map_insert`
No reason to require an owned path here.
Differential Revision: https://phab.mercurial-scm.org/D12522
Raphaël Gomès <rgomes@octobus.net> [Tue, 29 Mar 2022 17:23:24 +0200] rev 49123
rust-dirstatemap: use `DirstateEntry::tracked` directly
`state()` is a legacy API that will be removed at some point, let's use the
newer API.
Differential Revision: https://phab.mercurial-scm.org/D12521
Raphaël Gomès <rgomes@octobus.net> [Tue, 29 Mar 2022 00:58:58 +0200] rev 49122
rust-cpython: remove unused API to `drop_entry_and_copy_source`
This is not used anywhere anymore and its use cases are covered by the new API
Differential Revision: https://phab.mercurial-scm.org/D12520
Raphaël Gomès <rgomes@octobus.net> [Tue, 29 Mar 2022 00:57:06 +0200] rev 49121
rust-dirstatemap: remove `set_dirstate_entry`/`set_entry` methods
These methods were needed crutches before the Rust implementation caught up
to Python. Calling `set_entry` (whether from Python or Rust) was dangerous
since it didn't update any of the counters of the DirstateMap data structure,
while having no real way of knowing when to use it "correctly" except it you
were one of the 3 people who looked deep enough into the soul of this code.
Differential Revision: https://phab.mercurial-scm.org/D12519
Raphaël Gomès <rgomes@octobus.net> [Tue, 29 Mar 2022 00:53:11 +0200] rev 49120
rust-dirstatemap: implement part of the `setparents` logic
The Python code does many round-trip calls to the Rust dirstatemap when copy
information needs to be dropped in `setparents`.
This may result in improved performance on `commit`, `update` and other such
commands, but was mostly done to drop the last use of `set_dirstate_item`.
See inline comments for an asterisk about performance, and see next patch for
why `set_dirstate_item` has to go.
Differential Revision: https://phab.mercurial-scm.org/D12518
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 23:45:54 +0200] rev 49119
dirstate-item: add missing bit of docstring
Differential Revision: https://phab.mercurial-scm.org/D12517
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 23:42:16 +0200] rev 49118
dirstatemap: move `_dirs_incr` and `_dirs_decr` methods out of the common
They are only used by the Python implementation now
Differential Revision: https://phab.mercurial-scm.org/D12516
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 23:39:28 +0200] rev 49117
dirstatemap: move `_refresh_entry` out of the common methods
This is only used in the Python implementation now
Differential Revision: https://phab.mercurial-scm.org/D12515
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 23:38:05 +0200] rev 49116
dirstatemap: move `_drop_entry` out of the common methods
Only the Python implementation uses it.
Differential Revision: https://phab.mercurial-scm.org/D12514
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 23:37:36 +0200] rev 49115
rust-dirstatemap: remove `_drop_entry`
This is not used anywhere anymore
Differential Revision: https://phab.mercurial-scm.org/D12513
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 23:34:30 +0200] rev 49114
rust-dirstatemap: remove `__settitem__`
This is not used anywhere now.
Differential Revision: https://phab.mercurial-scm.org/D12512
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 18:30:08 +0200] rev 49113
rust-dirstatemap: remove unused `_refresh_entry` implementation
This was only used in the newer APIs, all of which have been rewritten in Rust
Differential Revision: https://phab.mercurial-scm.org/D12511
Raphaël Gomès <rgomes@octobus.net> [Wed, 23 Mar 2022 17:19:32 +0100] rev 49112
rust-distatemap: remove `addfile` API
All of its users have been migrated to the new API
Differential Revision: https://phab.mercurial-scm.org/D12510
Raphaël Gomès <rgomes@octobus.net> [Wed, 23 Mar 2022 17:16:10 +0100] rev 49111
rust-dirstatemap: remove `removefile` API
Its callers have been migrated to the newer dirstate API.
Differential Revision: https://phab.mercurial-scm.org/D12509
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 18:26:24 +0200] rev 49110
rhg: use the new `set_clean` API
Differential Revision: https://phab.mercurial-scm.org/D12508
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 18:15:11 +0200] rev 49109
dirstatemap: move `set_untracked` out of the common methods
There is a dedicated Rust implementation now
Differential Revision: https://phab.mercurial-scm.org/D12507
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 18:13:58 +0200] rev 49108
rust-dirstatemap: add `set_untracked` method
This is the new API that Python has already migrated to
Differential Revision: https://phab.mercurial-scm.org/D12506
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 18:10:19 +0200] rev 49107
dirstatemap: move `set_possibly_dirty` out of the common methods
There exists now a dedicated Rust implementation
Differential Revision: https://phab.mercurial-scm.org/D12505
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 18:09:01 +0200] rev 49106
rust-dirstatemap: add `set_possibly_dirty` method
This is the new API that Python has already migrated to.
Differential Revision: https://phab.mercurial-scm.org/D12504
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 18:02:45 +0200] rev 49105
dirstatemap: move `set_clean` out of common methods
This now has a dedicated Rust implementation
Differential Revision: https://phab.mercurial-scm.org/D12503
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 18:02:50 +0200] rev 49104
rust-dirstatemap: add `set_clean` method
This is the new dirstate API that has already been moved to in Python.
Differential Revision: https://phab.mercurial-scm.org/D12502
Raphaël Gomès <rgomes@octobus.net> [Wed, 23 Mar 2022 17:13:18 +0100] rev 49103
dirstatemap: remove `_insert_entry`
This was needed as a compatibility layer for the Python and Rust
implementations, but it is not called from anywhere in Rust anymore.
The two remaining calls have been inlined.
Differential Revision: https://phab.mercurial-scm.org/D12501
Raphaël Gomès <rgomes@octobus.net> [Wed, 23 Mar 2022 17:25:42 +0100] rev 49102
dirstatemap: move `reset_state` out of common methods
Now that we have a Rust implementation, we defer to that accordingly.
Differential Revision: https://phab.mercurial-scm.org/D12500
Raphaël Gomès <rgomes@octobus.net> [Wed, 23 Mar 2022 17:27:58 +0100] rev 49101
rust-dirstatemap: add Rust implementation of `reset_state`
This is the new API which has already been defined in Python
Differential Revision: https://phab.mercurial-scm.org/D12499
Raphaël Gomès <rgomes@octobus.net> [Wed, 23 Mar 2022 17:38:59 +0100] rev 49100
rust-dirstate: introduce intermediate struct for dirstate-v2 data
This is passed often as a long tuple that is not easy to know the form of, so
we refactor everything in this struct.
This also renames `wdir_tracked` to follow the Python `wc_tracked`, even though
the on-disk format uses `WDIR_TRACKED`.
I think a single naming scheme is better, but we can't easily break the Python
impl now because of extensions, so this is low-effort enough and facilitates
grepping.
Differential Revision: https://phab.mercurial-scm.org/D12498
Raphaël Gomès <rgomes@octobus.net> [Wed, 23 Mar 2022 16:32:31 +0100] rev 49099
dirstatemap: remove unused parameter from `reset_state`
This has no callers using it and is not used inside the method itself.
Differential Revision: https://phab.mercurial-scm.org/D12497
Raphaël Gomès <rgomes@octobus.net> [Wed, 23 Mar 2022 15:19:43 +0100] rev 49098
dirstatemap: move `set_tracked` out of common methods and plug in Rust
We now have a Rust-specific implementation of this method, it is no longer
shared between both implementations.
Differential Revision: https://phab.mercurial-scm.org/D12496
Raphaël Gomès <rgomes@octobus.net> [Wed, 23 Mar 2022 15:18:12 +0100] rev 49097
rust-dirstatemap: add `set_tracked` method
This is the new dirstate API that has already been moved to in Python.
It will be used in place of the old `addfile`/`removefile` one.
Differential Revision: https://phab.mercurial-scm.org/D12495
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Apr 2022 23:15:25 -0700] rev 49096
changelog: avoid copying changeset data into `ChangesetRevisionData`
Differential Revision: https://phab.mercurial-scm.org/D12548
Martin von Zweigbergk <martinvonz@google.com> [Fri, 08 Apr 2022 21:34:18 -0700] rev 49095
rust-nodemap: remove unnecessary explicit lifetime
Differential Revision: https://phab.mercurial-scm.org/D12486
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Apr 2022 21:56:57 -0700] rev 49094
rust-revlog: add tests for p1/p2 getters, as promised in D12442
Differential Revision: https://phab.mercurial-scm.org/D12565
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Apr 2022 18:20:41 -0700] rev 49093
rust-revlog: make `IndexEntryBuilder` build a whole entry
The `IndexEntryBuilder` we have in tests only built part of a revlog
entry before this patch. It's more useful if it can build a full
entry. As part of fixing that, I also added a (non-test)
`IndexEntry::link_revision()`.
Differential Revision: https://phab.mercurial-scm.org/D12564
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Apr 2022 17:06:10 -0700] rev 49092
rust-revlog: change default version from 2 to 1 in test builder
Version 1 is the only version we support, so it seems like the natural
choice for making it easy to create valid revlogs.
Differential Revision: https://phab.mercurial-scm.org/D12563
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Apr 2022 09:39:27 -0700] rev 49091
rust-repo: extract a function for checking nodemap requirement
Differential Revision: https://phab.mercurial-scm.org/D12562
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Apr 2022 09:37:13 -0700] rev 49090
rust-revlog: make `Changelog` and `ManifestLog` unaware of `Repo`
As with other recent patches, this makes the types easier to test and
reuse.
Differential Revision: https://phab.mercurial-scm.org/D12561
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Apr 2022 21:25:56 -0700] rev 49089
rust-revlog: make unaware of `Repo`
Differential Revision: https://phab.mercurial-scm.org/D12547
Martin von Zweigbergk <martinvonz@google.com> [Thu, 14 Apr 2022 09:09:45 -0700] rev 49088
rust-filelog: don't use persistent nodemap (to match Python)
Differential Revision: https://phab.mercurial-scm.org/D12558
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Apr 2022 11:40:37 -0700] rev 49087
rust-revlog: move check for nodemap requirement to caller
It's good for both making `Revlog` testable and reusable to have it
not depend on the higher-level `Repo` type. This patch is one step in
towards that. Additionally, this change in particular gives the
callers more control over when to use a nodemap.
Differential Revision: https://phab.mercurial-scm.org/D12546
Martin von Zweigbergk <martinvonz@google.com> [Thu, 31 Mar 2022 22:54:33 -0700] rev 49086
rust-nodemap-docket: make unaware of `Repo`
Differential Revision: https://phab.mercurial-scm.org/D12545
Martin von Zweigbergk <martinvonz@google.com> [Thu, 31 Mar 2022 22:59:19 -0700] rev 49085
rust-nodemap-docket: move check of nodemap requirement to caller
I think it's cleaner if `NodeMapDocket` doesn't know about the `Repo`
type. That makes it more easily reusable and testable. This patch
moves out one of the uses of `Repo` out of it.
Differential Revision: https://phab.mercurial-scm.org/D12544
Matt Harbison <matt_harbison@yahoo.com> [Tue, 19 Apr 2022 10:53:58 -0400] rev 49084
merge with stable
Matt Harbison <matt_harbison@yahoo.com> [Fri, 15 Apr 2022 11:20:49 -0400] rev 49083
contrib: update python dependencies on Windows
Differential Revision: https://phab.mercurial-scm.org/D12559
Matt Harbison <matt_harbison@yahoo.com> [Fri, 15 Apr 2022 11:32:27 -0400] rev 49082
contrib: add a hint if the Windows dependency MSI is already installed
In the past, I've gotten confused when the script failed on seemingly random
python installs (and thus the py3.8 install was commented out from the last time
this happened to me, which has been reverted here). This particular error code
means the package was already installed. For python, it means the major and
minor version are the same, but the micro version may differ.
In practice, ignoring the python installation failure will cause the pip
installation that happens next to fail, because python.exe for that version is
somewhere else on the system. This could probably be fixed by running py.exe
with the major and minor version, but that is skipped during the install for
some reason. I didn't feel like over complicating this though, and at least
there's a better hint when the problem occurs.
Differential Revision: https://phab.mercurial-scm.org/D12560
Matt Harbison <matt_harbison@yahoo.com> [Mon, 18 Apr 2022 16:18:33 -0400] rev 49081
packaging: fix the type hint on the download_entry function
Flagged by PyCharm.
Differential Revision: https://phab.mercurial-scm.org/D12571
Matt Harbison <matt_harbison@yahoo.com> [Mon, 18 Apr 2022 16:11:52 -0400] rev 49080
packaging: drop python27 references from the Windows instructions
I also diffed these two files and eliminated cosmetic differences to make it
easier to ensure both are in alignment.
Differential Revision: https://phab.mercurial-scm.org/D12570
Matt Harbison <matt_harbison@yahoo.com> [Mon, 18 Apr 2022 15:27:12 -0400] rev 49079
packaging: add a missing parenthesis to help text
Differential Revision: https://phab.mercurial-scm.org/D12569
Matt Harbison <matt_harbison@yahoo.com> [Mon, 18 Apr 2022 14:20:58 -0400] rev 49078
git: un-byteify the `mode` argument for the builtin `open()`
I guess this was assuming `pycompat.open` was imported, but it's not here or
elsewhere in the git extension.
Differential Revision: https://phab.mercurial-scm.org/D12568
Matt Harbison <matt_harbison@yahoo.com> [Mon, 18 Apr 2022 11:21:09 -0400] rev 49077
git: adapt to some recent dirstate API changes
There are still old methods like add() and drop(). I don't see anything that
looks equivalent, so there's likely more work to do. But this allows diff and
commit to work again on the simple webpage repo for thg.
Differential Revision: https://phab.mercurial-scm.org/D12567
Matt Harbison <matt_harbison@yahoo.com> [Mon, 18 Apr 2022 11:15:29 -0400] rev 49076
idirstate: add missing get_entry() method
Differential Revision: https://phab.mercurial-scm.org/D12566
Matt Harbison <matt_harbison@yahoo.com> [Wed, 13 Apr 2022 15:02:01 -0400] rev 49075
windows: disable pager when packaged with py2exe
With Windows and py3, all output that got directed to the pager was lost. It
can be worked around by the user piping to `more`, but that's easy to forget,
and can be dangerous if `hg diff` or similar incorrectly shows no changes. The
problem appears to be the new WindowsConsoleIO in py3.6[1]. We've worked around
it with PyOxidizer by setting the `Py_LegacyWindowsStdioFlag` interpreter
option, and worked around it with `hg.bat` and `exewrapper.c` by internally
setting `PYTHONLEGACYWINDOWSSTDIO=1`.
Unfortunately, py2exe doesn't appear to be able to set the interpreter option,
and somehow seems to also ignore the environment variable. The latter isn't a
good fix anyway, since setting it in the environment would affect other python
programs too. We can't install a global config for this because a config closer
to the user (e.g. from before pager was turned on by default) can override it.
[1] https://peps.python.org/pep-0528/
Differential Revision: https://phab.mercurial-scm.org/D12556
Matt Harbison <matt_harbison@yahoo.com> [Wed, 13 Apr 2022 14:37:57 -0400] rev 49074
resourceutil: force filesystem access to resources when using py2exe
I don't know why it doesn't work, but it avoids this fatal error on startup:
> hg debugshell
Traceback (most recent call last):
File "hg", line 58, in <module>
File "mercurial\dispatch.pyc", line 143, in run
File "mercurial\dispatch.pyc", line 232, in dispatch
File "mercurial\dispatch.pyc", line 254, in _rundispatch
File "mercurial\ui.pyc", line 316, in load
File "mercurial\rcutil.pyc", line 98, in rccomponents
File "mercurial\rcutil.pyc", line 68, in default_rc_resources
File "mercurial\utils\resourceutil.pyc", line 102, in contents
File "<frozen zipimport>", line 775, in contents
AssertionError
I assume the py2 version of py2exe never hit this because `importlib.resources`
failed to import.
Differential Revision: https://phab.mercurial-scm.org/D12554
Matt Harbison <matt_harbison@yahoo.com> [Wed, 13 Apr 2022 14:25:13 -0400] rev 49073
setup: fix the py2exe logic to work with py3
TortoiseHg still uses (the modernized) py2exe packaging, but the build was
failing since `py2exe.Distribution` was removed.
One thing to note is that later in this module, there's a hack to include
`distutils` when building from a virtualenv. While `import distutils` works in
`hg debugshell` when built with py2, it doesn't work in py3. I'm not sure why-
I don't see it in `library.zip` either. It doesn't seem to break anything
though.
Differential Revision: https://phab.mercurial-scm.org/D12553
Martin von Zweigbergk <martinvonz@google.com> [Wed, 13 Apr 2022 07:58:49 -0700] rev 49072
absorb: make `--edit-lines` imply `--apply-changes`
One of our users tried to use `hg absorb -e` but it seemed that it
would only bring up the editor if there were no changes the command
could automatically detect destination for. I spent probably half an
hour debugging why it worked that way. I finally figured out that it
does bring up the editor, but you have to answer "yes" to the "apply
changes" prompt *first*. That seems very unintuitive. If the user
wants to edit the changes, there seems to be little reason to present
them with a prompt first, so let's have `-e/--edit-lines` imply
`-a/--apply-changes`. All the tests using `-e` also already used
`-a`. I changed them to rely on the implied `-a` so we get coverage of
that.
Differential Revision: https://phab.mercurial-scm.org/D12550
Arseniy Alekseyev <aalekseyev@janestreet.com> [Wed, 13 Apr 2022 14:40:11 +0100] rev 49071
branchmap: add a test that shows bad interaction with strip
Differential Revision: https://phab.mercurial-scm.org/D12549
Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 12 Apr 2022 20:01:49 +0100] rev 49070
rhg: refactor to pass argv down, instead of caling args_os()
This refactoring makes it easy to patch some command-line preprocessing into rhg.
We use this to support using rhg as a shebang interpreter, for example.
Differential Revision: https://phab.mercurial-scm.org/D12543
Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 12 Apr 2022 19:40:37 +0100] rev 49069
narrow: support debugupgraderepo
Differential Revision: https://phab.mercurial-scm.org/D12542
Matt Harbison <matt_harbison@yahoo.com> [Wed, 13 Apr 2022 14:46:22 -0400] rev 49068
procutil: avoid `+= None` when writing to full std{err,out} descriptor on py3
The write function returns `None` if there was no room to write the given
data[1]. I don't like that this is effectively an infinite loop if there's
never any progress emptying the underlying buffer, but we're no worse off than
before, and it fixes random stacktrace popups seen in the py3 build of
TortoiseHg.
[1] https://docs.python.org/3/library/io.html#io.RawIOBase.write
Differential Revision: https://phab.mercurial-scm.org/D12555
Martin von Zweigbergk <martinvonz@google.com> [Mon, 18 Apr 2022 20:45:38 -0700] rev 49067
amend: don't remove unselected removals from memctx
When there are removed files in the working copy and they are not
selected to be amended into the parent, the `filectxfn` we create for
the `memctx` would still return `None` before this patch. That's
clearly incorrect; we should return the `filectx` from the unamended
commit. Somehow it seems to not matter much except for the case with
copies stored in changesets.
Thanks to Kyle Lippincott for doing all the debugging and identifying
the fix for this issue.
Differential Revision: https://phab.mercurial-scm.org/D12573
Martin von Zweigbergk <martinvonz@google.com> [Mon, 18 Apr 2022 20:39:31 -0700] rev 49066
tests: demonstrate crash on partial amend with copies in changesets
See the fix in the next patch for explanation.
Differential Revision: https://phab.mercurial-scm.org/D12572
Martin von Zweigbergk <martinvonz@google.com> [Tue, 05 Apr 2022 12:06:32 -0700] rev 49065
rust-revlog: add methods for getting parent revs and entries
Differential Revision: https://phab.mercurial-scm.org/D12442
Martin von Zweigbergk <martinvonz@google.com> [Tue, 05 Apr 2022 08:47:04 -0700] rev 49064
rust-changelog: start parsing changeset data
This patch makes `ChangelogRevisionData` do some coarse, line-level
splitting of the changeset data into manifest node, user, timestamp,
files list, and description. There are no (in-tree) users of these
functions yet, but I've added tests to prevent regressions. We'll
surely add callers at some point.
Differential Revision: https://phab.mercurial-scm.org/D12439
Martin von Zweigbergk <martinvonz@google.com> [Mon, 04 Apr 2022 23:27:16 -0700] rev 49063
rust-changelog: remove special parsing of empty changelog data for null rev
For the null revision, `Revlog::get_rev_data()` will return an empty
string (of bytes). We currently handle that case in
`ChangelogRevisionData::manifest_node()`. However, it's going to be
ugly to have special handling for the null revision for each future
method on `ChangelogRevisionData`. This patch therefore restructures
the code so we instead initialize the struct with valid data for the
null revision.
Differential Revision: https://phab.mercurial-scm.org/D12438
Martin von Zweigbergk <martinvonz@google.com> [Thu, 31 Mar 2022 22:06:26 -0700] rev 49062
rust-changelog: don't skip empty lines when iterating over changeset lines
The first empty line in the changeset indicates the end of headers and
beginning of description. Callers can't know figure out where that
position is if empty lines are skipped.
Differential Revision: https://phab.mercurial-scm.org/D12426
Martin von Zweigbergk <martinvonz@google.com> [Thu, 31 Mar 2022 22:02:46 -0700] rev 49061
rust-requirements: allow loading repos with `bookmarksinstore` requirement
`rhg` does support bookmarks, so it can load repos with the
`bookmarksinstore` requirement just as well as other repos.
Differential Revision: https://phab.mercurial-scm.org/D12425
Kyle Lippincott <spectral@google.com> [Wed, 13 Apr 2022 12:14:17 -0700] rev 49060
rebase: while rewriting desc hashes, ignore ambiguous prefix "hashes"
If a repo is sufficiently large, a six digit number "hash prefix" can somewhat
easily reference an ambiguous hash prefix.
Differential Revision: https://phab.mercurial-scm.org/D12552
Kyle Lippincott <spectral@google.com> [Wed, 13 Apr 2022 13:15:33 -0700] rev 49059
tests: add test demonstrating issue with ambiguous has prefixes during rebase
Differential Revision: https://phab.mercurial-scm.org/D12551
Julien Cristau <jcristau@debian.org> [Sat, 09 Apr 2022 14:43:30 +0200] rev 49058
test: accept another error message on lack of TLS client certificate
Differential Revision: https://phab.mercurial-scm.org/D12492
Julien Cristau <jcristau@debian.org> [Sat, 09 Apr 2022 14:41:55 +0200] rev 49057
sslutil: support TLSV1_ALERT_PROTOCOL_VERSION reason code
It looks like python 3.10 returns a different reason code on protocol
version mismatch.
Differential Revision: https://phab.mercurial-scm.org/D12491
Julien Cristau <jcristau@debian.org> [Sat, 09 Apr 2022 14:28:17 +0200] rev 49056
test: override default cipher selection when connecting to TLS 1.0/1.1 servers
The default set of ciphers on python 3.10 is incompatible with old TLS
versions.
Differential Revision: https://phab.mercurial-scm.org/D12490
Julien Cristau <jcristau@debian.org> [Sat, 09 Apr 2022 14:23:52 +0200] rev 49055
sslutil: be less strict about which ciphers are allowed when using --insecure
Python 3.10 restricted which ciphers are enabled by default, leading to
no available ciphers for TLS < 1.2. When using the --insecure flag we
allow old TLS, so also adjust the cipher list to give connections a
chance to work.
On the server side, also loosen the cipher selection in tests (when
using the devel.serverexactprotocol option).
Differential Revision: https://phab.mercurial-scm.org/D12489
Julien Cristau <jcristau@debian.org> [Sat, 09 Apr 2022 14:15:32 +0200] rev 49054
sslutil: avoid deprecation warnings from python 3.10's ssl module
Use ssl.PROTOCOL_TLS_{CLIENT,SERVER} and
SSLContext.{min,max}imum_version when supported (3.7+).
And, catch deprecation warnings when the user asks for deprecated TLS
versions (1.0 and 1.1).
Differential Revision: https://phab.mercurial-scm.org/D12488
Julien Cristau <jcristau@debian.org> [Wed, 06 Apr 2022 22:29:49 +0200] rev 49053
zeroconf: fix deprecation warning with python 3.10
threading.condition.notifyAll → threading.condition.notify_all
Differential Revision: https://phab.mercurial-scm.org/D12487
Julien Cristau <jcristau@debian.org> [Mon, 11 Apr 2022 11:14:55 +0200] rev 49052
test: deal with changed error message on python 3.10
Differential Revision: https://phab.mercurial-scm.org/D12493
Julien Cristau <jcristau@debian.org> [Mon, 02 Dec 2019 14:45:00 +0100] rev 49051
mail: don't complain about a multi-word email.method
I want to be able to set email.method to "ssh relay /usr/sbin/sendmail"
without needing an extra trivial shell script.
This works fine since we pass the full command to a shell, except for
validateconfig trying to find it in $PATH.
Differential Revision: https://phab.mercurial-scm.org/D7542
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 07 Apr 2022 15:53:48 +0200] rev 49050
help: set the large-file-limit to 10MB
This is a minor increase (5%) and makes the doc much clearer.
Differential Revision: https://phab.mercurial-scm.org/D12484
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 07 Apr 2022 15:46:07 +0200] rev 49049
help: clarify the unit of `ui.large-file-limit` config
Its might be a bit confusing, especially since `large-file.min-size` uses MB.
Differential Revision: https://phab.mercurial-scm.org/D12483
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Apr 2022 18:39:15 +0200] rev 49048
debuglock: ignore ENOENT error when unlocking
This is consistent with the main `lock.release` code.
Differential Revision: https://phab.mercurial-scm.org/D12481
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Apr 2022 18:50:20 +0200] rev 49047
run-tests: introduce "forward-slash" version of everything on windows
This should be useful for some shell invocation.
Differential Revision: https://phab.mercurial-scm.org/D12480
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Apr 2022 18:44:21 +0200] rev 49046
tests-racy-mutation: pass the editor through config instead of env variable
On Windows msys seems to do awful mangling of the environment variable content
that confuses everything to the death. Going through the config works fine, so
we do that instead.
Differential Revision: https://phab.mercurial-scm.org/D12479
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 18:53:55 +0200] rev 49045
rust-dirstate: don't return a state for untracked entries
This `state` API is a remnant of the former API and is slated for removal at
some point. Any caller of this function will expect an entry that is tracked
in the larger sense.
Differential Revision: https://phab.mercurial-scm.org/D12448
Raphaël Gomès <rgomes@octobus.net> [Tue, 22 Mar 2022 16:33:18 +0100] rev 49044
dirstate: remove v1_* methods from Python/C/Rust shared API
These methods are used for v1 parsing by their respective implementations, but
do not need to be shared between them.
Differential Revision: https://phab.mercurial-scm.org/D12447
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 13:01:42 +0200] rev 49043
rust-dirstate-entry: fix typo in panic message
Differential Revision: https://phab.mercurial-scm.org/D12446
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 13:00:57 +0200] rev 49042
test-
issue660: add dirstate-v2 variant
It's basically a dirstate test, so it makes sense to test out the new version.
Differential Revision: https://phab.mercurial-scm.org/D12445
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 13:00:14 +0200] rev 49041
test-
issue660: test inside a repository, not the test dir
This causes an issue with a temporary file showing up in test output
when adding a dirstate-v2 variant of this test.
Differential Revision: https://phab.mercurial-scm.org/D12444
Raphaël Gomès <rgomes@octobus.net> [Wed, 23 Mar 2022 15:15:17 +0100] rev 49040
dirstate: fix some typos in docstrings
I was passing by and they've been bothering me. :)
Differential Revision: https://phab.mercurial-scm.org/D12443
Raphaël Gomès <rgomes@octobus.net> [Mon, 04 Apr 2022 13:36:37 +0000] rev 49039
path: explicitly declare the `pushurl` suboption
This will help documentation and discovery.
Differential Revision: https://phab.mercurial-scm.org/D12437
Raphaël Gomès <rgomes@octobus.net> [Thu, 07 Apr 2022 15:29:02 +0200] rev 49038
setup: fix incomplete implementation of Command
`test-install.t` fails without the `get_outputs` method being implemented,
which is used when, `self.report` is `True`.
When
8d7eaff92f9c introduced this change, they probably ran `test-install.t`
without `HGTESTS_ALLOW_NETIO=1`, which does not trigger this codepath.
Differential Revision: https://phab.mercurial-scm.org/D12482
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 04 Apr 2022 15:36:32 +0200] rev 49037
path: explicitly declare the `pushrev` suboptions
This will help documentation and discovery.
Differential Revision: https://phab.mercurial-scm.org/D12436
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 04 Apr 2022 15:36:17 +0200] rev 49036
path: explicitly declare the `multi-urls` suboptions
This will help documentation and discovery.
Differential Revision: https://phab.mercurial-scm.org/D12435
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 04 Apr 2022 15:35:59 +0200] rev 49035
path: explicitly declare the `bookmarks.mode` suboptions
This will help documentation and discovery.
Differential Revision: https://phab.mercurial-scm.org/D12434