Tue, 23 Mar 2021 14:15:40 -0700 reabase: call rewriteutil.precheck() a bit later
Martin von Zweigbergk <martinvonz@google.com> [Tue, 23 Mar 2021 14:15:40 -0700] rev 46836
reabase: call rewriteutil.precheck() a bit later We now filter out descendants of divergence-causing commits in `_handleskippingobsolete()`. The filtered-out commits are removed from the rebase set (`destmap` and `state`). We should therefore call `rewriteutil.precheck()` after `_handleskippingobsolete()`. This patch does that. It hasn't mattered so far because `rewriteutil.precheck()` doesn't yet check for divergence, but it will soon. This affects one test where we now fail because the user is trying to rebase an ancestor instead of failing because they tried to rebase a public commit. We have several similar tests just after, where we still fail because of the phase, so that seems fine. The difference in behavior also seems fine to me. Differential Revision: https://phab.mercurial-scm.org/D10258
Tue, 23 Mar 2021 14:49:31 -0700 rebase: set `prepared = True` at very end of `_preparenewrebase()`
Martin von Zweigbergk <martinvonz@google.com> [Tue, 23 Mar 2021 14:49:31 -0700] rev 46835
rebase: set `prepared = True` at very end of `_preparenewrebase()` Once we've set `rebaseruntime.prepared = True`, `rebaseruntime.repo` starts returning the unfiltered repo. That will make my next patch break, because that patch moves the call to `rewriteutil.precheck()` after the call to `_handleskippingobsolete()`, which current happens after `prepared = True`. We therefore need to prepare by moving `prepared = True` a bit later, after `_handleskippingobsolete()`. I don't think that matters for that call. Differential Revision: https://phab.mercurial-scm.org/D10257
Fri, 19 Mar 2021 22:52:59 -0700 rebase: filter out descendants of divergence-causing commits earlier
Martin von Zweigbergk <martinvonz@google.com> [Fri, 19 Mar 2021 22:52:59 -0700] rev 46834
rebase: filter out descendants of divergence-causing commits earlier `hg rebase` treats obsolete commits differently depending what has happened to the commit: 1) Obsolete commit without non-obsolete successors: Skipped, and a note is printed ("it has no successor"). 2) Obsolete commit with a successor in the destination (ancestor of it): Skipped, and a note is printed ("already in destination"). 3) Obsolete commit with a successor in the rebase set: The commit and its descendants are skipped, and a note is printed ("not rebasing <commit> and its descendants as this would cause divergence"), unless `allowdivergence` config set. 4) Obsolete commit with a successor elsewhere: Error ("this rebase will cause divergences"), unless `allowdivergence` config set. Before this patch, we did all those checks up front, except for (3), which was checked later. The later check consisted of two parts: 1) filtering out of descendants, and 2) conditionally printing message if the `allowdivergence` config was not set. This patch makes it so we do the filtering early. A consequence of filtering out divergence-causing commits earlier is that we rebase commits in slightly different order, which has some impact on tests. Differential Revision: https://phab.mercurial-scm.org/D10249
Fri, 19 Mar 2021 10:34:16 -0700 rebase: clarify names of variables and function related to obsolete revisions
Martin von Zweigbergk <martinvonz@google.com> [Fri, 19 Mar 2021 10:34:16 -0700] rev 46833
rebase: clarify names of variables and function related to obsolete revisions Differential Revision: https://phab.mercurial-scm.org/D10248
Fri, 12 Feb 2021 16:05:02 -0800 rebase: calculate obsolescense-related info earlier
Martin von Zweigbergk <martinvonz@google.com> [Fri, 12 Feb 2021 16:05:02 -0800] rev 46832
rebase: calculate obsolescense-related info earlier My goal is to use `rewriteutil.precheck()` in the rebase code. Since rebase does its own handling of divergent commits (it skips them instead of erroring out), we need to have divergence-causing commits filtered out early. This patch helps prepare for that. Differential Revision: https://phab.mercurial-scm.org/D10247
Fri, 12 Feb 2021 16:19:33 -0800 rebase: let _handleskippingobsolete(self) read directly from self
Martin von Zweigbergk <martinvonz@google.com> [Fri, 12 Feb 2021 16:19:33 -0800] rev 46831
rebase: let _handleskippingobsolete(self) read directly from self The function already has `self` as an argument, so there's no need to pass data from `self` into it. Differential Revision: https://phab.mercurial-scm.org/D10246
Tue, 23 Mar 2021 10:12:58 -0700 tests: test divergence created during interrupted rebase
Martin von Zweigbergk <martinvonz@google.com> [Tue, 23 Mar 2021 10:12:58 -0700] rev 46830
tests: test divergence created during interrupted rebase If a rebase runs into conflicts and the user somehow rewrites an unrebased commit in the rebase set while the rebase is interrupted, continuing it might result in divergence. It turns out that we decide to skip the commit. That seems to make sense, but it wasn't obvious to me that that's what we should do. Either way, this patch adds a test case for the current behavior. Differential Revision: https://phab.mercurial-scm.org/D10256
Tue, 23 Mar 2021 09:13:29 -0700 tests: split up test-rebase-obsolete.t in four pieces
Martin von Zweigbergk <martinvonz@google.com> [Tue, 23 Mar 2021 09:13:29 -0700] rev 46829
tests: split up test-rebase-obsolete.t in four pieces The test case took 42 seconds to run the test before this patch and 12 seconds after (wall time, of course). Differential Revision: https://phab.mercurial-scm.org/D10255
Wed, 24 Mar 2021 00:04:58 +0100 path: error out if the `path://` reference point to an unknown path
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 24 Mar 2021 00:04:58 +0100] rev 46828
path: error out if the `path://` reference point to an unknown path Differential Revision: https://phab.mercurial-scm.org/D10265
Tue, 23 Mar 2021 23:55:33 +0100 path: forbid chaining `path://` definitions
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 23 Mar 2021 23:55:33 +0100] rev 46827
path: forbid chaining `path://` definitions To have `path://xxx` referencing paths that use `path://` too, we need to analyze dependencies to initialize them in the right order (and to detect cycle). I don't want to deal with that right now, so I just disallow it for now. Differential Revision: https://phab.mercurial-scm.org/D10264
Thu, 18 Mar 2021 12:02:01 +0100 path: introduce a `path://` syntax to reference other path name
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 18 Mar 2021 12:02:01 +0100] rev 46826
path: introduce a `path://` syntax to reference other path name This make it easier for a path to reuse the same location of another path with different parameter. This is useful to create path "alias" with common config option. This will become very useful to create path that reference a list of other path. This changeset focus on implemented the basic feature, future changesets will deal with various error management (and associated testing). Differential Revision: https://phab.mercurial-scm.org/D10263
Sun, 21 Mar 2021 16:31:42 +0100 path: extract sub-option logic into its own method
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 21 Mar 2021 16:31:42 +0100] rev 46825
path: extract sub-option logic into its own method We will need to re-use this logic for `path://` so we first extract it into its own method. Differential Revision: https://phab.mercurial-scm.org/D10262
Sun, 21 Mar 2021 17:52:15 +0100 path: extract the path validation logic into its own submethod
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 21 Mar 2021 17:52:15 +0100] rev 46824
path: extract the path validation logic into its own submethod We will need to re-use this logic for `path://` so we first extract it into its own method. Differential Revision: https://phab.mercurial-scm.org/D10261
Thu, 18 Mar 2021 10:12:55 +0100 path: move handling of "default" (*) suboptions value inside __init__
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 18 Mar 2021 10:12:55 +0100] rev 46823
path: move handling of "default" (*) suboptions value inside __init__ With the introduction of `path://` scheme the handling of default value will need to be subtler. We do simple code movement first to clarify the future changes. Differential Revision: https://phab.mercurial-scm.org/D10260
Tue, 16 Mar 2021 15:12:03 +0100 rhg: Initial support for the 'status' command
Georges Racinet <georges.racinet@octobus.net> [Tue, 16 Mar 2021 15:12:03 +0100] rev 46822
rhg: Initial support for the 'status' command Only comparing the working directory with its first parent revision is supported. The core logic of dirstate handling and `stat`’ing files was already in `hg-core` supporting Python-based hg with Rust extensions, so this is mostly plumbing to rhg’s CLI. For now the command is experimental and disabled by default, since it has some bugs that causes a number of tests to fail. These failures can be seen with: tests/run-tests.py --rhg --extra-config-opt rhg.status=true Differential Revision: https://phab.mercurial-scm.org/D10239
(0) -30000 -10000 -3000 -1000 -300 -100 -15 +15 +100 +300 +1000 +3000 tip