Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 19:16:04 +0200] rev 45065
commitctx: reorder some conditional for efficiency in _filecommit
Checking if a dict is empty will be faster than comparing text. I don't expect
it to be a huge performance win, but still a good (but gratuitous) cleanup to
do while we are at it.
This is part of a larger refactoring/cleanup of the commitctx code to clarify
and augment the logic gathering metadata useful for copy tracing. The current
code is a tad too long and entangled to make such update easy. We start with
easy and small cleanup.
Differential Revision: https://phab.mercurial-scm.org/D8701
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Jul 2020 18:52:19 +0200] rev 45064
commitctx: document _filecommit input and output
This is the beginning of a larger refactoring/cleanup of the commitctx code to
clarify and augment the logic gathering metadata useful for copy tracing. The
current code is a tad too long and entangled to make such update easy. We start
with easy and small cleanup.
Differential Revision: https://phab.mercurial-scm.org/D8699
Joerg Sonnenberger <joerg@bec.de> [Tue, 07 Jul 2020 21:57:46 +0200] rev 45063
phases: replace magic number by constant
Differential Revision: https://phab.mercurial-scm.org/D8695
Joerg Sonnenberger <joerg@bec.de> [Mon, 22 Jun 2020 00:00:07 +0200] rev 45062
clonebundles: optional memory-requirement attribution
The new REQUIREDRAM option allows a client to skip bundles it isn't
expected to handle well, e.g. without swapping. This allows a fallback
path to be provided e.g. using zstd level 10 instead of 22.
Differential Revision: https://phab.mercurial-scm.org/D8645
Joerg Sonnenberger <joerg@bec.de> [Tue, 09 Jun 2020 11:22:31 +0200] rev 45061
util: provide a helper function to estimate RAM size
For POSIX systems, it uses sysconf. For Windows, it uses the win32 API
directly.
Differential Revision: https://phab.mercurial-scm.org/D8644
Joerg Sonnenberger <joerg@bec.de> [Thu, 02 Jul 2020 19:59:59 +0200] rev 45060
tests: allow timing difference in output
Differential Revision: https://phab.mercurial-scm.org/D8676
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 22 Jun 2020 13:32:20 +0200] rev 45059
documentation: add some internals documentation about bid merge
This is an important algorithm that was only documented on the wiki so far.
Some update to the algorithm (and associated doc) is to expected in the future
since the bid merge algorithm is bug-ridden when it comes to file deletion comes
to play.
Differential Revision: https://phab.mercurial-scm.org/D8711
Yuya Nishihara <yuya@tcha.org> [Sun, 28 Jun 2020 17:32:32 +0900] rev 45058
cmdserver: document message-encodings and channel output options
While writing the previous patch, I noticed these options are undocumented.
In my testing, a separate status/error message channel works well in GUI
frontend as we no longer have to sort out data and message from mixed outputs.
So let's mark it as not experimental.
Yuya Nishihara <yuya@tcha.org> [Sat, 27 Jun 2020 21:46:23 +0900] rev 45057
cmdserver: add option to not exit from message loop on SIGINT
Sending SIGINT to server is the only way to interrupt a command running in
command-server process. SIGINT will be caught at dispatch.dispatch() if
we're lucky. Otherwise it will terminate the serer process. This is
fundamentally unreliable as signals are delivered asynchronously.
"cmdserver.shutdown-on-interrupt=False" mitigate the issue by making the
server basically block SIGINT.
Manuel Jacob <me@manueljacob.de> [Mon, 06 Jul 2020 17:51:18 +0200] rev 45056
pycompat: remove pycompat.{stdin,stdout,stderr}
All users have been changed to use procutil.{stdin,stdout,stderr}, which provide
consistent behavior across platforms and Python versions.
Manuel Jacob <me@manueljacob.de> [Mon, 06 Jul 2020 17:44:25 +0200] rev 45055
pycompat: change users of pycompat.{stdin,stdout,stderr} to use procutil.std*
On Python 3, pycompat.{stdin,stdout,stderr} are usually block-buffered even if
connected to a TTY. procutil.{stdin,stdout,stderr} provide consistent behavior
across platforms and Python versions.
Antoine Cezar <antoine.cezar@octobus.net> [Mon, 06 Jul 2020 10:30:55 +0200] rev 45054
hgignore: add mypy cache files
Differential Revision: https://phab.mercurial-scm.org/D8692
Joerg Sonnenberger <joerg@bec.de> [Mon, 06 Jul 2020 14:30:13 +0200] rev 45053
revlog: avoid hard-coded hash sizes
Differential Revision: https://phab.mercurial-scm.org/D8683
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 03 Jul 2020 19:00:01 +0200] rev 45052
test: restore expected output in test-persistent-nodemap.t
The merge
78cafd48b9b2 had a small error and wrongly dropped the output updated
from one side of the merge.
This changeset re-install it.
Differential Revision: https://phab.mercurial-scm.org/D8678
Antoine Cezar <antoine.cezar@octobus.net> [Mon, 06 Jul 2020 09:30:26 +0200] rev 45051
heptapod-ci: build rhg before tests run
Differential Revision: https://phab.mercurial-scm.org/D8682
Antoine Cezar <antoine.cezar@octobus.net> [Tue, 07 Jul 2020 14:05:15 +0530] rev 45050
rhg: add a limited `rhg root` subcommand
Clap has been choosen for argument parsing for the following reasons:
- it's a wildly used and maintained crate
- it can deal with OS encoding making it suitable for any encoding
- it supports nonambiguous prefix matching as already available in hg
- it will soon allow for structopts-style declarative pattern instead of the
currently used builder pattern
Differential Revision: https://phab.mercurial-scm.org/D8613
Antoine Cezar <antoine.cezar@octobus.net> [Fri, 05 Jun 2020 09:01:35 +0200] rev 45049
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
The println macro is not used to avoid string usage.
Dealing only with bytes allows us to be compatible with any encoding
and not just UTF8.
Later on, format macro will be made to have more readable code.
Differential Revision: https://phab.mercurial-scm.org/D8612
Manuel Jacob <me@manueljacob.de> [Wed, 08 Jul 2020 08:57:21 +0200] rev 45048
archival: abort if compression method is unavailable
`tarfile.CompressionError` is documented to be the "exception for unavailable
compression methods".
Also, make tests conditional on whether the lzma module is available or not.
Manuel Jacob <me@manueljacob.de> [Wed, 08 Jul 2020 08:25:30 +0200] rev 45047
demandimport: ignore `lzma` module for demandimport
This makes importing the module fail if the `_lzma` module is not present.
This makes e.g. tarfile correctly recognize if LZMA support is not present. It
changes the exception
File "/usr/lib/python3.6/tarfile.py", line 1694, in xzopen
fileobj = lzma.LZMAFile(fileobj or name, mode, preset=preset)
AttributeError: module 'lzma' has no attribute 'LZMAFile'
to the more correct exception
File "/usr/lib/python3.6/tarfile.py", line 1692, in xzopen
raise CompressionError("lzma module is not available")
tarfile.CompressionError: lzma module is not available
Also, it prevents that the error "abort: No module named '_lzma'!" is shown when
a development warning is to be shown. The reason why that happened is that for
showing the warning, we get information about the stack frames from the inspect
module, which accesses the `__file__` attribute of all modules in `sys.modules`
to build some cache, causing all modules (including `lzma`) to be imported.
Augie Fackler <augie@google.com> [Mon, 06 Jul 2020 22:02:50 -0400] rev 45046
merge with stable
Manuel Jacob <me@manueljacob.de> [Sun, 05 Jul 2020 13:09:22 +0200] rev 45045
procutil: make mercurial.utils.procutil.stderr unbuffered
For most Mercurial code, it doesn’t make a difference, as the ui object flushes
stderr explicitly (after the change, we could get rid of the explicit flush).
One example where it makes a observable difference is mercurial.util.timed().
Without the patch, the time is not immediately shown on Python 3. With the
patch, it’s shown immediately on all Python versions and platforms.
Manuel Jacob <me@manueljacob.de> [Sun, 05 Jul 2020 13:05:06 +0200] rev 45044
tests: generalize common test case code in test-stdio.py
Manuel Jacob <me@manueljacob.de> [Sat, 04 Jul 2020 11:41:39 +0200] rev 45043
procutil: make stdout line-buffered on Windows if connected to TTY
Windows doesn’t support line buffering. Previously, we worked around that by
setting the stream unbuffered. Instead, we can use our own line buffering we
already use on Python 3.
Manuel Jacob <me@manueljacob.de> [Sat, 04 Jul 2020 11:21:44 +0200] rev 45042
procutil: split import and reassignment
Besides making the code clearer, it will reduce the diff in the next patch.
Manuel Jacob <me@manueljacob.de> [Sat, 04 Jul 2020 11:15:58 +0200] rev 45041
procutil: move assignments closer to reassignments
Doing reassignments is an anti-pattern IMHO, but I see how it makes sense here.
When first looking at this code after jumping here with ctags, I missed the
fact that stdout was reassigned. To make the code clearer, the assignments
should be as close as possible to the reassignments.
Manuel Jacob <me@manueljacob.de> [Sat, 04 Jul 2020 12:15:41 +0200] rev 45040
procutil: factor out conditional creation of LineBufferedWrapper
At the same time, document the logic and generalize it to work on all Python
versions.
Manuel Jacob <me@manueljacob.de> [Thu, 02 Jul 2020 04:37:18 +0200] rev 45039
procutil: define LineBufferedWrapper on all Python versions
There’s nothing Python 3-only about LineBufferedWrapper. In the future, we may
want to use it on Windows, to work around missing line-buffering support.
Manuel Jacob <me@manueljacob.de> [Sat, 04 Jul 2020 10:47:04 +0200] rev 45038
tests: add tests for buffering behavior of mercurial.utils.procutil.stdout
Manuel Jacob <me@manueljacob.de> [Thu, 02 Jul 2020 02:51:09 +0200] rev 45037
cleanup: use slightly more meaningful name for temporary variable
Not that it makes a big difference, but using `p` instead of `x` is clearer to
me.
Manuel Jacob <me@manueljacob.de> [Thu, 02 Jul 2020 02:46:15 +0200] rev 45036
cleanup: use any() instead of checking truthiness of temporary list
It was not immediately obvious to me, when first seeing this, why a list was
created. It needed a second look to understand that the purpose was to check
whether the condition is true for any of the parents. Using any() for that is
clearer.