Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 31 Jan 2022 14:26:35 +0100] rev 48683
dirstate: rename the filegenerator used for writing
We will need a different name in the next changesets. Changing the name is
actually not that trivial so we do it in its own changeset.
Differential Revision: https://phab.mercurial-scm.org/D12123
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 31 Jan 2022 08:23:54 +0100] rev 48682
dirstate: use a context manager when writing the dirstate
This make sure the file is closed in a timely manner.
We define a lambda for the file opening. It might seems a bit overkill here but
a future changeset will need to do more of those.
Differential Revision: https://phab.mercurial-scm.org/D12122
Raphaël Gomès <rgomes@octobus.net> [Wed, 02 Feb 2022 17:24:05 +0100] rev 48681
branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net> [Wed, 02 Feb 2022 17:02:34 +0100] rev 48680
Added signature for changeset
75676122c2bf
Raphaël Gomès <rgomes@octobus.net> [Wed, 02 Feb 2022 17:02:09 +0100] rev 48679
Added tag 6.0.2 for changeset
75676122c2bf
Raphaël Gomès <rgomes@octobus.net> [Wed, 02 Feb 2022 15:03:29 +0100] rev 48678
relnotes: add 6.0.1 and 6.0.2 notes
Differential Revision: https://phab.mercurial-scm.org/D12130
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 01 Feb 2022 15:19:50 +0100] rev 48677
branchmap: stop writing cache for uncommitted data
If we are about to write the branch while a transaction is active. we delay
that write. After the transaction is closed, we flush all the write we delayed
(unless they have been written in between).
Differential Revision: https://phab.mercurial-scm.org/D12128
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 31 Jan 2022 19:28:58 +0100] rev 48676
transaction: add a way to know a transaction has been finalized
This will be useful to fix the timing of the branchmap on disk caching.
Differential Revision: https://phab.mercurial-scm.org/D12127
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 01 Feb 2022 15:14:05 +0100] rev 48675
branchmap: Add a test about writing branchmap and aborted transaction
It turn out that we update the branchmap on disk whenever we recompute it…
including in a middle of a transaction. This means writing the new branchmap too
early (the changeset are not visible yet) and worse… it mean writing branchmap
for transaction we rollback.
so we introduce a test to highlight the issue (and prevent it to regress in the
future).
Differential Revision: https://phab.mercurial-scm.org/D12126
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 01 Feb 2022 16:36:20 +0100] rev 48674
dirstate-v2: rename the configuration to enable the format
The rename of the old experimental name was overlooked before the 6.0 release.
We rename everything to use the new name (and keep the released name as an alias
for compatibility).
Differential Revision: https://phab.mercurial-scm.org/D12129
Martin von Zweigbergk <martinvonz@google.com> [Wed, 26 Jan 2022 15:32:18 -0800] rev 48673
arbitraryfilectx: use our existing helpers for reading and writing files
Differential Revision: https://phab.mercurial-scm.org/D12090
Martin von Zweigbergk <martinvonz@google.com> [Thu, 11 Feb 2021 22:52:43 -0800] rev 48672
fix: remove unnecessary and overly strict check for divergence
`rewriteutil.precheck()` checks for divergence these days, so we can
remove the redundant check in `hg fix`.
Differential Revision: https://phab.mercurial-scm.org/D12088
Martin von Zweigbergk <martinvonz@google.com> [Wed, 26 Jan 2022 10:11:01 -0800] rev 48671
encoding: fix trim() to be O(n) instead of O(n^2)
`encoding.trim()` iterated over the possible lengths smaller than the
input and created a slice for each. It then calculated the column
width of the result, which is of course O(n), so the overall algorithm
was O(n). This patch rewrites it to iterate over the unicode
characters, keeping track of the length so far. Also, the old
algorithm started from the end of the string, which made it much worse
when the input is large and the limit is small (such as the typical 72
we pass to it).
You can time it by running something like this:
```
time python3 -c 'from mercurial.utils import stringutil; print(stringutil.ellipsis(b"
0123456789" * 1000, 5))'
```
That drops from 4.05 s to 83 ms with this patch (and most of that is
of course startup time).
Differential Revision: https://phab.mercurial-scm.org/D12089
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 24 Jan 2022 11:49:06 +0100] rev 48670
stream-clone: filter possible missing requirements using all supported one
The `supportedformat` requirements is missing some important requirements and it
seems better to filter out with all requirements we know, not just an
"arbitrary" subset.
The `supportedformat` set is lacking some important requirements (for example
`revlog-compression-zstd`). This is getting fixed on default (for Mercurial 6.1)
However, fixing that in 6.1 means the stream requirements sent over the wire
will contains more items. And if we don't apply this fix on older version, they
might end up complaining about lacking support for feature they actually support
for years.
This patch does not fix the deeper problem (advertised stream requirement
lacking some of them), but focus on the trivial part : Lets use the full set of
supported requirement for looking for unsupported ones.
This patch should be simple to backport to older version of Mercurial and
packager should be encouraged to do so.
This is a graft of
d9017df70135 from default.
Differential Revision: https://phab.mercurial-scm.org/D12091
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 11 Jan 2022 21:40:08 +0100] rev 48669
share-safe: enable by default (BC)
The feature have been around for a year (4 version) and is quite important.
Lets make it enabled by default.
Differential Revision: https://phab.mercurial-scm.org/D11997
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 11 Jan 2022 09:56:03 +0100] rev 48668
share-safe: add support for static-http repository
We need to read the second requirements file in the static-http case too. Otherwise, static-http would miss most of the requirements and misbehave.
Differential Revision: https://phab.mercurial-scm.org/D11996
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 11 Jan 2022 09:36:10 +0100] rev 48667
legacy-revlog: fix requirement computation when cloning legacy repo
The oldest format of repository does not have requirements so we need to treat
them differently when cloning such repository.
The previous code had issue whenever we start using a working-copy-only
requirements. The "legacy" format is signaled using an empty requirements list.
If we add working-copy-only requirements to it, this is no longer empty, and
no longer legacy.
The new code fix this, and will get fully tested in a couple of changeset, once the
share-safe become the default.
Differential Revision: https://phab.mercurial-scm.org/D11995
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 10 Jan 2022 12:48:35 +0100] rev 48666
requirements: do not warn about dropping share-safe, unless explicitly set
If we are just altering the default value, this is "fine". This will get tested
once share-safe become the default.
Differential Revision: https://phab.mercurial-scm.org/D11994
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 11 Jan 2022 06:40:44 +0100] rev 48665
sparse: take lock before writing requirements
with `share-safe`, we will also write file in the store. So we take the `lock`
before altering the requirements.
Differential Revision: https://phab.mercurial-scm.org/D11993
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 07 Jan 2022 16:30:11 +0100] rev 48664
largefiles: take lock before writing requirements
With `share-safe`, we will also write file in the store. We now take the `lock`
as needed.
Differential Revision: https://phab.mercurial-scm.org/D11992
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 07 Jan 2022 17:33:27 +0100] rev 48663
lfs: take lock before writing requirements
With `share-safe`, we will also write file in the store, so we take the store
lock before writing requirements.
Differential Revision: https://phab.mercurial-scm.org/D11991
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 11 Jan 2022 06:32:18 +0100] rev 48662
test: simpler requirements matching in test-repo-compengines.t
We focus on the requirements relevant for this tests.
Differential Revision: https://phab.mercurial-scm.org/D11990
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 10 Jan 2022 19:52:07 +0100] rev 48661
test: simpler requirements matching in test-lfs-largefiles.t
We focus on the requirements relevant for this tests.
Differential Revision: https://phab.mercurial-scm.org/D11989
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 10 Jan 2022 12:06:42 +0100] rev 48660
test: simpler requirements matching in test-sidedata.t
We focus on the requirements relevant for this tests.
Differential Revision: https://phab.mercurial-scm.org/D11988
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 10 Jan 2022 11:58:33 +0100] rev 48659
test: simpler requirement matching in test-revlog-v2.t
We narrow the matching toward the one we actually care about.
Differential Revision: https://phab.mercurial-scm.org/D11987
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 10 Jan 2022 19:46:54 +0100] rev 48658
test-copies: narrow the format check in test-copies-in-changeset.t
This will reduce the noise when touching unrelated format variants.
Differential Revision: https://phab.mercurial-scm.org/D11986
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 07 Jan 2022 17:32:25 +0100] rev 48657
tests: use debugrequires instead of grepping the file directly
With `share-safe`, the requirements are stored in multiple files so it seems
better to use the command that retrieve the information wherever it is.
Differential Revision: https://phab.mercurial-scm.org/D11985
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 11 Jan 2022 16:32:38 +0100] rev 48656
tests: use debugrequires in test-upgrade-repo.t
Whenever possible, we use the `hg debugrequires` command instead of directly
grepping the file.
Differential Revision: https://phab.mercurial-scm.org/D11984
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 06 Jan 2022 17:15:49 +0100] rev 48655
test: do not use `which` to find an exec path in the test
Posix is deprecated `which` in favor of `command -v`… which does not provide the same feature.
Debian is warning about this deprecation and this get annoying.
Differential Revision: https://phab.mercurial-scm.org/D11983
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 14 Jan 2022 18:17:55 +0100] rev 48654
stream-clone: stop considering working copy only requirements
Now that the ducks are properly aligned on there shelve, it becomes easy to fix
the list of requirements to consider for stream. We remove the working copy
specific ones and add some missing revlog specific ones.
Differential Revision: https://phab.mercurial-scm.org/D11982
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 18 Jan 2022 00:19:04 +0100] rev 48653
stream-clone: also filter the requirement we put in the bundle 2
We were wrongly putting irrelevant requirements in the bundle and the receiving
side was getting confused, treating them as being missing while still putting
them in the `requires` file. Leading do corrupted repositories.
This changes fix stream-clone behavior regarding format when bundle-2 is
involved, so we now also test this cases.
Behavior with older version of Mercurial will be fine as they filter the
requirements they get from the bundle on their side anyway.
Differential Revision: https://phab.mercurial-scm.org/D12084
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 24 Jan 2022 12:44:20 +0100] rev 48652
requirements: add an official `REVLOG_COMPRESSION_ZSTD` const
Such constant was missing and its value was missing from the set of requirements
that needs to be preserved through stream clone. This did not had any
consequence yet as the "bundle 2 does not filter its requirements" is shadowing
the issue.
However we are now in a situation where we can fix this issue. So lets do it
next.
With the preparation work on test, changing the streamreqs value only impact two
tests, where checking the full value seems to remains relevant.
Important note: Since older version of Mercurial used the old `supportedformat`
class attribute to check for stream requirement they supported, older version
will consider this requirements to prevent them from using streaming clone. Even
as they support this requirements for years. Pack for stable will be send to fix
it, but they will have to be backported to older version if needed.
Differential Revision: https://phab.mercurial-scm.org/D12083
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 18 Jan 2022 20:35:04 +0100] rev 48651
stream-requirements: smoother matching in test-http-protocol.t
The value of `streamreqs` changes depending of the format used, but this is not
relevant for this tests. So we doing a smarter matching of the line to avoid
this test interfering with format changes in the future.
Differential Revision: https://phab.mercurial-scm.org/D12082
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 18 Jan 2022 12:21:13 +0100] rev 48650
stream-requirements: smoother matching in test-ssh-bundle1.t
The value of `streamreqs` changes depending of the format used, but this is not
relevant for this tests. So we doing a smarter matching of the line to avoid
this test interfering with format changes in the future.
Differential Revision: https://phab.mercurial-scm.org/D12081
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 18 Jan 2022 12:02:50 +0100] rev 48649
stream-requirements: smoother matching in test-ssh-proto.t
The value of `streamreqs` changes depending of the format used, but this is not
relevant for this tests. So we doing a smarter matching of the line to avoid
this test interfering with format changes in the future.
Differential Revision: https://phab.mercurial-scm.org/D12080
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 18 Jan 2022 10:50:20 +0100] rev 48648
stream-requirements: smoother matching in test-hgweb-commands.t
The value of `streamreqs` changes depending of the format used, but this is not
relevant for this tests. So we doing a smarter matching of the line to avoid
this test interfering with format changes in the future.
Differential Revision: https://phab.mercurial-scm.org/D12079
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 18 Jan 2022 10:50:08 +0100] rev 48647
stream-requirements: smoother matching in test-treemanifest.t
The value of `streamreqs` changes depending of the format used, but this is not
relevant for this tests. So we doing a smarter matching of the line to avoid
this test interfering with format changes in the future.
Differential Revision: https://phab.mercurial-scm.org/D12078
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 18 Jan 2022 10:49:43 +0100] rev 48646
stream-requirements: smoother matching in test-ssh-proto-unbundle.t
The value of `streamreqs` changes depending of the format used, but this is not
relevant for this tests. So we doing a smarter matching of the line to avoid
this test interfering with format changes in the future.
Differential Revision: https://phab.mercurial-scm.org/D12077
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 24 Jan 2022 12:58:18 +0100] rev 48645
test-bundle: split some variant in there own section
Same rational as the previous commit about test-bundle.t. These line are quite
volatile and having dedicated block will make their update clearer and simpler.
Differential Revision: https://phab.mercurial-scm.org/D12076
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 18 Jan 2022 15:27:51 +0100] rev 48644
test-bundle: split each variant in there own section
Having conditional line matching for this kind of big block is quite
inconvenient to update. The new way should be simpler to maintain.
Differential Revision: https://phab.mercurial-scm.org/D12075
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 24 Jan 2022 01:28:16 +0100] rev 48643
test-http-bad-server: abstract the `streamreqs` value
Now that socket closing are decided much closer to the actual closure, we can
use fuzzy matching for this part of the exchange that changes on a regular
basis.
This should make fixing bug in stream requirements and enabling new format much
simpler.
Differential Revision: https://phab.mercurial-scm.org/D12074
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 19:57:47 +0100] rev 48642
test-http-bad-server: use the new pattern-reading for a test-case
This test case is now less sensitive to change of unrelated bits of the
client/server exchange.
Since this introduce some churn in the output, we do it independently for each
test cases. This patch is the last of such changes, for both sent and recv
cases.
Differential Revision: https://phab.mercurial-scm.org/D12073
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 19:25:57 +0100] rev 48641
test-http-bad-server: use the new pattern-reading for a test-case
This test case is now less sensitive to change of unrelated bits of the
client/server exchange.
Since this introduce some churn in the output, we do it independently for each
test cases.
Differential Revision: https://phab.mercurial-scm.org/D12072
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 19:19:05 +0100] rev 48640
test-http-bad-server: use the new pattern-reading for a test-case
This test case is now less sensitive to change of unrelated bits of the
client/server exchange.
Since this introduce some churn in the output, we do it independently for each
test cases.
Differential Revision: https://phab.mercurial-scm.org/D12071
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 19:04:10 +0100] rev 48639
test-http-bad-server: use the new pattern-reading for a test-case
This test case is now less sensitive to change of unrelated bits of the
client/server exchange.
Since this introduce some churn in the output, we do it independently for each
test cases.
Differential Revision: https://phab.mercurial-scm.org/D12070
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 23 Jan 2022 19:51:00 +0100] rev 48638
test-http-bad-server: use the new pattern-reading for a test-case
This test case is now less sensitive to change of unrelated bits of the
client/server exchange.
Since this introduce some churn in the output, we do it independently for each
test cases.
Differential Revision: https://phab.mercurial-scm.org/D12069
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 23 Jan 2022 19:49:42 +0100] rev 48637
test-http-bad-server: introduce socket closing after reading a pattern
We introduce the `close-after-recv-patterns` option. It has the same goal as
`close-after-send-patterns` with a slightly different implementation.
Reading "up to a pattern" is hard. As we can only check the pattern from what we
have already read (inlike writing, were we can check what we are about to
write).
So instead we make the `close-after-recv-patterns` alter the behavior of the
existing `close-after-recv-bytes`. The value from `close-after-recv-bytes` only
gets into play after we have seen the pattern from `close-after-recv-patterns`.
This allow us to achieve the target benefit without changing the read pattern
too much.
Differential Revision: https://phab.mercurial-scm.org/D12068
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 18:22:13 +0100] rev 48636
test-http-bad-server: move on test from bytes-count to pattern
This specific test case is now using the new "close when a pattern is seen"
approach compared to the more fragile "that many bytes were sent" approach.
Since such change are still a bit noisy, we split each change in there own
changesets.
Differential Revision: https://phab.mercurial-scm.org/D12067
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 18:01:59 +0100] rev 48635
test-http-bad-server: move on test from bytes-count to pattern
This specific test case is now using the new "close when a pattern is seen"
approach compared to the more fragile "that many bytes were sent" approach.
Since such change are still a bit noisy, we split each change in there own
changesets.
Differential Revision: https://phab.mercurial-scm.org/D12066
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 17:54:31 +0100] rev 48634
test-http-bad-server: move on test from bytes-count to pattern
This specific test case is now using the new "close when a pattern is seen"
approach compared to the more fragile "that many bytes were sent" approach.
Since such change are still a bit noisy, we split each change in there own
changesets.
Differential Revision: https://phab.mercurial-scm.org/D12065
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 17:53:06 +0100] rev 48633
test-http-bad-server: move on test from bytes-count to pattern
This specific test case is now using the new "close when a pattern is seen"
approach compared to the more fragile "that many bytes were sent" approach.
Since such change are still a bit noisy, we split each change in there own
changesets.
Differential Revision: https://phab.mercurial-scm.org/D12064
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 17:49:59 +0100] rev 48632
test-http-bad-server: move on test from bytes-count to pattern
This specific test case is now using the new "close when a pattern is seen"
approach compared to the more fragile "that many bytes were sent" approach.
Since such change are still a bit noisy, we split each change in there own
changesets.
Differential Revision: https://phab.mercurial-scm.org/D12063
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 17:40:02 +0100] rev 48631
test-http-bad-server: move on test from bytes-count to pattern
This specific test case is now using the new "close when a pattern is seen"
approach compared to the more fragile "that many bytes were sent" approach.
Since such change are still a bit noisy, we split each change in there own
changesets.
Differential Revision: https://phab.mercurial-scm.org/D12062
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 17:06:01 +0100] rev 48630
test-http-bad-server: move on test from bytes-count to pattern
This specific test case is now using the new "close when a pattern is seen"
approach compared to the more fragile "that many bytes were sent" approach.
Since such change are still a bit noisy, we split each change in there own
changesets.
Differential Revision: https://phab.mercurial-scm.org/D12061
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 17:00:58 +0100] rev 48629
test-http-bad-server: move on test from bytes-count to pattern
This specific test case is now using the new "close when a pattern is seen"
approach compared to the more fragile "that many bytes were sent" approach.
Since such change are still a bit noisy, we split each change in there own
changesets.
Differential Revision: https://phab.mercurial-scm.org/D12060
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 21 Jan 2022 16:27:13 +0100] rev 48628
test-http-bad-server: move on test from bytes-count to pattern
This specific test case is now using the new "close when a pattern is seen"
approach compared to the more fragile "that many bytes were sent" approach.
Since such change are still a bit noisy, we split each change in there own
changesets.
Differential Revision: https://phab.mercurial-scm.org/D12059