- Oct 23, 2024
-
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
See 61557734c0ae for the reasoning.
-
Matt Harbison authored
These CamelCase names popped up this cycle because pytype was getting confused by the zope decorator, and so the decoration was decoupled from the class declaration. We're in the process of switching all of the zope interfaces to `typing.Protocol` classes, but we're up against the code freeze. It would be nice to use CamelCase for protocol classes (or classes in general), but let's reset to a consistent state and buy some more time to think about this. Since we're moving to Protocol classes and I disabled the interface tests back in ef7d85089952, I'm not bothering to re-add the decorator, and re-confuse pytype. But do place the interface next to the class, so that these places can be found with the `grep` when the time comes to subclass.
-
Pierre-Yves David authored
The usage of pyflakes as a Python module was introduced in e397c6d74652, to work around issue between Python 2 and Python 3. This issues are long behind us now and we can get beck to using pyflakes as a tool, giving us more flexibility about how we install it. The `hghave` requirements is modified to check that we have a tool available, instead of a python module.
-
- Oct 22, 2024
-
-
Pierre-Yves David authored
This gives me different formatting on latest version available in Debian. So disabling for now.
-
- Oct 16, 2024
-
-
Raphaël Gomès authored
Explanations inline.
-
- Oct 01, 2024
-
-
Raphaël Gomès authored
This case is easy to detect and we have all we need to generate a valid working copy and dirstate entirely in Rust, which speeds things up considerably: On my machine updating a repo of ~300k files goes from 10.00s down to 4.2s, all while consuming 50% less system time, with all caches hot. Something to note is that further improvements will probably happen with the upcoming `InnerRevlog` series that does smarter mmap hanlding, especially for filelogs. Here are benchmark numbers on a machine with only 4 cores (and no SMT enabled) ``` ### data-env-vars.name = heptapod-public-2024-03-25-ds2-pnm # benchmark.name = hg.command.update # bin-env-vars.hg.py-re2-module = default # bin-env-vars.hg.changeset.node = <this change> # benchmark.variants.atomic-update = no # benchmark.variants.scenario = null-to-tip # benchmark.variants.worker = default default: 5.328762 ~~~~~ rust: 1.308654 (-75.44%, -4.02) ### data-env-vars.name = mercurial-devel-2024-03-22-ds2-pnm # benchmark.name = hg.command.update # bin-env-vars.hg.py-re2-module = default # bin-env-vars.hg.changeset.node = <this change> # benchmark.variants.atomic-update = no # benchmark.variants.scenario = null-to-tip # benchmark.variants.worker = default default: 1.693271 ~~~~~ rust: 1.151053 (-32.02%, -0.54) ### data-env-vars.name = mozilla-unified-2024-03-22-ds2-pnm # benchmark.name = hg.command.update # bin-env-vars.hg.py-re2-module = default # bin-env-vars.hg.changeset.node = <this change> # benchmark.variants.atomic-update = no # benchmark.variants.scenario = null-to-tip # benchmark.variants.worker = default default: 38.901613 ~~~~~ rust: 11.637880 (-70.08%, -27.26) ### data-env-vars.name = netbsd-xsrc-public-2024-09-19-ds2-pnm # benchmark.name = hg.command.update # bin-env-vars.hg.py-re2-module = default # bin-env-vars.hg.changeset.node = <this change> # benchmark.variants.atomic-update = no # benchmark.variants.scenario = null-to-tip # benchmark.variants.worker = default default: 4.793727 ~~~~~ rust: 1.505905 (-68.59%, -3.29) ```
-
- Oct 16, 2024
-
-
Raphaël Gomès authored
Explanations inline. This also makes use of `make_mtime_reliable`, which unifies our mtime raciness logic from the status. On top of this, this fixes the handling of the pure dirstate status to better catch racy status, as we've been doing in Rust for a long time now.
-
Raphaël Gomès authored
I have multiple reasons: - The body of `_update` is way too long - This adds typing which will help our tooling and brains understand this code more easily - This function will get more nested and complex in the next patch I've taken the liberty of rewrapping and typo-passing the docstring.
-
Raphaël Gomès authored
This is going to be used with pre-computed times unlike in status.
-
Raphaël Gomès authored
This is easy to do and helps both Pytype and developpers understand what objects they are dealing with.
-
Raphaël Gomès authored
This is going to be used with pre-computed times unlike in status.
-
- Oct 03, 2024
-
-
Raphaël Gomès authored
This is closer to the behavior of what Python does. So far, we were checking only the inode, but this might not be good enough for the v1 case.
-
- Oct 14, 2024
-
-
Raphaël Gomès authored
fc8e37c380d3 added synchronization points to the dirstate to allow for race condition testing without actually requiring a time-based race condition to happen. This changes adds the `pre-read-file` wait point before we read the docket, since callers might ask for the parents before anything else is read, leading to the first read being done before the wait point. This removes some differences in test output which were presumed to be speed related, but weren't.
-
- Oct 02, 2024
-
-
Raphaël Gomès authored
This can happen at two places, but it's not really enough time to justify it being refactored. Let's ensure we have the same error message, the newer one being slightly more helpful.
-
Raphaël Gomès authored
This covers the *on-disk* case, where the path itself does not have a `.hg` component.
-
Raphaël Gomès authored
We will make use of the path auditor when running our update fast-path, and we want to output of it to be close enough.
-
Raphaël Gomès authored
We will make use of this with the `hg update` fastpath
-
Raphaël Gomès authored
Explanations inline
-
Raphaël Gomès authored
This mistake was not causing any problems yet since we were never updating parents from Rust code. This is about to change, so let's fix it.
-
- Oct 01, 2024
-
-
Raphaël Gomès authored
I suspect this will not be the last time we need to do something like this.
-
Raphaël Gomès authored
I encountered this when debugging earlier and felt like we were losing some information along the way, which we were!
-
- Sep 30, 2024
-
-
Raphaël Gomès authored
This makes the interface a lot clearer at the call site and prevents silly mistakes, as an API with a bunch of booleans is prone to errors. This refactor adds a `from_empty` parameter for a fast-path when resetting and entry we're sure does not exist. It will be used in the upcoming update Rust fastpath, and was not split to prevent more churn.
-
Raphaël Gomès authored
This will be useful in a future patch to avoid a lot of boilerplate.
-
Raphaël Gomès authored
This will be the entry point for all progress bars from a Python context in upcoming patches. Like the `Progress` trait, this is subject to change once we have more use cases, but this is good enough for now.
-
Raphaël Gomès authored
This will be used in the next few changes to introduce a progress bar for the `hg update` fastpath.
-
Raphaël Gomès authored
We won't need to parse a revset all the time, and an upcoming patch will make use of this new util.
-
Raphaël Gomès authored
This enables us to use this code in multithreaded environements, which we very much want to do.
-
Raphaël Gomès authored
This is going to be useful when implementing parts of `update` and makes it so we don't have to fetch the manifest and each entry twice.
-
Raphaël Gomès authored
This makes the compiler use the niche optimization for all flags: since 0 is not a valid representation of any flags, we can use 0 as a replacement for `None`, which reduces memory footprint and could yield a little performance improvement over many iterations.
-