Martin von Zweigbergk <martinvonz@google.com> [Wed, 05 Dec 2018 15:30:56 -0800] rev 41028
narrow: when narrowing, write new narrowspec before removing revlogs
If revlogs were removed and then the process crashed before the
narrowspec was written, the repo would be corrupt.
Differential Revision: https://phab.mercurial-scm.org/D5467
Martin von Zweigbergk <martinvonz@google.com> [Fri, 23 Nov 2018 22:12:04 -0800] rev 41027
narrow: replace "ui.warn(); return 1" by "raise error.Abort()"
This is the usual way of doing it and I don't see a reason to do it
differently here.
Differential Revision: https://phab.mercurial-scm.org/D5468
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Sun, 16 Dec 2018 00:21:54 -0500] rev 41026
test-bookmarks-pushpull: add failing test of
issue4700
Differential Revision: https://phab.mercurial-scm.org/D5447
Boris Feld <boris.feld@octobus.net> [Wed, 19 Dec 2018 15:42:20 +0100] rev 41025
tests: update printenv.py argument parsing
We are about to introduce a new flag for printing the HG environment variables
one per line and it's easier to do when using the argparse module for argument
parsing.
Differential Revision: https://phab.mercurial-scm.org/D5452
Augie Fackler <augie@google.com> [Thu, 20 Dec 2018 01:22:58 -0500] rev 41024
fuzz: new fuzzer for parsers.fm1readmarkers
Differential Revision: https://phab.mercurial-scm.org/D5465
Augie Fackler <raf@durin42.com> [Sun, 06 Jan 2019 14:58:54 -0500] rev 41023
server: always close http socket if responding with an error (
issue6033)
It's possible for hgweb to respond _very_ early with an error if we're
catching certain types of errors. When we do, we need to tell the client
the socket is toast when there's a POST involved because otherwise there
can be lingering POST data on the socket that will confuse any future
requests on the socket. This manifested as a flaky failure on Linux in an
lfs extension test and a reliable failure on FreeBSD. With this patch
applied, test-lfs-serve-access.t now passes for me on FreeBSD.
Differential Revision: https://phab.mercurial-scm.org/D5498
Yuya Nishihara <yuya@tcha.org> [Sat, 05 Jan 2019 15:44:55 +0900] rev 41022
match: fix assertion for fileset with no context (
issue6046)
A falsy changectx should be allowed.
Matt Harbison <matt_harbison@yahoo.com> [Fri, 04 Jan 2019 21:01:10 -0500] rev 41021
templatekw: fix documentation typos
Yuya Nishihara <yuya@tcha.org> [Wed, 02 Jan 2019 09:41:04 +0900] rev 41020
update: do not pass in user revspec as default destination (
issue6044)
When the revsingle() was introduced at
61c0df2b089a, it couldn't handle
revspec=0 (not '0') properly. That's probably why the default was set to
rev.
This is technically BC since "hg update ''" was identical to "hg update '.'"
whereas "hg update -r ''" is "hg update", but I believe that's a bug given
no test fails with this change.
Boris Feld <boris.feld@octobus.net> [Sun, 30 Dec 2018 16:11:06 +0100] rev 41019
revlog: cache delta base value under -1
Such base are invalid so we better report them early.
Boris Feld <boris.feld@octobus.net> [Thu, 27 Dec 2018 23:34:37 +0100] rev 41018
revlog: catch revlog corruption in index_baserev
A revision cannot use a base above itself, it can only happens one corrupted
repository.
Ignoring such corrupted could lead to infinite loop.
Matt Harbison <matt_harbison@yahoo.com> [Fri, 21 Dec 2018 17:36:12 -0500] rev 41017
phabricator: properly encode boolean types in the request body
I tripped over this playing with `hg debugcallconduit` to query for valid
reviewers. If the JSON on stdin is written as 'True' or 'False', python
complains it isn't valid JSON. If it's written as 'true' or 'false', it made it
to the server, but got kicked back with this:
abort: Conduit Error (ERR-CONDUIT-CORE): Error while reading "isBot":
Expected boolean (true or false), got something else.
The test isn't really relevant here (the code can be reverted, and it will
pass), but this gives us coverage for the debug command.
Augie Fackler <augie@google.com> [Thu, 20 Dec 2018 01:26:39 -0500] rev 41016
parsers: better bounds checking in fm1readmarkers
Our Python already calls this with reasonable values consistently, but
my upcoming fuzzer is extremely quick to discover the lack of sanity
checking here.
Differential Revision: https://phab.mercurial-scm.org/D5464
Augie Fackler <augie@google.com> [Wed, 19 Dec 2018 23:48:35 -0500] rev 41015
fuzz: new fuzzer for dirstate parser
Differential Revision: https://phab.mercurial-scm.org/D5463
Augie Fackler <augie@google.com> [Wed, 19 Dec 2018 20:26:53 -0500] rev 41014
fuzz: new fuzzer for revlog's parse_index2 method
Differential Revision: https://phab.mercurial-scm.org/D5462
Augie Fackler <augie@google.com> [Wed, 19 Dec 2018 21:57:23 -0500] rev 41013
fuzz: extract Python initialization to utility package
Avoids code duplication between fuzzers of parsers.so.
Differential Revision: https://phab.mercurial-scm.org/D5461
Augie Fackler <augie@google.com> [Wed, 19 Dec 2018 23:40:37 -0500] rev 41012
fuzz: remove probably-wrong -fsanitize from fuzzutil.o rule
Differential Revision: https://phab.mercurial-scm.org/D5460
Augie Fackler <augie@google.com> [Wed, 19 Dec 2018 23:51:02 -0500] rev 41011
parsers: remove long-dead parse_manifest method
We haven't used this in years, I think it's fine to ditch it now. We
had previously kept it around to ease bisecting with built extensions,
but these days we've got a better versioning scheme anyway. Noticed
this method kicking around while looking in parsers.so for likely
fuzzing targets.
Differential Revision: https://phab.mercurial-scm.org/D5459
Martin von Zweigbergk <martinvonz@google.com> [Wed, 19 Dec 2018 09:33:42 -0800] rev 41010
help: hide default value for default-off flags
If we no longer show the "[no-]" for default-off flags, it also seems
unnecessary to show the "default: off" for them, since that's quite
clearly the default. It's extra confusing for action flags like `hg
bookmarks --delete`.
Differential Revision: https://phab.mercurial-scm.org/D5455
Martin von Zweigbergk <martinvonz@google.com> [Wed, 19 Dec 2018 09:20:32 -0800] rev 41009
help: show "[no-]" only for default-on Flags
As Anton (av6) pointed out, the "[no-]" is confusing for action flags
like `hg bookmark --delete`. We could come up with a way of indicating
which flags are action flags (e.g. use None for the default value
instead of False). However, it's probably also unlikely that users
will want to negate even non-action flags like --hidden.
One of the more common flags where the "[no-]" prefix would be useful
is `hg evolve --update`. The reason it's helpful there is that it
defaults to on. So I think we can simply include "[no-]" only for
flags that are on by default (and thus require the user to add the
"[no-]" for the option to have any effect).
Note that there are use cases for negating flags that already off by
default. For example, you may have an alias for `hg log -G --hidden -T
foo` and now want to pass "--no-hidden" to that alias. However, I
think that users who want that are likely to be advanced enough that
they've already learnt about the "no-" prefix by seeing it somewhere
else.
Differential Revision: https://phab.mercurial-scm.org/D5454
Martin von Zweigbergk <martinvonz@google.com> [Wed, 05 Dec 2018 15:37:03 -0800] rev 41008
shelve: drop unnecessary backup of narrowspec
I mechanically added the backup code everywhere in
ad24b581e4d9
(narrow: call narrowspec.{save,restore,clear}backup directly,
2018-08-03), but I can't think of a reason it would be needed in the
shelve code, so let's drop it.
Differential Revision: https://phab.mercurial-scm.org/D5457
Martin von Zweigbergk <martinvonz@google.com> [Mon, 07 May 2018 17:08:17 -0700] rev 41007
shelve: pass transaction around to clarify where it's used
Differential Revision: https://phab.mercurial-scm.org/D5456
Matt Harbison <matt_harbison@yahoo.com> [Wed, 19 Dec 2018 13:35:11 -0500] rev 41006
py3: byteify docchecker
The exception is printed as str because I'm too lazy to convert it and the
pieces.
Matt Harbison <matt_harbison@yahoo.com> [Wed, 19 Dec 2018 13:32:42 -0500] rev 41005
py3: replace hard coded `python` with $PYTHON in check-gendoc
Matt Harbison <matt_harbison@yahoo.com> [Tue, 18 Dec 2018 21:17:27 -0500] rev 41004
py3: byteify gendoc.py
This is mostly b'' prefixing, with some cargoculting of help.py to get around
`textwrap.dedent()` and __doc__ string requirements.
Matt Harbison <matt_harbison@yahoo.com> [Wed, 19 Dec 2018 14:51:21 -0500] rev 41003
py3: use bytes stdout in hghave.py
This fixes a failure in test-run-tests.t around notarealhghavefeature. It seems
crazy to me that all of this needs to be adjusted in all of these tests, but the
line as run-tests.py sees it in _processoutput() before doing anything is
already mangled with a trailing '\r'. Switching to normalizenewlines=True for
TTest works, but I'm sure that breaks other stuff.
Boris Feld <boris.feld@octobus.net> [Wed, 19 Dec 2018 02:57:48 +0100] rev 41002
perfrevlogwrite: fix a typo in the option name
The submitted patches was apparently damaged, and a 's' was missing.
Augie Fackler <augie@google.com> [Wed, 19 Dec 2018 19:20:21 -0500] rev 41001
fuzz: improve makefile per feedback from some folks at work
This is a *ton* better. Once this lands, I can remove a nasty kludge
from the oss-fuzz build.sh. Bonus: this fixes the coverage build.
Differential Revision: https://phab.mercurial-scm.org/D5458
Matt Harbison <matt_harbison@yahoo.com> [Tue, 18 Dec 2018 14:01:06 -0500] rev 41000
py3: use bytes stdout in test-check-help.t
Setting stdout to binary seemed to have no effect on Windows, as it was
appending a literal '\r' to each topic keyword. This also stops prepending 'b'
to the topic on all platforms as well.
Yuya Nishihara <yuya@tcha.org> [Wed, 31 Oct 2018 22:43:08 +0900] rev 40999
commandserver: preload repository in master server and reuse its file cache
This greatly speeds up repository operation with lots of obsolete markers:
$ ls -lh .hg/store/obsstore
-rw-r--r-- 1 yuya yuya 21M Dec 2 17:55 .hg/store/obsstore
$ time hg log -G -l10 --pager no
(hg) 1.79s user 0.13s system 99% cpu 1.919 total
(chg uncached) 0.00s user 0.01s system 0% cpu 1.328 total
(chg cached) 0.00s user 0.00s system 3% cpu 0.180 total
As you can see, the implementation of the preloader function is highly
experimental. It works, but I'm yet to be sure how things can be organized.
So I don't want to formalize the API at this point.
Yuya Nishihara <yuya@tcha.org> [Wed, 31 Oct 2018 22:19:03 +0900] rev 40998
commandserver: add IPC channel to teach repository path on command finished
The idea is to load recently-used repositories first in the master process,
and fork(). The forked worker can reuse a warm repository if it's preloaded.
There are a couple of ways of in-memory repository caching. They have pros
and cons:
a. "preload by master"
pros: can use a single cache dict, maximizing cache hit rate
cons: need to reload a repo in master process (because worker process
dies per command)
b. "prefork"
pros: can cache a repo without reloading (as worker processes persist)
cons: lower cache hit rate since each worker has to maintain its own cache
c. "shared memory" (or separate key-value store server)
pros: no need to reload a repo in master process, ideally
cons: need to serialize objects to sharable form
Since my primary goal is to get rid of the cost of loading obsstore without
massive rewrites, (c) doesn't work. (b) isn't ideal since it would require
much more SDRAMs than (a). So I take (a).
The idea credits to Jun Wu.
Benjamin Peterson <benjamin@python.org> [Thu, 13 Dec 2018 23:20:28 -0800] rev 40997
upgrade: correct implementation of improvement.__ne__
The "not" operator binds more closely than "==":
>>> not False == False
False
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Dec 2018 16:28:29 +0900] rev 40996
extensions: use ui.log() interface to provide detailed loading information
The output format changes and the messages will be sent to stderr instead of
stdout, but I don't think that matters.
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Dec 2018 16:52:04 +0900] rev 40995
mq: implement log() on dummyui
Otherwise ui.log() in extensions.py would explode.
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Dec 2018 16:24:08 +0900] rev 40994
ui: install logger that sends debug.extensions messages to stderr
This will replace the custom log function introduced at
d58958676b3c
"extensions: add detailed loading information."
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Dec 2018 19:05:42 +0900] rev 40993
blackbox: resurrect recursion guard
If I added ui.log() to hg.repository() function, test-merge-subrepos.t
exploded. The problem is that the blackbox may create new repository instance
while logging is active, and the created repository owns its new ui derived
from the baseui, not from the ui which is processing the active logging.
I tried to work around the issue in ui.log(), but that turned out to be not
easy. We shouldn't globally lock the ui.log() since there may be more than
one active repo/ui instances in threaded environment. We could store the
logging state in thread-local storage, but that seems unnecessarily complex.
So this patch reintroduces the _inlog flag to per-repository logger instances.
Yuya Nishihara <yuya@tcha.org> [Sat, 15 Dec 2018 17:52:14 +0900] rev 40992
tests: filter out uninteresting log events
This helps adding more log()s without updating the tests.
Yuya Nishihara <yuya@tcha.org> [Sun, 16 Dec 2018 16:31:31 +0900] rev 40991
context: error out if basefilectx.cmp() is called without self._filenode
The base implementation can't handle such cases because the filelog has no
knowledge about the working directory.
Loading self._filenode should have no extra cost since self.size() would
load it anyway.
Yuya Nishihara <yuya@tcha.org> [Sun, 16 Dec 2018 16:24:45 +0900] rev 40990
context: collapse complex condition to see if filelog have to be compared
It's hard to read. I'd rather make the return statement duplicated.
Augie Fackler <augie@google.com> [Tue, 18 Dec 2018 10:21:25 -0500] rev 40989
merge with stable
Yuya Nishihara <yuya@tcha.org> [Tue, 11 Dec 2018 22:34:07 +0900] rev 40988
worker: do not swallow exception occurred in main process
Before, SystemExit(255) would be most likely raised since the worker processes
were terminated by the main process and the status would be set to 255 in
response. We should instead re-raise the exception occurred first. It's pretty
hard to debug problems like the issue 6035 with no traceback.
Yuya Nishihara <yuya@tcha.org> [Mon, 17 Dec 2018 20:46:09 +0900] rev 40987
run-tests: fix permission to clean up unreadable directories
I found many hgtests.* directories left in $TMPDIR, which couldn't be deleted
because test-ssh-repoerror.t created some directories with a-rx mode.
Yuya Nishihara <yuya@tcha.org> [Sun, 16 Dec 2018 17:08:46 +0900] rev 40986
context: reimplement memfilectx.cmp()
If I added a sanity check to basefilectx, test-context.py exploded. This
patch copies the naive implementation from overlayworkingfilectx.
Georges Racinet <gracinet@anybox.fr> [Mon, 17 Dec 2018 15:05:52 +0100] rev 40985
rust-cpython: build and support for Python3
Defined Cargo features for Python3, making them overall simpler to
use, hooked them in build and made mercurial.rustext importable.
This is tested with Python 3.6.7.
Differential Revision: https://phab.mercurial-scm.org/D5446
Matt Harbison <matt_harbison@yahoo.com> [Tue, 18 Dec 2018 00:54:32 -0500] rev 40984
py3: convert popen() command arguments in hgclient to str on Windows
This fixes test-commandserver.t and test-keyword.t, which was previously
complaining
TypeError("a bytes-like object is required, not 'str'")
Matt Harbison <matt_harbison@yahoo.com> [Mon, 17 Dec 2018 23:08:26 -0500] rev 40983
py3: byteify tests/pullext.py
# skip-blame for b'' prepending
Matt Harbison <matt_harbison@yahoo.com> [Mon, 17 Dec 2018 21:27:37 -0500] rev 40982
py3: byteify the fakeversion extension in test-http-bad-server.t
# skip-blame for b'' prefixing
Matt Harbison <matt_harbison@yahoo.com> [Mon, 17 Dec 2018 18:25:18 -0500] rev 40981
py3: spawn all python instances with legacy stdio enabled on Windows
This fixes 6 more tests. See
ef7119cd4965.