Wed, 20 Oct 2021 16:54:43 +0200 pyoxidizer: force pip to not use pep517 in order to be able to install hg stable
Raphaël Gomès <rgomes@octobus.net> [Wed, 20 Oct 2021 16:54:43 +0200] rev 48272
pyoxidizer: force pip to not use pep517 in order to be able to install hg Mercurial is not (yet) a pep517 package, but the presence of a pyproject.toml file tells newer-ish versions of pip that it should be one. This is related to 58fe6d127a01, and fixes pyoxidizer builds for the Heptapod CI. Differential Revision: https://phab.mercurial-scm.org/D11710
Tue, 19 Oct 2021 16:14:53 -0700 merge-halt: fix issue with merge.on-failure=halt breaking unshelve stable
Kyle Lippincott <spectral@google.com> [Tue, 19 Oct 2021 16:14:53 -0700] rev 48271
merge-halt: fix issue with merge.on-failure=halt breaking unshelve Differential Revision: https://phab.mercurial-scm.org/D11706
Tue, 19 Oct 2021 16:14:46 -0700 merge-halt: demonstrate unshelve issue with merge.on-failure=halt stable
Kyle Lippincott <spectral@google.com> [Tue, 19 Oct 2021 16:14:46 -0700] rev 48270
merge-halt: demonstrate unshelve issue with merge.on-failure=halt Differential Revision: https://phab.mercurial-scm.org/D11705
Tue, 19 Oct 2021 19:05:41 +0200 rust-nodemap: backed out mitigation for issue 6554 stable
Georges Racinet <georges.racinet@octobus.net> [Tue, 19 Oct 2021 19:05:41 +0200] rev 48269
rust-nodemap: backed out mitigation for issue 6554 This is a backout of changeset 3fffb48539ee. Issue 6554 is now considered solved, hence its mitigation has to be removed, if only for its performance cost. Differential Revision: https://phab.mercurial-scm.org/D11703
Mon, 18 Oct 2021 16:24:00 -0700 pyoxidizer: update README.md with several small fixes
Kyle Lippincott <spectral@google.com> [Mon, 18 Oct 2021 16:24:00 -0700] rev 48268
pyoxidizer: update README.md with several small fixes Currently, pyoxidizer.bzl does not mention the git commit that should be checked out, so these instructions are a bit difficult to follow right now (impossible, technically), so I removed the instruction to `git checkout <Git commit>` and the admonition to use a specific version of PyOxidizer. I don't even know if the project currently builds with the "0.7.0-pre" version that was previously recommended. As fallout from that change to not "pin" to a specific PyOxidizer, I had to update the Python version to use when running the tests. While here, I added a recommendation to use `--release`, as the primary reason for this project is performance, and it may have been leaving some on the table to not have that there. Differential Revision: https://phab.mercurial-scm.org/D11698
Mon, 18 Oct 2021 16:18:41 -0700 pyoxidizer: disable using in-memory resources
Kyle Lippincott <spectral@google.com> [Mon, 18 Oct 2021 16:18:41 -0700] rev 48267
pyoxidizer: disable using in-memory resources It's possible that the errors are due to using an incompatible version of PyOxidizer; unfortunately the README.md file in this directory says to fetch a copy of PyOxidizer matching the commit in this pyoxidizer.bzl file, and yet the pyoxidizer.bzl file does not actually have a commit mentioned in it. By disabling in-memory modules, this appears to work on all platforms using the current head version of PyOxidizer, so let's disable them for now. Sample error (during `pyoxidizer build`): ``` error[PYOXIDIZER_PYTHON_EXECUTABLE]: adding PythonExtensionModule<name=hgext.fsmonitor.pywatchman.bser> Caused by: extension module hgext.fsmonitor.pywatchman.bser cannot be loaded from memory but memory loading required --> ./pyoxidizer.bzl:140:5 | 140 | exe.add_python_resources(exe.pip_install(["--verbose", ROOT])) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ add_python_resources() error: adding PythonExtensionModule<name=hgext.fsmonitor.pywatchman.bser> Caused by: extension module hgext.fsmonitor.pywatchman.bser cannot be loaded from memory but memory loading required ``` Differential Revision: https://phab.mercurial-scm.org/D11697
Wed, 20 Oct 2021 00:21:41 +0200 dirstate-v2: reorder flag to group related one together
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 20 Oct 2021 00:21:41 +0200] rev 48266
dirstate-v2: reorder flag to group related one together Since the format is not frozen yet, it seems like the right moment to do it. Differential Revision: https://phab.mercurial-scm.org/D11704
Tue, 19 Oct 2021 20:14:17 +0200 dirstate-v2: read the fallback value in Rust
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 19 Oct 2021 20:14:17 +0200] rev 48265
dirstate-v2: read the fallback value in Rust This was overlooked in a previous commit. Differential Revision: https://phab.mercurial-scm.org/D11695
Tue, 19 Oct 2021 18:18:05 +0200 dirstate-v2: adjust the meaning of directory flags
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 19 Oct 2021 18:18:05 +0200] rev 48264
dirstate-v2: adjust the meaning of directory flags Tracking directory "explicitly" give use the opportunity to distinct between entry that are untracked because they are part of the directory structure and entry that are ignored/unknown files on the files system. The help is adjusted to the new semantic and the code now comply to it for both read and write. Differential Revision: https://phab.mercurial-scm.org/D11694
Wed, 13 Oct 2021 15:58:14 +0200 dirstate-v2: actually use sub-second mtime precision
Simon Sapin <simon.sapin@octobus.net> [Wed, 13 Oct 2021 15:58:14 +0200] rev 48263
dirstate-v2: actually use sub-second mtime precision Instead of zero, set the nanoseconds field to its correct value whenever possible and preserve it across serialization+parsing. Differential Revision: https://phab.mercurial-scm.org/D11702
Thu, 14 Oct 2021 13:54:39 +0200 dirstate: ignore sub-second component when either is zero in mtime
Simon Sapin <simon.sapin@octobus.net> [Thu, 14 Oct 2021 13:54:39 +0200] rev 48262
dirstate: ignore sub-second component when either is zero in mtime When comparing mtimes for equality. Some APIs simply return zero when more precision is not available. When comparing values from different sources, if only one is truncated in that way, doing a simple comparison would cause many false negatives. Differential Revision: https://phab.mercurial-scm.org/D11701
Tue, 19 Oct 2021 22:04:14 +0200 dirstate-v2: add a new MTIME_SECOND_AMBIGUOUS flags
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 19 Oct 2021 22:04:14 +0200] rev 48261
dirstate-v2: add a new MTIME_SECOND_AMBIGUOUS flags This flag will let us use more `mtime` value in the future. For now we have a minimal handling of the flag at read time, but we will never put ourself in a situation where we will needs to writes it. See the flag documentation for details. Differential Revision: https://phab.mercurial-scm.org/D11700
Mon, 18 Oct 2021 11:23:07 +0200 dirstate: store mtimes with nanosecond precision in memory
Simon Sapin <simon.sapin@octobus.net> [Mon, 18 Oct 2021 11:23:07 +0200] rev 48260
dirstate: store mtimes with nanosecond precision in memory Keep integer seconds since the Unix epoch, together with integer nanoseconds in the `0 <= n < 1e9` range. For now, nanoseconds are still always zero. This commit is about data structure changes. Differential Revision: https://phab.mercurial-scm.org/D11684
Tue, 19 Oct 2021 21:03:13 +0200 rust: remove now-unused DirstateEntry::clear_ambiguous_mtime method
Simon Sapin <simon.sapin@octobus.net> [Tue, 19 Oct 2021 21:03:13 +0200] rev 48259
rust: remove now-unused DirstateEntry::clear_ambiguous_mtime method Differential Revision: https://phab.mercurial-scm.org/D11696
Tue, 19 Oct 2021 22:14:48 +0200 dirstate: align Rust function name to `need_delay`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 19 Oct 2021 22:14:48 +0200] rev 48258
dirstate: align Rust function name to `need_delay` The rest of the code use this name. It is not a great name, but it is better to stay consistent. Differential Revision: https://phab.mercurial-scm.org/D11699
Mon, 18 Oct 2021 19:02:40 +0200 dirstate: rename a `very_likely_equal` method to `likely_equal`
Simon Sapin <simon.sapin@octobus.net> [Mon, 18 Oct 2021 19:02:40 +0200] rev 48257
dirstate: rename a `very_likely_equal` method to `likely_equal` No need to oversell it. Differential Revision: https://phab.mercurial-scm.org/D11691
Tue, 19 Oct 2021 19:03:39 +0200 backout: backed out changeset 2f2107c01dee
Raphaël Gomès <rgomes@octobus.net> [Tue, 19 Oct 2021 19:03:39 +0200] rev 48256
backout: backed out changeset 2f2107c01dee After discussion on the original phab patch, we've decided to wait until Python 2 support is dropped to do this since the behavior differs for relatively obscure reasons. Differential Revision: https://phab.mercurial-scm.org/D11692
Tue, 19 Oct 2021 19:04:11 +0200 backout: backed out changeset 6edc8800dbc3
Raphaël Gomès <rgomes@octobus.net> [Tue, 19 Oct 2021 19:04:11 +0200] rev 48255
backout: backed out changeset 6edc8800dbc3 Same as the previous changeset. Differential Revision: https://phab.mercurial-scm.org/D11693
Mon, 18 Oct 2021 10:56:54 +0200 dirstate-v2: preserve the fallback values on disk
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 18 Oct 2021 10:56:54 +0200] rev 48254
dirstate-v2: preserve the fallback values on disk When the fallback values are set, they are now read and written to disk. See format documentation for details. Differential Revision: https://phab.mercurial-scm.org/D11688
Mon, 18 Oct 2021 20:02:05 +0200 dirstate: make DirstateItem constructor accept fallback value
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 18 Oct 2021 20:02:05 +0200] rev 48253
dirstate: make DirstateItem constructor accept fallback value This could arguably goes in the previous changeset, but I wanted to keep that previous changeset small to focus more on the user code and the documentation. Differential Revision: https://phab.mercurial-scm.org/D11687
Mon, 18 Oct 2021 20:02:15 +0200 dirstate: add a concept of "fallback" flags to dirstate item
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 18 Oct 2021 20:02:15 +0200] rev 48252
dirstate: add a concept of "fallback" flags to dirstate item The concept is defined and "used" by the flag code, but it is neither persisted nor set anywhere yet. We currently focus on defining the semantic of the attribute. More to come in the next changesets Check the inline documentation for details. Differential Revision: https://phab.mercurial-scm.org/D11686
Fri, 15 Oct 2021 16:33:19 +0200 dirstate-v2: adds two flag to track the presence of some unrecorded files
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 15 Oct 2021 16:33:19 +0200] rev 48251
dirstate-v2: adds two flag to track the presence of some unrecorded files Right now, we don't record ignored or unknown files in the dirstate. However the structure would allow it. So we introduce two flags that can be used to clarify whether all unknown/ignored children are recorded or not. This will allow for more information to be stored in the future if this end up being relevant. Differential Revision: https://phab.mercurial-scm.org/D11682
Fri, 15 Oct 2021 16:12:00 +0200 dirstate-v2: adds a flag to mark a file as modified
Simon Sapin <simon.sapin@octobus.net> [Fri, 15 Oct 2021 16:12:00 +0200] rev 48250
dirstate-v2: adds a flag to mark a file as modified Right now, a files with a file system state that requires a lookup (same size, different mtime) will requires a lookup. If the result of that lookup is a modified files, it will remains ambiguous, requiring a lookup on the next status run too. To fix this, we introduce a dedicated flag in the new format. Such flag will allow to record such file as "known modified" avoiding an extra lookup later. As None of the associate code currently exist in the status code, we do the minimal implementation: if we read a dirstate entry with this flag set, we make it as "ambiguous" so that the next status code has to look it up. The same as it would have to without this flag existing anyway. Differential Revision: https://phab.mercurial-scm.org/D11681
Tue, 19 Oct 2021 10:52:13 +0100 rhg: simplify split_metadata
Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 19 Oct 2021 10:52:13 +0100] rev 48249
rhg: simplify split_metadata It turns out that it's possible to implement `FilelogEntry.into_data` on top of `split`, as proposed by @spectral. Differential Revision: https://phab.mercurial-scm.org/D11689
Fri, 27 Aug 2021 14:40:09 +0200 pyoxidizer: default to a meaningless release instead of hardcoding 5.8
Raphaël Gomès <rgomes@octobus.net> [Fri, 27 Aug 2021 14:40:09 +0200] rev 48248
pyoxidizer: default to a meaningless release instead of hardcoding 5.8 This way we don't advertise the wrong version, or if we do it's really obvious. To be honest, I'm not even sure that `VERSION` should be optional, but I also have never used the packaging tools so far, this is simply something I saw. Differential Revision: https://phab.mercurial-scm.org/D11360
Thu, 14 Oct 2021 10:58:39 -0700 copy: recommend `--at-rev .` if target was added in parent commit
Martin von Zweigbergk <martinvonz@google.com> [Thu, 14 Oct 2021 10:58:39 -0700] rev 48247
copy: recommend `--at-rev .` if target was added in parent commit If the target file was added in the working copy parent, it's much more likely that the user meant to use `--at-rev .` (to record the copy/rename in the that commit) than `--force` (to replace the just-added file by another file). Differential Revision: https://phab.mercurial-scm.org/D11667
Mon, 18 Oct 2021 10:14:44 +0200 fix: appease pyflakes and make unused variables more obvious
Raphaël Gomès <rgomes@octobus.net> [Mon, 18 Oct 2021 10:14:44 +0200] rev 48246
fix: appease pyflakes and make unused variables more obvious pyflakes is complaining that `baserevs` is redefined by the list comprehension, and while this lint can be valuable, it's not actually a problem here. Differential Revision: https://phab.mercurial-scm.org/D11683
Mon, 18 Oct 2021 17:11:48 +0200 rewrite: fix issue6599 stable
Raphaël Gomès <rgomes@octobus.net> [Mon, 18 Oct 2021 17:11:48 +0200] rev 48245
rewrite: fix issue6599 Explanation inside. Differential Revision: https://phab.mercurial-scm.org/D11685
Fri, 15 Oct 2021 04:41:24 +0200 bookmarks: add a `ignore` variant of the bookmark mode
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 15 Oct 2021 04:41:24 +0200] rev 48244
bookmarks: add a `ignore` variant of the bookmark mode This new mode allow to disable bookmark exchange with some path (or all path). Differential Revision: https://phab.mercurial-scm.org/D11677
Fri, 15 Oct 2021 04:25:58 +0200 bookmarks: add support for `mirror` mode to `incoming`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 15 Oct 2021 04:25:58 +0200] rev 48243
bookmarks: add support for `mirror` mode to `incoming` This is more consistent. Differential Revision: https://phab.mercurial-scm.org/D11676
Fri, 15 Oct 2021 03:49:05 +0200 bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 15 Oct 2021 03:49:05 +0200] rev 48242
bookmarks: move the `mirror` option to the `paths` section A new `bookmarks` section with a `mirror` option have been added. That option has never been released yet. This new options is limited since it affect all paths without distinction. In case where a repository is interacting with multiple peers, being able to control behavior on a path basis can be quite valuable. In addition, having more variant of behavior would be interesting, especially a mode where no bookmark exchanged is tried at all. Such new mode (implemented later) make a lot of sense for configuration on a path-basis. Configuration of the default behavior is still possible through the usage of generic path configuration. The "old" config, becomes: [bookmarks] mirror=True becomes: [path] *:bookmarks.mode=mirror Differential Revision: https://phab.mercurial-scm.org/D11675
Fri, 15 Oct 2021 03:28:28 +0200 path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 15 Oct 2021 03:28:28 +0200] rev 48241
path: keep the path instance in the `pulloperation` This will allow more pull code to use the path options. Ideally we would modify the peer API to keep the path instance. However that is much more churn that I can deal with for my current goal: adjusting a user facing API for a new feature before we release it in the 6.0 changesets. So I am taking a shortcut that seems reasonable. Differential Revision: https://phab.mercurial-scm.org/D11674
Fri, 15 Oct 2021 02:44:14 +0200 path: return path instance directly from get_pull_paths
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 15 Oct 2021 02:44:14 +0200] rev 48240
path: return path instance directly from get_pull_paths This means the caller has to do a bit more work, however it give access to the `path` instance and the information it contains. Differential Revision: https://phab.mercurial-scm.org/D11673
Fri, 15 Oct 2021 02:36:54 +0200 path: unify path creation in `get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 15 Oct 2021 02:36:54 +0200] rev 48239
path: unify path creation in `get_pull_paths` This remove a special case and will make it possible to return `path` instance directly. Differential Revision: https://phab.mercurial-scm.org/D11672
Fri, 15 Oct 2021 02:36:38 +0200 path: add a new argument to control path validation
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 15 Oct 2021 02:36:38 +0200] rev 48238
path: add a new argument to control path validation During pull, unvalidated path might be used, having the option to do so directly will allow use to simplify some code and unlock more `path` usage later in the series. Differential Revision: https://phab.mercurial-scm.org/D11671
Fri, 15 Oct 2021 14:05:20 +0100 rhg: internally, return a structured representation from hg cat
Arseniy Alekseyev <aalekseyev@janestreet.com> [Fri, 15 Oct 2021 14:05:20 +0100] rev 48237
rhg: internally, return a structured representation from hg cat The purpose of this change is to make it possible to support limited templating in `hg cat`, so we could print separators between files etc. The templating itself is not implemented yet, so this functionality is unused in `rhg cat`. However, in our fork of hg we're implementing a slightly different command `hg jscat` which makes use of this. So accepting this change will let us minimize the size of the patch we're maintaining on our side. Differential Revision: https://phab.mercurial-scm.org/D11679
Thu, 14 Oct 2021 19:02:08 +0100 rhg: fix `hg cat` interaction with null revision
Arseniy Alekseyev <aalekseyev@janestreet.com> [Thu, 14 Oct 2021 19:02:08 +0100] rev 48236
rhg: fix `hg cat` interaction with null revision Differential Revision: https://phab.mercurial-scm.org/D11664
Fri, 15 Oct 2021 01:27:39 +0200 dirstate-v2: add an option to prevent unintentional slow dirstate-v2
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 15 Oct 2021 01:27:39 +0200] rev 48235
dirstate-v2: add an option to prevent unintentional slow dirstate-v2 This is the project policy discussed in November 2020 and already put to use for the persistent nodemap. Differential Revision: https://phab.mercurial-scm.org/D11668
Thu, 14 Oct 2021 22:35:46 -0700 rhg: fix formatting error reported by test-check-format-rust.t
Martin von Zweigbergk <martinvonz@google.com> [Thu, 14 Oct 2021 22:35:46 -0700] rev 48234
rhg: fix formatting error reported by test-check-format-rust.t Differential Revision: https://phab.mercurial-scm.org/D11670
Tue, 12 Oct 2021 13:54:06 -0700 chistedit: add option to show order of commits in opposite order
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 13:54:06 -0700] rev 48233
chistedit: add option to show order of commits in opposite order Many users (including me) expect the order of commits in histedit to match the order in `hg log -G` and are confused because it doesnn't. This patch adds an option to show later commits first in the list. I've only added support for it in chistedit for now. As a consequence, I've marked the config option experimental (I think it should apply to both interfaces before it graduates). Differential Revision: https://phab.mercurial-scm.org/D11669
Thu, 14 Oct 2021 16:39:16 +0200 dirstate-v2: Separate HAS_FILE_MTIME and HAS_DIRECTORY_MTIME flags
Simon Sapin <simon.sapin@octobus.net> [Thu, 14 Oct 2021 16:39:16 +0200] rev 48232
dirstate-v2: Separate HAS_FILE_MTIME and HAS_DIRECTORY_MTIME flags Previously the same flag was used, with its meaning based on whether the node otherwise identifies a file tracked anywhere. In addition to being more explicit, this enables storing a directory mtime if a given path used to be tracked in a parent commit (so the dirstate still has data about it) but became a directory in the working copy. (However this is not done yet as it would require a larger change, replacing the `dirstate_map::NodeData` enum with struct fields.) Differential Revision: https://phab.mercurial-scm.org/D11662
Thu, 14 Oct 2021 16:06:31 +0200 dirstate-v2: Extend node flags to 16 bits
Simon Sapin <simon.sapin@octobus.net> [Thu, 14 Oct 2021 16:06:31 +0200] rev 48231
dirstate-v2: Extend node flags to 16 bits Only 7 out of 8 available bits are used right now. Reserve some more. Future versions of Mercurial may assign meaning to some of these bits, with the limitation that then-older versions will always reset those bits to unset when writing nodes. (A new node is written for any mutation in its subtree, leaving the bytes of the old node unreachable until the data file is rewritten entirely.) Differential Revision: https://phab.mercurial-scm.org/D11661
Thu, 14 Oct 2021 08:58:07 -0700 narrow: raise StateError when working copy is stale (for detailed exit code)
Martin von Zweigbergk <martinvonz@google.com> [Thu, 14 Oct 2021 08:58:07 -0700] rev 48230
narrow: raise StateError when working copy is stale (for detailed exit code) Differential Revision: https://phab.mercurial-scm.org/D11663
Thu, 14 Oct 2021 15:05:04 +0200 dirstate-v2: Use attributes as intended instead of properties in v2_data()
Simon Sapin <simon.sapin@octobus.net> [Thu, 14 Oct 2021 15:05:04 +0200] rev 48229
dirstate-v2: Use attributes as intended instead of properties in v2_data() The property return other integer values instead of None, so `is not None` does not work. This fixes test-dirstate-race.t in pure-Python mode, which currently fails on the default branch. Differential Revision: https://phab.mercurial-scm.org/D11660
Thu, 14 Oct 2021 13:59:18 +0200 dirstate: Remove unused variable
Simon Sapin <simon.sapin@octobus.net> [Thu, 14 Oct 2021 13:59:18 +0200] rev 48228
dirstate: Remove unused variable This fixes test-check-pyflakes.t which is currently failing on the default branch. Differential Revision: https://phab.mercurial-scm.org/D11658
Thu, 14 Oct 2021 13:58:25 +0200 rust: Reformat source code
Simon Sapin <simon.sapin@octobus.net> [Thu, 14 Oct 2021 13:58:25 +0200] rev 48227
rust: Reformat source code This fixes test-check-rust-format.t which is currently failing on the default branch. Differential Revision: https://phab.mercurial-scm.org/D11657
Thu, 14 Oct 2021 13:34:37 +0100 rhg: do not try to open a nodemap for an inline index
Arseniy Alekseyev <aalekseyev@janestreet.com> [Thu, 14 Oct 2021 13:34:37 +0100] rev 48226
rhg: do not try to open a nodemap for an inline index This saves an [open] system call per file, which is a small saving, but it showed up in the profile at large file counts (it accounted for 30ms out of 400ms needed for catting 10000 files, on a ZFS filesystem on Linux, so ~3us per syscall). Differential Revision: https://phab.mercurial-scm.org/D11659
Tue, 05 Oct 2021 15:10:42 +0100 rhg: stop manifest traversal when no more files are needed
Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 05 Oct 2021 15:10:42 +0100] rev 48225
rhg: stop manifest traversal when no more files are needed Stopping the traversal early can skip a significant part of the manifest traversal, to avoid some of its cost. The worst-case benchmarks are favorable, as well. Running [hg cat] on the last file in the manifest of a large repo, I'm seeing a ~4ms improvement (150ms -> 146ms), so this time is now almost indistinguishable from the baseline ("brute force") implementation. Running [hg cat] on ~220 files together with the last file of the repo is further improved by ~5ms or so. I suspect the raw performance improvements are caused by splitting the manifest search and the file data access into separate phases, instead of interleaving them. Differential Revision: https://phab.mercurial-scm.org/D11616
Mon, 04 Oct 2021 19:06:45 +0100 rhg: faster hg cat when many files are requested
Arseniy Alekseyev <aalekseyev@janestreet.com> [Mon, 04 Oct 2021 19:06:45 +0100] rev 48224
rhg: faster hg cat when many files are requested With this patch I'm seeing a ~39ms improvement (220ms -> 181ms) when running [hg cat] on ~220 files in a ~260k-file repo. The timing for [hg cat] on an individual file becomes slightly worse (losing 5ms: 145ms -> 150ms). A follow-up commit is intended to improve that. Differential Revision: https://phab.mercurial-scm.org/D11615
Fri, 16 Jul 2021 18:42:20 +0200 dirstate-v2: Add support when Rust is not enabled
Simon Sapin <simon.sapin@octobus.net> [Fri, 16 Jul 2021 18:42:20 +0200] rev 48223
dirstate-v2: Add support when Rust is not enabled This wires into `dirstatemap` the parser and serializer added in previous changesets. The memory representation is still the same, with a flat `dict` for `DirstateItem`s and another one for copy sources. Serialization always creates a new dirstate-v2 data file and does not support (when Rust is not enabled) appending to an existing one, since we don’t keep track of which tree nodes are new or modified. Instead the tree is reconstructed during serialization. Differential Revision: https://phab.mercurial-scm.org/D11520
Thu, 22 Jul 2021 17:31:37 +0200 dirstate-v2: Initial Python serializer
Raphaël Gomès <rgomes@octobus.net> [Thu, 22 Jul 2021 17:31:37 +0200] rev 48222
dirstate-v2: Initial Python serializer This adds code seralizing a `map` and `copy_map` dicts into dirstate-v2 file formate. This is not used yet. Differential Revision: https://phab.mercurial-scm.org/D11519
Sun, 03 Oct 2021 13:18:03 +0200 dirstate-v2: initial Python parser
Simon Sapin <simon.sapin@octobus.net> [Sun, 03 Oct 2021 13:18:03 +0200] rev 48221
dirstate-v2: initial Python parser The dirstate-v2 file format should be supported even if Rust extensions are not enabled. This changeset adds parsing code that is not used yet. Differential Revision: https://phab.mercurial-scm.org/D11518
Fri, 08 Oct 2021 13:15:22 +0200 dirstate: Move more methods to the _dirstatemapcommon base class
Simon Sapin <simon.sapin@octobus.net> [Fri, 08 Oct 2021 13:15:22 +0200] rev 48220
dirstate: Move more methods to the _dirstatemapcommon base class This reduces duplication slightly and will help with supporting dirstate-v2 when Rust is not enabled. Differential Revision: https://phab.mercurial-scm.org/D11621
Wed, 13 Oct 2021 17:32:52 +0200 dirstate-v2: Add storage space for nanoseconds precision in file mtimes
Simon Sapin <simon.sapin@octobus.net> [Wed, 13 Oct 2021 17:32:52 +0200] rev 48219
dirstate-v2: Add storage space for nanoseconds precision in file mtimes For now the sub-second component is always set to zero for tracked files and symlinks. (The mtime of directories for the `readdir`-skipping optimization is a different code path and already uses the full precision available.) This extra storage uses the space previously freed by replacing the 32-bit `mode` field by two bits in the existing `flags` field, so the overall size of nodes is unchanged. (This space had been left as padding for this purpose.) Also move things around in the node layout and documentation to have less duplication. Now that they have the same representation, directory mtime and file mtime are kept in the same field. (Only either one can exist for a given node.) Differential Revision: https://phab.mercurial-scm.org/D11655
Wed, 13 Oct 2021 16:21:39 +0200 status: Extract TruncatedTimestamp from fs::Metadata without SystemTime
Simon Sapin <simon.sapin@octobus.net> [Wed, 13 Oct 2021 16:21:39 +0200] rev 48218
status: Extract TruncatedTimestamp from fs::Metadata without SystemTime On Unix, the Rust standard library exposes `mtime` and `mtime_nsec` methods for `std::fs::Metada` whih is exactly what we need to construct a `TruncatedTimestamp`. This skips the computation in the conversion through `SystemTime` and `Result<Duration, Duration>`. Differential Revision: https://phab.mercurial-scm.org/D11654
Fri, 17 Sep 2021 15:07:30 -0400 pyoxidizer: add the user site to `sys.path` on macOS
Matt Harbison <matt_harbison@yahoo.com> [Fri, 17 Sep 2021 15:07:30 -0400] rev 48217
pyoxidizer: add the user site to `sys.path` on macOS This allows 3rd party extensions that are installed with `pip` to be picked up, similar to what we do on Windows. PyOxidizer has a bug that prevents this from working without this extra help (see 95af358fcdfe), though it appears there's another wrinkle here with `sys._framework` too. I needed this to see if the problem[1] loading the keyring extension on Windows also occurs on macOS (it doesn't). [1] https://github.com/indygreg/PyOxidizer/issues/445 Differential Revision: https://phab.mercurial-scm.org/D11452
Fri, 17 Sep 2021 15:02:01 -0400 pyoxidizer: don't use in-memory for resources on macOS
Matt Harbison <matt_harbison@yahoo.com> [Fri, 17 Sep 2021 15:02:01 -0400] rev 48216
pyoxidizer: don't use in-memory for resources on macOS When trying to debug something else on macOS, pyoxidized builds were failing with the following message about pywatchman (and then cext.base85 when I commented out pywatchman): "cannot be loaded from memory but memory loading required" I don't have any immediate plans to do more work on macOS, but maybe this will save someone else time debugging this. Differential Revision: https://phab.mercurial-scm.org/D11451
Tue, 12 Oct 2021 14:12:41 -0700 chistedit: rename a confusingly named variable
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 14:12:41 -0700] rev 48215
chistedit: rename a confusingly named variable I would expect `ctxs` contain instances of some class from the `context` module but it actually contains instances of `histeditrule`. Differential Revision: https://phab.mercurial-scm.org/D11653
Tue, 12 Oct 2021 14:28:51 -0700 chistedit: remove some local variable and access state on self instead
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 14:28:51 -0700] rev 48214
chistedit: remove some local variable and access state on self instead Now that we've replaced the state dict by a class, some of the local variables that just do `foo = self.foo` seem unnecessary. Differential Revision: https://phab.mercurial-scm.org/D11652
Tue, 12 Oct 2021 09:41:11 -0700 chistedit: move changeview() onto state class
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:41:11 -0700] rev 48213
chistedit: move changeview() onto state class Differential Revision: https://phab.mercurial-scm.org/D11649
Tue, 12 Oct 2021 09:38:04 -0700 chistedit: move cycleaction() onto state class
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:38:04 -0700] rev 48212
chistedit: move cycleaction() onto state class Differential Revision: https://phab.mercurial-scm.org/D11648
Tue, 12 Oct 2021 09:22:29 -0700 chistedit: move changeaction() onto state class
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:22:29 -0700] rev 48211
chistedit: move changeaction() onto state class Differential Revision: https://phab.mercurial-scm.org/D11647
Tue, 12 Oct 2021 09:20:46 -0700 chistedit: move swap() onto state class
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:20:46 -0700] rev 48210
chistedit: move swap() onto state class Differential Revision: https://phab.mercurial-scm.org/D11646
Tue, 12 Oct 2021 09:17:59 -0700 chistedit: move makeselection() onto state class
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:17:59 -0700] rev 48209
chistedit: move makeselection() onto state class Differential Revision: https://phab.mercurial-scm.org/D11645
Tue, 12 Oct 2021 09:16:14 -0700 chistedit: move changemode() onto state class
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:16:14 -0700] rev 48208
chistedit: move changemode() onto state class Differential Revision: https://phab.mercurial-scm.org/D11644
Tue, 12 Oct 2021 09:00:51 -0700 chistedit: move movecursor() onto state class
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:00:51 -0700] rev 48207
chistedit: move movecursor() onto state class Differential Revision: https://phab.mercurial-scm.org/D11643
Tue, 12 Oct 2021 08:56:56 -0700 chistedit: move patchcontents() onto state class
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 08:56:56 -0700] rev 48206
chistedit: move patchcontents() onto state class Differential Revision: https://phab.mercurial-scm.org/D11642
Tue, 12 Oct 2021 08:55:19 -0700 chistedit: move event() onto state class
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 08:55:19 -0700] rev 48205
chistedit: move event() onto state class Differential Revision: https://phab.mercurial-scm.org/D11641
Mon, 11 Oct 2021 23:07:54 -0700 chistedit: move renderpatch() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Oct 2021 23:07:54 -0700] rev 48204
chistedit: move renderpatch() and dependencies onto state class Differential Revision: https://phab.mercurial-scm.org/D11640
Mon, 11 Oct 2021 23:04:29 -0700 chistedit: move renderrules() onto state class
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Oct 2021 23:04:29 -0700] rev 48203
chistedit: move renderrules() onto state class Differential Revision: https://phab.mercurial-scm.org/D11639
Mon, 11 Oct 2021 23:02:49 -0700 chistedit: move layout() and dependencies onto state class
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Oct 2021 23:02:49 -0700] rev 48202
chistedit: move layout() and dependencies onto state class Differential Revision: https://phab.mercurial-scm.org/D11638
Mon, 11 Oct 2021 22:51:58 -0700 chistedit: move rendercommit() onto state class
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Oct 2021 22:51:58 -0700] rev 48201
chistedit: move rendercommit() onto state class Differential Revision: https://phab.mercurial-scm.org/D11637
Mon, 11 Oct 2021 22:47:37 -0700 chistedit: move view state from a dict to a custom class
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Oct 2021 22:47:37 -0700] rev 48200
chistedit: move view state from a dict to a custom class Differential Revision: https://phab.mercurial-scm.org/D11636
Wed, 13 Oct 2021 10:17:27 -0700 rhg: do not fail when the repo is empty
Arseniy Alekseyev <aalekseyev@janestreet.com> [Wed, 13 Oct 2021 10:17:27 -0700] rev 48199
rhg: do not fail when the repo is empty Differential Revision: https://phab.mercurial-scm.org/D11651
Tue, 12 Oct 2021 19:43:51 +0100 rhg: handle null changelog and manifest revisions
Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 12 Oct 2021 19:43:51 +0100] rev 48198
rhg: handle null changelog and manifest revisions Differential Revision: https://phab.mercurial-scm.org/D11650
Tue, 12 Oct 2021 15:43:45 +0200 rust: update the rust-cpython crate to 0.7.0
Simon Sapin <simon.sapin@octobus.net> [Tue, 12 Oct 2021 15:43:45 +0200] rev 48197
rust: update the rust-cpython crate to 0.7.0 This notably brings support for Python 3.10, and includes the panic message when propagating a Rust panic as a Python exception. https://github.com/dgrunwald/rust-cpython/blob/master/CHANGELOG.md#070---2021-10-09 Differential Revision: https://phab.mercurial-scm.org/D11630
Sun, 03 Oct 2021 13:14:43 +0200 dirstate-v2: Name a constant in the Rust implementation
Simon Sapin <simon.sapin@octobus.net> [Sun, 03 Oct 2021 13:14:43 +0200] rev 48196
dirstate-v2: Name a constant in the Rust implementation We are about to introduce a Python version of this code that will also need this constant. Differential Revision: https://phab.mercurial-scm.org/D11547
Tue, 12 Oct 2021 17:57:57 +0200 dirstate-v2: Replace the 32-bit `mode` field with two bits
Simon Sapin <simon.sapin@octobus.net> [Tue, 12 Oct 2021 17:57:57 +0200] rev 48195
dirstate-v2: Replace the 32-bit `mode` field with two bits Previously we stored the entire value from `stat_result.st_mode`, like dirstate-v1 does. However only the executable permission and type of file (only symbolic links and normal files are supported) are relevant to Mecurial. So replace this field with two bits in the existing bitfield byte. For now the unused space is left as padding, as it will be used for something else soon. Differential Revision: https://phab.mercurial-scm.org/D11635
Mon, 11 Oct 2021 18:37:21 +0200 dirstate-v2: Store unsigned integers inside DirstateEntry
Simon Sapin <simon.sapin@octobus.net> [Mon, 11 Oct 2021 18:37:21 +0200] rev 48194
dirstate-v2: Store unsigned integers inside DirstateEntry The negative marker values are not used anymore. Differential Revision: https://phab.mercurial-scm.org/D11634
Tue, 12 Oct 2021 16:38:13 +0200 dirstate-v2: Truncate directory mtimes to 31 bits of seconds
Simon Sapin <simon.sapin@octobus.net> [Tue, 12 Oct 2021 16:38:13 +0200] rev 48193
dirstate-v2: Truncate directory mtimes to 31 bits of seconds … instead of 64 bits, while keeping the sub-second presision. This brings the size of one timestamp from 12 bytes to 8 bytes. 31 bits is chosen instead of 32 because that’s already what happens for the mtime of files and symlinks, because dirstate-v1 uses negative i32 values as markers. Later we’ll add sub-second precision for file/symlink mtimes, making their dirstate-v2 representation the same as for directories. Differential Revision: https://phab.mercurial-scm.org/D11633
Tue, 12 Oct 2021 16:20:05 +0200 dirstate-v2: Separate Rust structs for Timestamp and PackedTimestamp
Simon Sapin <simon.sapin@octobus.net> [Tue, 12 Oct 2021 16:20:05 +0200] rev 48192
dirstate-v2: Separate Rust structs for Timestamp and PackedTimestamp PackedTimestamp is now exclusively for dirstate-v2 serialization purpose. It contains unaligned big-endian integers. Timestamp is used everywhere else and contains native Rust integers. Differential Revision: https://phab.mercurial-scm.org/D11632
Mon, 11 Oct 2021 22:19:42 +0200 dirstate-v2: Change the representation of negative directory mtime
Simon Sapin <simon.sapin@octobus.net> [Mon, 11 Oct 2021 22:19:42 +0200] rev 48191
dirstate-v2: Change the representation of negative directory mtime Change it from how I previously thought C’s `timespec` works to how it actually works. The previous behavior was also buggy for timestamps strictly before the epoch but less than one second away from it, because two’s complement does not distinguish negative zero from positive zero. Differential Revision: https://phab.mercurial-scm.org/D11629
Tue, 12 Oct 2021 15:29:05 +0200 dirstate-v2: Only convert from SystemTime to Timestamp and not back
Simon Sapin <simon.sapin@octobus.net> [Tue, 12 Oct 2021 15:29:05 +0200] rev 48190
dirstate-v2: Only convert from SystemTime to Timestamp and not back Converting from Timestamp back to SystemTime was only used for equality comparison, but this can also be done on Timestamp values. Differential Revision: https://phab.mercurial-scm.org/D11631
Fri, 08 Oct 2021 12:57:24 +0200 dirstate-v2: Swap the order of size and mtime on disk
Simon Sapin <simon.sapin@octobus.net> [Fri, 08 Oct 2021 12:57:24 +0200] rev 48189
dirstate-v2: Swap the order of size and mtime on disk This makes the dirstate-v2 file format match dirstate-v1 for the order of `mode`, `size`, and `mtime`. This order does not matter as long as these components are handled through named fields/attributes in code, but in a few places we still have tuples so having the same order everywhere might help avoid a bug that might not be obvious since those components have the same type. Differential Revision: https://phab.mercurial-scm.org/D11620
Mon, 11 Oct 2021 18:23:17 +0200 dirstate-v2: Document flags/mode/size/mtime fields of tree nodes
Simon Sapin <simon.sapin@octobus.net> [Mon, 11 Oct 2021 18:23:17 +0200] rev 48188
dirstate-v2: Document flags/mode/size/mtime fields of tree nodes This file format modification was previously left incomplete because of planned upcoming changes. Not all of these changes have been made yet, but documenting what exists today will help talking more widely about it. Differential Revision: https://phab.mercurial-scm.org/D11625
Wed, 08 Sep 2021 10:47:10 +0200 help: update help text for debug-repair-issue6528
Raphaël Gomès <rgomes@octobus.net> [Wed, 08 Sep 2021 10:47:10 +0200] rev 48187
help: update help text for debug-repair-issue6528 The changegroup fix was put in 5.9.1, this is now out of date. Alson, this can maybe encourage people to upgrade? Differential Revision: https://phab.mercurial-scm.org/D11392
Tue, 02 Mar 2021 09:33:25 -0800 dispatch: use detailed exit code 250 for keyboard interrupt
Martin von Zweigbergk <martinvonz@google.com> [Tue, 02 Mar 2021 09:33:25 -0800] rev 48186
dispatch: use detailed exit code 250 for keyboard interrupt Among our users at Google, we're still seeing several percent of commands fail with exit code 255. I suspect keyboard interrupts is an important remaining reason. This is a resend of D10086 with some fixes for pager handling added ahead of it. Differential Revision: https://phab.mercurial-scm.org/D11628
Fri, 08 Oct 2021 13:36:02 -0700 dispatch: ignore failure to flush ui
Martin von Zweigbergk <martinvonz@google.com> [Fri, 08 Oct 2021 13:36:02 -0700] rev 48185
dispatch: ignore failure to flush ui When the pager dies, we get a `SIGPIPE`. That causes `error.SignalInterrupt` to be raised ` (from `ui._catchterm()`). Any further writes or flushes will cause further `SIGPIPE`s and furhter `error.SignalInterrupt`. If we write or flush outside of the try/except that handle `KeyboardInterrupt` (which `error.SignalInterrupt` is a subclass of), then control will escape from the `dispatch` module. Let's fix that by ignoring errors from flushing the ui. I would have rather fixed this by restoring the stdout and stderr streams when the pager dies, but it gets complicated because of multiple ui instances (ui/lui) and different pager setups between regular hg and chg. This changes a test in `test-pager.t`, but I don't understand why. I would have thought that all the output from the command should have gone to the broken pager. Differential Revision: https://phab.mercurial-scm.org/D11627
Fri, 08 Oct 2021 13:34:33 -0700 dispatch: don't change error status if flushing stdio fails
Martin von Zweigbergk <martinvonz@google.com> [Fri, 08 Oct 2021 13:34:33 -0700] rev 48184
dispatch: don't change error status if flushing stdio fails If we already have a non-zero exit code, I don't think we should change it to 255 because we fail to flush stdio. This may not matter yet, but it will matter when I make a killed pager result in exit code 250 (it's currently 255). Differential Revision: https://phab.mercurial-scm.org/D11626
Mon, 11 Oct 2021 17:31:27 +0200 dirstate-v2: Use "byte sequence" in docs
Simon Sapin <simon.sapin@octobus.net> [Mon, 11 Oct 2021 17:31:27 +0200] rev 48183
dirstate-v2: Use "byte sequence" in docs The patch originally sent as https://phab.mercurial-scm.org/D11546 used "byte string" but that was changed during review to avoid suggesting Unicode or character encodings. However "byte range" sounds to be like a range of *indices* within a byte string/sequence elsewhere. This changes to "byte sequence". Python docs use "sequence" a lot when discussing the `bytes` type: https://docs.python.org/3/library/stdtypes.html Differential Revision: https://phab.mercurial-scm.org/D11623
Fri, 08 Oct 2021 11:06:03 +0200 rust: Make the hg-cpython crate default to Python 3
Simon Sapin <simon.sapin@octobus.net> [Fri, 08 Oct 2021 11:06:03 +0200] rev 48182
rust: Make the hg-cpython crate default to Python 3 This default is used when running `cargo` manually such as for `cargo test`. `setup.py` and `Makefile` both configure the Python major version explicitly. Differential Revision: https://phab.mercurial-scm.org/D11618
Sun, 03 Oct 2021 20:11:42 -0400 packaging: update the certifi dependency
Matt Harbison <matt_harbison@yahoo.com> [Sun, 03 Oct 2021 20:11:42 -0400] rev 48181
packaging: update the certifi dependency Not sure if this helps with recent certificate issues[1], but we might as well keep this modern. Note that certifi no longer claims py2 support, and there's a PR to add it back in[2]. Py2 support was dropped in 2020.04.05.2 (which predates what's being updated here). None of the *.py files have changed since the 2020.6.20 release, and I was able to call `certifi.where()` in both a virtualenv and with `hg debugshell` from an MSI install with this version, so we shouldn't be any worse off than before. [1] https://foss.heptapod.net/mercurial/tortoisehg/thg/-/issues/5745 [2] https://github.com/certifi/python-certifi/pull/154 Differential Revision: https://phab.mercurial-scm.org/D11609
Sun, 19 Sep 2021 01:36:37 -0400 setup: stop packaging python3.dll and python3X.dll in the wheel distribution
Matt Harbison <matt_harbison@yahoo.com> [Sun, 19 Sep 2021 01:36:37 -0400] rev 48180
setup: stop packaging python3.dll and python3X.dll in the wheel distribution Now that exewrapper is smart enough to find the DLLs it needs without help from the build script, backout ed286d150aa8 and 2960b7fac966. Note that this will require deleting the build/lib.win-amd64-3.X directory to actually remove it from the final wheel. Differential Revision: https://phab.mercurial-scm.org/D11455
Sun, 19 Sep 2021 01:23:16 -0400 exewrapper: find the proper python3X.dll in the registry
Matt Harbison <matt_harbison@yahoo.com> [Sun, 19 Sep 2021 01:23:16 -0400] rev 48179
exewrapper: find the proper python3X.dll in the registry Previously, we relied on the default library lookup[1], which for us is essentially to look on `PATH`. That has issues- the Python installations are not necessarily on `PATH`, so I started copying the DLLs locally in 2960b7fac966 and ed286d150aa8 during the build to work around that. However, it's been discovered that causes `python3.dll` and `python3X.dll` to get slipped into the wheel that gets distributed on PyPI. Additionally, Mercurial would fail to run in a venv if the Python environment that created it isn't on `PATH`, because venv creation doesn't copy the DLLs locally. The logic here is inspired by the `py.exe` launcher[2], though this is simpler because we don't care about the architecture- if this is a 32 bit process running on Win64, the registry reflection will redirect to where the 32 bit Python process wrote its keys. A nice unintended side effect is to also make venvs that don't have their root Python on `PATH` work without all of the code required to read `pyvenv.cfg`[3]. I don't see any reasonable way to create a venv without Python being installed (other than maybe building Python from source?), so punt on trying to read that file for now and save a bunch of string manipulation code. I somehow managed to corrupt my Windows user profile, and that makes the Microsoft Store python not run (even loading the DLL gives an access error), so I'm giving priority to both global and user specific python.org installations. Loading python3.dll is new, but when I went down the rabbit hole of implementing `pyvenv.cfg` support, I saw a comment[4] that led me to think we could have trouble if we don't. The comment in ed286d150aa8 confirms this, so we should probably bail out completely if Python3 can't be loaded from the registry, rather than getting something random on `PATH`. But I'll leave that for the default branch. [1] https://docs.microsoft.com/en-us/windows/win32/Dlls/dynamic-link-library-search-order#standard-search-order-for-desktop-applications [2] https://github.com/python/cpython/blob/adcd2205565f91c6719f4141ab4e1da6d7086126/PC/launcher.c#L249 [3] https://github.com/python/cpython/blob/bb3e0c240bc60fe08d332ff5955d54197f79751c/PC/getpathp.c#L707 [4] https://github.com/python/cpython/blob/bb3e0c240bc60fe08d332ff5955d54197f79751c/PC/getpathp.c#L1098 Differential Revision: https://phab.mercurial-scm.org/D11454
Thu, 02 Sep 2021 14:08:45 -0700 fix: reduce number of tool executions
Danny Hooper <hooper@google.com> [Thu, 02 Sep 2021 14:08:45 -0700] rev 48178
fix: reduce number of tool executions By grouping together (path, ctx) pairs according to the inputs they would provide to fixer tools, we can deduplicate executions of fixer tools to significantly reduce the amount of time spent running slow tools. This change does not handle clean files in the working copy, which could still be deduplicated against the files in the checked out commit. It's a little harder to do that because the filerev is not available in the workingfilectx (and it doesn't exist for added files). Anecdotally, this change makes some real uses cases at Google 10x faster. I think we were originally hesitant to do this because the benefits weren't obvious, and implementing it efficiently is kind of tricky. If we simply memoized the formatter execution function, we would be keeping tons of file content in memory. Also included is a regression test for a corner case that I broke with my first attempt at optimizing this code. Differential Revision: https://phab.mercurial-scm.org/D11280
Thu, 02 Sep 2021 14:07:55 -0700 fix: add test to demonstrate how many times tools are executed
Danny Hooper <hooper@google.com> [Thu, 02 Sep 2021 14:07:55 -0700] rev 48177
fix: add test to demonstrate how many times tools are executed The current implementation wastes a lot of effort invoking fixer tools more than once on the same file name+content. It is good to track changes in this behavior. Differential Revision: https://phab.mercurial-scm.org/D11279
Fri, 25 Jun 2021 15:00:08 +0530 rhg: add ui.plain() and check it before showing relative paths in status
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 25 Jun 2021 15:00:08 +0530] rev 48176
rhg: add ui.plain() and check it before showing relative paths in status Adds a very basic replica of `ui.plain()`. Differential Revision: https://phab.mercurial-scm.org/D10912
Tue, 05 Oct 2021 18:10:04 +0530 rhg: add relative paths support in `rhg status`
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 05 Oct 2021 18:10:04 +0530] rev 48175
rhg: add relative paths support in `rhg status` Differential Revision: https://phab.mercurial-scm.org/D11614
Tue, 05 Oct 2021 18:02:22 +0530 rhg: refactor function to relativize paths in utils
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 05 Oct 2021 18:02:22 +0530] rev 48174
rhg: refactor function to relativize paths in utils Commands like `files`, `status` supports printing relative paths. Hence we need to re-use this code in other places too. So let's take this out from `rhg files` into a utility function. Next patch will make `rhg status` use it. Differential Revision: https://phab.mercurial-scm.org/D11613
Wed, 06 Oct 2021 13:32:07 +0530 hg: let extensions call the func without populating opts keys
Sushil khanchi <sushilkhanchi97@gmail.com> [Wed, 06 Oct 2021 13:32:07 +0530] rev 48173
hg: let extensions call the func without populating opts keys This change is to help extensions by not forcing them to populate with opts[b'bundle'] and opts[b'force'] when calling hg.incoming(...) Differential Revision: https://phab.mercurial-scm.org/D11619
Tue, 05 Oct 2021 16:09:20 +0100 rhg: in rhg cat cli, fix the long name of the --rev flag
Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 05 Oct 2021 16:09:20 +0100] rev 48172
rhg: in rhg cat cli, fix the long name of the --rev flag Also tweak the help for the anonymous argument. Differential Revision: https://phab.mercurial-scm.org/D11617
Thu, 24 Jun 2021 14:23:11 +0530 rhg: fallback if tweakdefaults or statuscopies is enabled with status
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 24 Jun 2021 14:23:11 +0530] rev 48171
rhg: fallback if tweakdefaults or statuscopies is enabled with status `rhg status` is experimental right now and does not support all functionalities. While the long term target is to implement them, for now we add a fallback to have all tests pass with `rhg status` enabled. Differential Revision: https://phab.mercurial-scm.org/D10906
Mon, 19 Jul 2021 04:13:50 +0530 largefiles: partially undo 61e526585b20e2ff15f19497d0451d18fea02db8 and child
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Jul 2021 04:13:50 +0530] rev 48170
largefiles: partially undo 61e526585b20e2ff15f19497d0451d18fea02db8 and child Since the largefiles dirstate is now part of transaction, we get rid of this temporary fix which lived for ~7 years. Differential Revision: https://phab.mercurial-scm.org/D11612
Mon, 19 Jul 2021 04:12:14 +0530 largefiles: add tr backup for largefilesdirstate
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Jul 2021 04:12:14 +0530] rev 48169
largefiles: add tr backup for largefilesdirstate This will help us in automatically restoring the largefilesdirstate if a transaction is rolled back. Differential Revision: https://phab.mercurial-scm.org/D11611
Mon, 19 Jul 2021 04:11:08 +0530 largefiles: pass current transaction to `lfdirstate.write()`
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Jul 2021 04:11:08 +0530] rev 48168
largefiles: pass current transaction to `lfdirstate.write()` Right now, the largefile dirstate is not included in transaction which makes things complex. Next patch will add code to do so, so let's make it mandatory to pass current transaction and pass from all existing callers. Differential Revision: https://phab.mercurial-scm.org/D11610
Thu, 07 Oct 2021 10:23:57 -0400 merge: with stable
Augie Fackler <augie@google.com> [Thu, 07 Oct 2021 10:23:57 -0400] rev 48167
merge: with stable
Fri, 01 Oct 2021 12:17:09 +0200 dirstate-v2: Add internal documentation
Simon Sapin <simon.sapin@octobus.net> [Fri, 01 Oct 2021 12:17:09 +0200] rev 48166
dirstate-v2: Add internal documentation It can be viewed by running `hg help internals.dirstate-v2` Since that command rewraps paragraphs, the source text is written with semantic line breaks: https://sembr.org/ Differential Revision: https://phab.mercurial-scm.org/D11546
Fri, 01 Oct 2021 12:27:17 +0200 dirstate-v2: Move data file info in the docket closer together
Simon Sapin <simon.sapin@octobus.net> [Fri, 01 Oct 2021 12:27:17 +0200] rev 48165
dirstate-v2: Move data file info in the docket closer together Having `data_size` next to `uuid_size` (and the UUID itself) makes more sense. Differential Revision: https://phab.mercurial-scm.org/D11545
Fri, 01 Oct 2021 09:29:50 +0200 dirstate-item: drop the legacy new_normal constructor
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 09:29:50 +0200] rev 48164
dirstate-item: drop the legacy new_normal constructor Nobody is calling it anymore. Its purposes has been filled. Differential Revision: https://phab.mercurial-scm.org/D11608
Fri, 01 Oct 2021 09:29:32 +0200 dirstate-item: replace call to new_normal
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 09:29:32 +0200] rev 48163
dirstate-item: replace call to new_normal The constructor is on its way out, so we inline the last relevant call before dropping it. Differential Revision: https://phab.mercurial-scm.org/D11607
Fri, 01 Oct 2021 09:28:19 +0200 dirstate-item: replace a call to new_normal
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 09:28:19 +0200] rev 48162
dirstate-item: replace a call to new_normal The constructor is on its way out, so we inline a relevant call before dropping it. Differential Revision: https://phab.mercurial-scm.org/D11606
Fri, 01 Oct 2021 09:25:13 +0200 dirstate-item: drop the legacy new_possibly_dirty constructor
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 09:25:13 +0200] rev 48161
dirstate-item: drop the legacy new_possibly_dirty constructor Nobody is calling it anymore. Its purposes has been filled. Differential Revision: https://phab.mercurial-scm.org/D11605
Fri, 01 Oct 2021 09:24:48 +0200 dirstate-item: replace call to new_possibly_dirty
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 09:24:48 +0200] rev 48160
dirstate-item: replace call to new_possibly_dirty The constructor is on its way out, so we inline the last relevant call before dropping it. Differential Revision: https://phab.mercurial-scm.org/D11604
Fri, 01 Oct 2021 09:23:28 +0200 dirstate-item: drop the legacy new_from_p2 constructor
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 09:23:28 +0200] rev 48159
dirstate-item: drop the legacy new_from_p2 constructor Nobody is calling it anymore. Its purposes has been filled. Differential Revision: https://phab.mercurial-scm.org/D11603
Fri, 01 Oct 2021 09:21:52 +0200 dirstate-item: replace call to new_from_p2
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 09:21:52 +0200] rev 48158
dirstate-item: replace call to new_from_p2 The constructor is on its way out, so we inline the last relevant call before dropping it. Differential Revision: https://phab.mercurial-scm.org/D11602
Fri, 01 Oct 2021 09:16:53 +0200 dirstate-item: drop the legacy new_added constructor
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 09:16:53 +0200] rev 48157
dirstate-item: drop the legacy new_added constructor Nobody is calling it anymore. Its purposes has been filled. Differential Revision: https://phab.mercurial-scm.org/D11601
Fri, 01 Oct 2021 09:15:03 +0200 dirstate-item: replace call to new_added
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 09:15:03 +0200] rev 48156
dirstate-item: replace call to new_added The constructor is on its way out, so we inline the last relevant call before dropping it. Differential Revision: https://phab.mercurial-scm.org/D11600
Fri, 01 Oct 2021 09:14:10 +0200 dirstate-item: drop the legacy new_merged constructor
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 09:14:10 +0200] rev 48155
dirstate-item: drop the legacy new_merged constructor Nobody is calling it anymore. Its purposes has been filled. Differential Revision: https://phab.mercurial-scm.org/D11599
Fri, 01 Oct 2021 09:12:52 +0200 dirstate-item: replace call to new_merged
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 09:12:52 +0200] rev 48154
dirstate-item: replace call to new_merged The constructor is on its way out, so we inline the last relevant call before dropping it. Differential Revision: https://phab.mercurial-scm.org/D11598
Fri, 01 Oct 2021 03:30:00 +0200 dirstate-item: drop the `merged` property
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 01 Oct 2021 03:30:00 +0200] rev 48153
dirstate-item: drop the `merged` property It has no user anymore. Differential Revision: https://phab.mercurial-scm.org/D11597
(0) -30000 -10000 -3000 -1000 -120 +120 +1000 +3000 tip