Felipe Contreras <felipe.contreras@gmail.com> [Thu, 09 Mar 2023 13:02:13 -0600] rev 50435
fastexport: rework newline logic
Newlines should only be added when otherwise the stream would look weird
without them (on blobs), therefore they are the exception.
Flip the logic so they are added, not skipped.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Mon, 06 Mar 2023 11:27:57 +0000] rev 50434
encoding: avoid quadratic time complexity when json-encoding non-UTF8 strings
Apparently the code uses "+=" with a bytes object, which is linear-time, so the
whole encoding is quadratic-time. This patch makes us use a bytearray object,
instead, which has a(n amortized-)constant-time append operation.
The encoding is still not particularly fast, but at least a 10MB file
takes tens of seconds, not many hours to encode.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 08 Mar 2023 11:01:11 +0100] rev 50433
bundle: prevent implicite bundling of internal changeset
Now that the two mains source of on-disk bundle are preventing the inclusion of
internal changesets in their bundling. We can add a lower level check that
would prevent any other leakage of internal-phase changesets.
We keep the door open to some usage, like the temporary bundle using during
strip for example.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 10 Mar 2023 07:19:25 +0100] rev 50432
bundle: abort if the user request bundling of internal changesets
See inline comments for details.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 10 Mar 2023 07:10:19 +0100] rev 50431
strip: do now include internal changeset in the strip backup
See inline comment for details.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 08 Mar 2023 11:00:30 +0100] rev 50430
revset: add `_internal()` predicate
This predicate help core code to select internal changeset (in the internal
phase).
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 10 Mar 2023 03:41:18 +0100] rev 50429
strip: drop the assert about bundled revision
This is working well, so no need for extract computation. See the previous
changeset for the rationnal of still have these assert around for a short
interval.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 09 Mar 2023 15:06:59 +0100] rev 50428
strip: explicitly compute the boundary of the backup bundle
We want to make change to the set of backed up revision in a future changeset,
we start with a change of the computation without any changes in the semantic
to clarify later changeset.
The could of costly assert are here to testify that the result is still
correct. They will be removed in the next changesets, but I wanted them in this
changeset to help in case someone bisect a regression to this changeset in the
future.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 10 Mar 2023 04:04:10 +0100] rev 50427
outgoing: fix common-heads computation from `missingroots` argument
When initializing a `outgoing` object, the `common set` can be defined explicitly (with the `commonheads` argument`) or implicitly (with the missingroots arguments).
It turns out the logic to compute `commonheads` from `missingroots` is buggy, as it does not consider the parents of enough changesets. Previously, it only considered parents of "missingroots` items, while it need to consider all parents of missing. Here is an example:
F
|\
C E
| |
B D
|/
A
If we use [E] as missing-roots, the missing set is [E, F], and the common-heads
are [C, D]. However you cannot only consider the parent of [E] to find them, as
[C] is not a parent of [E].
This already fix the bundle generated in one test, and it would prevent many
other to misbehave with future change from this series.
Jason R. Coombs <jaraco@jaraco.com>, Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 09 Mar 2023 01:26:04 +0100] rev 50426
bundle: include required phases when saving a bundle (issue6794)
We now properly computes and includes phases above secret in bundle,
previously, they would be skipped, and then the code computing them would
crash.
Note that from this changeset, we also include the heads associated with the
changegroup's "target" phase. This turned out to be necessary to ensure the
movement of changeset included in the bundle, but already known locally.
This explain why lines for "secret" heads appears in multiple tests.