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
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 tip