Yuya Nishihara <yuya@tcha.org> [Tue, 01 Dec 2020 19:23:23 +0900] rev 46044
scmutil: extract function that builds revset expr to select bookmark branch
This is needed to process "log -B" option properly. "log" options have to
be translated to a revset expression, not to an evaluated set.
Yuya Nishihara <yuya@tcha.org> [Tue, 01 Dec 2020 19:46:01 +0900] rev 46043
scmutil: document that bookmarkrevs() ignores non-head bookmark branch
"- ancestors(head() and not bookmark(%s))" excludes the bookmarked branch
itself if bookmark(%s) is not a head. I'm a bit surprised by this behavior
while writing "log -B" tests, so let's document it.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 07 Nov 2020 16:28:30 -0800] rev 46042
cext: add .pyi files for C extensions
I'm unsure if all the annotations are completely accurate. But having
these helps type checkers reason about our C extensions.
Differential Revision: https://phab.mercurial-scm.org/D9281
Matt Harbison <matt_harbison@yahoo.com> [Sat, 21 Nov 2020 00:10:36 -0500] rev 46041
phabricator: allow local revisions to be specified with `phabupdate`
It's way easier and less error prone to specify a revset after importing a
series than to manually type in a series of Differentials.
Unlike most revision oriented commands, this requires the `--rev` option
explicitly because the existing `DREVSPEC` doesn't need to have the leading 'D',
and therefore the meaning is ambiguous. I wouldn't have a problem giving
precedence to the local revnum, but `phabread` and `phabimport` also use
DREVSPEC, and local revisions make no sense there. I would be fine with
modifying that definition to require the leading 'D', but I'm not sure how many
people are used to not specifying it.
Differential Revision: https://phab.mercurial-scm.org/D9356
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 20 Nov 2020 10:51:07 +0100] rev 46040
copies: properly copies parent dictionary before updating it
This enforces the copy on write logic. Otherwise independant unrelated branches
could affected each other.
More testing of these case are coming, but I need that code landed to unlock
other performance work in parallel.
Differential Revision: https://phab.mercurial-scm.org/D9419
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 30 Nov 2020 14:07:23 +0100] rev 46039
upgrade: display the list of processed revlog before proceeding
This help to make sure we don't wrongly skip some in the test and to make sure
the user is aware of the amount of processing they is signing up for.
Differential Revision: https://phab.mercurial-scm.org/D9469
Simon Sapin <simon-commits@exyr.org> [Wed, 02 Dec 2020 08:23:31 +0100] rev 46038
rhg: add a test with persistent-nodemap
Differential Revision: https://phab.mercurial-scm.org/D9519
Simon Sapin <simon-commits@exyr.org> [Wed, 02 Dec 2020 15:00:49 +0100] rev 46037
rust: use NodePrefix::from_hex instead of hex::decode directly
This adds support for prefixes with an odd number of hex digits.
Differential Revision: https://phab.mercurial-scm.org/D9490
Simon Sapin <simon-commits@exyr.org> [Mon, 30 Nov 2020 19:34:49 +0100] rev 46036
rhg: allow specifying a changeset ID prefix
Differential Revision: https://phab.mercurial-scm.org/D9479
Martin von Zweigbergk <martinvonz@google.com> [Thu, 03 Dec 2020 13:23:59 -0800] rev 46035
tests: update test-releasenotes-formatting.t with new exit codes
I didn't have the fuzzywuzzy package installed before, so I didn't
notice this test fail earlier (probably when I made
`check_incompatible_arguments` return `InputError`).
Differential Revision: https://phab.mercurial-scm.org/D9514
Augie Fackler <augie@google.com> [Thu, 03 Dec 2020 14:15:39 -0500] rev 46034
merge with stable
Kyle Lippincott <spectral@google.com> [Wed, 02 Dec 2020 12:33:51 -0800] rev 46033
statprof: separate functions and "line", assume 4 digit line numbers
Previously, the profile output looked like this (I've removed many lines that
are mostly inconsequential):
```
| 100.0% 0.02s hg: <module> line 43: dispatch.run()
| 100.0% 0.02s dispatch.py: run line 115: status = dispatch(req)
| 100.0% 0.02s dispatch.py: _runcatchfunc line 432: return _dispatch(req)
\ 50.0% 0.01s dispatch.py: _dispatch line 1228: return runcommand(
| 50.0% 0.01s dispatch.py: runcommand line 883: ret = _runcommand(ui, optio...
| 50.0% 0.01s dispatch.py: _runcommand line 1240: return cmdfunc()
| 50.0% 0.01s localrepo.py: __getitem__ line 1670: quick_access = self._quick_...
| 50.0% 0.01s localrepo.py: _quick_access_changeidline 1650: return self._quick_access_c...
| 50.0% 0.01s localrepo.py: __get__ line 179: return getattr(unfi, self.n...
| 50.0% 0.01s util.py: __get__ line 1747: result = self.func(obj)
| 50.0% 0.01s localrepo.py: _quick_access_changeid_wcline 1611: cl = self.unfiltered().chan...
| 50.0% 0.01s localrepo.py: __get__ line 110: return super(_basefilecache...
| 50.0% 0.01s util.py: __getattribute__line 245: self.__spec__.loader.exec_m...
| 50.0% 0.01s <frozen importlib._bootstrap_external>: exec_moduleline 783:
| 50.0% 0.01s <frozen importlib._bootstrap>: _call_with_frames_removedline 219:
| 50.0% 0.01s changelog.py: <module> line 376: class changelog(revlog.revl...
| 50.0% 0.01s util.py: __getattribute__line 245: self.__spec__.loader.exec_m...
| 50.0% 0.01s <frozen importlib._bootstrap_external>: exec_moduleline 779:
| 50.0% 0.01s <frozen importlib._bootstrap_external>: get_codeline 868:
| 50.0% 0.01s <frozen importlib._bootstrap_external>: path_statsline 1012:
| 50.0% 0.01s <frozen importlib._bootstrap_external>: _path_statline 87:
```
This has a few problems, though I'm only addressing some of them.
1. If the stuff before "line ###" is long, there's no separation between the
function name and the "line" string.
2. If the stuff before "line ###" is really long, there's excessive separation
between the "line" string and the line number.
3. We frequently have 4-digit line numbers, the code on the right wasn't
dynamically indented and ended up quite messy looking.
To solve these problems, I've added a ", " prefix before "line" iff it would
otherwise not have any separation such as spaces. I've added a 'max' so that we
never use a negative width (which is the cause of problem #2 above), and I've
added a default assumption of 4 digit line numbers (but again using a 'max' so
this shouldn't cause problems if we go beyond that.
With these changes, it now looks like this:
```
| 100.0% 0.02s hg: <module> line 43: dispatch.run()
| 100.0% 0.02s dispatch.py: run line 115: status = dispatch(req)
| 100.0% 0.02s dispatch.py: _runcatchfunc line 432: return _dispatch(req)
\ 50.0% 0.01s dispatch.py: _dispatch line 1228: return runcommand(
| 50.0% 0.01s dispatch.py: runcommand line 883: ret = _runcommand(ui, optio...
| 50.0% 0.01s dispatch.py: _runcommand line 1240: return cmdfunc()
| 50.0% 0.01s localrepo.py: __getitem__ line 1670: quick_access = self._quick_...
| 50.0% 0.01s localrepo.py: _quick_access_changeid, line 1650: return self._quick_access_c...
| 50.0% 0.01s localrepo.py: __get__ line 179: return getattr(unfi, self.n...
| 50.0% 0.01s util.py: __get__ line 1747: result = self.func(obj)
| 50.0% 0.01s localrepo.py: _quick_access_changeid_wc, line 1611: cl = self.unfiltered().chan...
| 50.0% 0.01s localrepo.py: __get__ line 110: return super(_basefilecache...
| 50.0% 0.01s util.py: __getattribute__, line 245: self.__spec__.loader.exec_m...
| 50.0% 0.01s <frozen importlib._bootstrap_external>: exec_module, line 783:
| 50.0% 0.01s <frozen importlib._bootstrap>: _call_with_frames_removed, line 219:
| 50.0% 0.01s changelog.py: <module> line 376: class changelog(revlog.revl...
| 50.0% 0.01s util.py: __getattribute__, line 245: self.__spec__.loader.exec_m...
| 50.0% 0.01s <frozen importlib._bootstrap_external>: exec_module, line 779:
| 50.0% 0.01s <frozen importlib._bootstrap_external>: get_code, line 868:
| 50.0% 0.01s <frozen importlib._bootstrap_external>: path_stats, line 1012:
| 50.0% 0.01s <frozen importlib._bootstrap_external>: _path_stat, line 87:
```
Differential Revision: https://phab.mercurial-scm.org/D9511
Kyle Lippincott <spectral@google.com> [Wed, 02 Dec 2020 15:38:05 -0800] rev 46032
statprof: fix off-by-one-line error in output
martinvonz claims they thought that this was intentional, but couldn't remember
the reasoning for it. I can't understand why it would be preferable, and I
didn't see anything in the comments in the file about why this would be useful,
so I'm hopefully not breaking anything by "fixing" it.
### Old output
```
| 100.0% 0.01s dispatch.py: run line 43: dispatch.run()
| 100.0% 0.01s dispatch.py: dispatch line 115: status = dispatch(req)
| 100.0% 0.01s dispatch.py: _runcatch line 266: ret = _runcatch(req) or 0
| 100.0% 0.01s dispatch.py: _callcatch line 442: return _callcatch(ui, _runc...
| 100.0% 0.01s scmutil.py: callcatch line 451: return scmutil.callcatch(ui...
| 100.0% 0.01s dispatch.py: _runcatchfunc line 155: return func()
| 100.0% 0.01s dispatch.py: _dispatch line 432: return _dispatch(req)
| 100.0% 0.01s hg.py: repository line 1179: repo = hg.repository(
| 100.0% 0.01s hg.py: _peerorrepo line 221: peer = _peerorrepo(
| 100.0% 0.01s util.py: __getattribute__ line 188: obj = _peerlookup(path).ins...
| 100.0% 0.01s localrepo.py: makelocalrepositoryline 3227: return makelocalrepository(...
| 100.0% 0.01s localrepo.py: __init__ line 683: return cls(
| 100.0% 0.01s util.py: __getattribute__ line 1262: self._extrafilterid = repov...
| 100.0% 0.01s <frozen importlib._bootstrap_external>: exec_moduleline 245: self.__spec__.loader.exec_m...
| 100.0% 0.01s <frozen importlib._bootstrap_external>: get_codeline 779:
| 100.0% 0.01s <frozen importlib._bootstrap_external>: path_statsline 868:
| 100.0% 0.01s <frozen importlib._bootstrap_external>: _path_statline 1012:
```
### New output
```
| 100.0% 0.01s hg: <module> line 43: dispatch.run()
| 100.0% 0.01s dispatch.py: run line 115: status = dispatch(req)
| 100.0% 0.01s dispatch.py: dispatch line 266: ret = _runcatch(req) or 0
| 100.0% 0.01s dispatch.py: _runcatch line 442: return _callcatch(ui, _runc...
| 100.0% 0.01s dispatch.py: _callcatch line 451: return scmutil.callcatch(ui...
| 100.0% 0.01s scmutil.py: callcatch line 155: return func()
| 100.0% 0.01s dispatch.py: _runcatchfunc line 432: return _dispatch(req)
| 100.0% 0.01s dispatch.py: _dispatch line 1179: repo = hg.repository(
| 100.0% 0.01s hg.py: repository line 221: peer = _peerorrepo(
| 100.0% 0.01s hg.py: _peerorrepo line 188: obj = _peerlookup(path).ins...
| 100.0% 0.01s localrepo.py: instance line 3227: return makelocalrepository(...
| 100.0% 0.01s localrepo.py: makelocalrepositoryline 683: return cls(
| 100.0% 0.01s localrepo.py: __init__ line 1262: self._extrafilterid = repov...
| 100.0% 0.01s util.py: __getattribute__ line 245: self.__spec__.loader.exec_m...
| 100.0% 0.01s <frozen importlib._bootstrap_external>: exec_moduleline 779:
| 100.0% 0.01s <frozen importlib._bootstrap_external>: get_codeline 868:
| 100.0% 0.01s <frozen importlib._bootstrap_external>: path_statsline 1012:
| 100.0% 0.01s <frozen importlib._bootstrap_external>: _path_statline 87:
```
Differential Revision: https://phab.mercurial-scm.org/D9510
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 03 Dec 2020 08:09:56 +0100] rev 46031
phab-refresh: do not error out when the stack is empty
Actually, empty stack is easier to get than I expected (and harmless). When a
stack is publish, heptapod will detect the even, empty the stack (triggering CI)
and "forgetting" the branch afterward.
So we stop returning as error in this case.
Differential Revision: https://phab.mercurial-scm.org/D9513
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 02 Dec 2020 20:10:27 +0100] rev 46030
run-tests: allow some slack about 'waiting on lock' message
It is common to run the tests on very loaded machine when concurrent run might
take a bit longer. Such message are usually harmless, but anoying as they break
the tests.
Test that explicitly depends on this value have been adjusted. This make them
more robust anyway.
A fun case was `test-clone-pull-corruption.t` which, without the previous
changeset introducing extra flushing, ended use having a line 31 (`pulling from
../source`) changing order because the warning message was no longer flushing
stdin before using stderr (stderr being invisible in the test).
Differential Revision: https://phab.mercurial-scm.org/D9507
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 02 Dec 2020 23:15:11 +0100] rev 46029
pull: flush stdin after the `pull from` message
That message can end up being flushed after some stderr message in some case,
leading to confusing output.
Differential Revision: https://phab.mercurial-scm.org/D9506
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 02 Dec 2020 20:10:22 +0100] rev 46028
tests: explicitly skip the lock warning in some remotefilelog tests
The output was conditional zed, so lets official skip it instead.
Differential Revision: https://phab.mercurial-scm.org/D9505
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 02 Dec 2020 20:02:35 +0100] rev 46027
tests: use the right python when running dummyssh for narrow
some plateform no longer have a `python` executable.
Differential Revision: https://phab.mercurial-scm.org/D9504
Kyle Lippincott <spectral@google.com> [Wed, 02 Dec 2020 11:05:53 -0800] rev 46026
copies: avoid materializing a full directory map during copy tracing
Materializing a full copy of every directory in a treemanifest repo can be quite
expensive, even with a narrow matcher. For flat manifest repos, this should be
equivalent - it will still materialize (and cache) a dict of all of the dirs
inside of the manifest object, we just don't get a copy of it.
In a repo I have here, this brings the time for a simple rebase from 11.197s to
4.609s.
Differential Revision: https://phab.mercurial-scm.org/D9503
Martin von Zweigbergk <martinvonz@google.com> [Wed, 02 Dec 2020 15:39:01 -0800] rev 46025
rebase: clear merge state when aborting in-memory merge on dirty working copy
Differential Revision: https://phab.mercurial-scm.org/D9509
Martin von Zweigbergk <martinvonz@google.com> [Wed, 02 Dec 2020 15:15:16 -0800] rev 46024
tests: show that in-memory rebase leaves state when working copy is dirty
When in-memory rebase falls back to on-disk rebase, it checks if the
working copy is dirty. If it is, it aborts the rebase. However, it
leaves the rebase state on disk. I broke it in feffeb18d412 (rebase:
teach in-memory rebase to not restart with on-disk rebase on conflict,
2020-09-18).
Differential Revision: https://phab.mercurial-scm.org/D9508
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 27 Nov 2020 18:32:20 +0530] rev 46023
helptext: document share safe functionality in `hg help config -v`
If share safe functionality is enabled, we read `.hg/hgrc' of shared source.
Differential Revision: https://phab.mercurial-scm.org/D9413
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 27 Nov 2020 18:28:14 +0530] rev 46022
helptext: mention in `hg help config` that `.hg/hgrc-not-shared` is consulted
Recently we added `.hg/hgrc-not-shared` which is a config file which won't be
shared with shares when share-safe mode is enabled. Irrespective of whether
we are using share-safe or not, we consult this file now.
Let's document that.
Differential Revision: https://phab.mercurial-scm.org/D9412
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 27 Nov 2020 18:11:47 +0530] rev 46021
share: add documentation about share-safe mode in `hg help -e share`
Differential Revision: https://phab.mercurial-scm.org/D9411
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 27 Nov 2020 18:11:04 +0530] rev 46020
helptext: update first hg version when share-safe will be released
I authored the patch which added the helptext before 5.6 release hoping that my
patches will make it. However they didn't before the release and were pushed
after the release only.
Differential Revision: https://phab.mercurial-scm.org/D9410
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 23 Nov 2020 14:15:26 +0530] rev 46019
share: show warning if share is outdated while source supports share-safe
Previous patches in the series and some which are already committed implements
share safe functionality where config and requirements will be shared too.
Rolling this feature has a problem that existing shares may never upgrade as
they will never learn about the new config. To help the transition, we show a
warning message if the share source supports share-safe mechanism. This provides
the source repo ability to upgrade and pass on the message to shares that you
should reshare and upgrade too.
Differential Revision: https://phab.mercurial-scm.org/D9369
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 16 Oct 2020 18:57:55 +0530] rev 46018
upgrade: add support to downgrade share safe mode
In previous patch we added support to upgrade current repository to use share
safe mode. This patch adds support to downgrade to remove share-safe mode.
Differential Revision: https://phab.mercurial-scm.org/D9358
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 25 Jun 2020 13:13:21 +0530] rev 46017
upgrade: add support for experimental safe share mode
Recently we introduce the share-safe functionality which makes shares share
requirements and config of share source. This patch adds support to
`debugupgraderepo` command to upgrade repository to share-safe mode when
`format.exp-share-safe` config is enabled.
Differential Revision: https://phab.mercurial-scm.org/D9144
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 30 Nov 2020 14:11:03 +0530] rev 46016
chgserver: catch RepoError while loading configuration
Recent share safe work introduced functionality to read share source config file
on dispatch. This can result in RepoError while reading config file as the
shared source might not be present.
`test-share.t#safe` was failing with chg earlier because of this.
Differential Revision: https://phab.mercurial-scm.org/D9462
Matt Harbison <matt_harbison@yahoo.com> [Sat, 28 Nov 2020 16:59:40 -0500] rev 46015
registrar: clarify the documentation about some byte strings being required
I *thought* these needed to be byte strings, but didn't remember and had to
search out examples.
Differential Revision: https://phab.mercurial-scm.org/D9489