Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 13:42:51 +0900] rev 36439
narrow: drop redundant templatekw/revset names from help text
":<name>:" is automatically added by the registrar.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 25 Feb 2018 21:04:12 -0500] rev 36438
run-tests: don't mask errors when a server fails to start
There are sporadic instances of this on Windows. They seem to happen more
frequently after the test machine is rebooted, although the only way to hit it
on my laptop is to loop certain tests with -j9 for hours. The problem with
masking out the specific failure is that there's no way to know if it's the same
line in the test that's failing, or if it is random.
The justification for adding this masking in
52e9e63f1495 was that the failures
occur regularly, but that's not the case anymore. The port number is still
printed, in case that turns out to be useful.
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 17:27:08 +0530] rev 36437
py3: use bytes instead of str in isinstance
Internally we use bytes everywhere, and str on Python 3 is unicodes, so we need
to make sure we are doing the right check.
Differential Revision: https://phab.mercurial-scm.org/D2458
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 18:00:29 +0530] rev 36436
py3: convert a map expression into list comprehension
map returns a map object on Python 3 and here we wanted a list instead.
Differential Revision: https://phab.mercurial-scm.org/D2456
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 16:22:15 +0530] rev 36435
py3: use email.generator module instead of email.Generator
On py2:
>>> import email
>>> import email.generator as emailgen
>>> email.Generator.Generator is emailgen.Generator
True
email.Generator is not present on Python 3.
Differential Revision: https://phab.mercurial-scm.org/D2454
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 16:16:37 +0530] rev 36434
py3: use pycompat.strkwargs to convert kwargs keys to str
Differential Revision: https://phab.mercurial-scm.org/D2452
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 01:01:35 -0500] rev 36433
py3: whitelist test-push-http.t as passing
Differential Revision: https://phab.mercurial-scm.org/D2451
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:51:41 -0500] rev 36432
util: handle fileno() on Python 3 throwing io.UnsupportedOperation
Fortunately, the exception exists on Python 2 so we don't have to do
something weirder than this.
Differential Revision: https://phab.mercurial-scm.org/D2450
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:50:57 -0500] rev 36431
wireproto: use %d to encode an int, not a %s
Differential Revision: https://phab.mercurial-scm.org/D2449
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:50:35 -0500] rev 36430
httppeer: explicitly catch urlerr.httperror and re-raise
On Python 3 it seems urllib.error.HTTPError doesn't set the .args
field of the exception to have any contents, which then breaks our
socket.error catch. This works around that issue.
Differential Revision: https://phab.mercurial-scm.org/D2448
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:49:33 -0500] rev 36429
hgweb: pass exception message to builtin Exception ctor as sysstr
If we don't do this, the bytes gets repr()ed on Python 3 and we get
bogus error strings sent to clients. Ick.
Differential Revision: https://phab.mercurial-scm.org/D2447
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:28:10 -0500] rev 36428
bundle2: part id is an int, use %d to make it bytes
Differential Revision: https://phab.mercurial-scm.org/D2446
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:27:47 -0500] rev 36427
bundle2: **strkwargs love on various kwargs constructions
Differential Revision: https://phab.mercurial-scm.org/D2445
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 23:51:32 -0500] rev 36426
http: drop custom http client logic
Eight and a half years ago, as my starter bug on code.google.com, I
investigated a mysterious "broken pipe" error from seemingly random
clients[0]. That investigation revealed a tragic story: the Python
standard library's httplib was (and remains) barely functional. During
large POSTs, if a server responds early with an error (even a
permission denied error!) the client only notices that the server
closed the connection and everything breaks. Such server behavior is
implicitly legal under RFC 2616 (the latest HTTP RFC as of when I was
last working on this), and my understanding is that later RFCs have
made it explicitly legal to respond early with any status code outside
the 2xx range.
I embarked, probably foolishly, on a journey to write a new http
library with better overall behavior. The http library appears to work
well in most cases, but it can get confused in the presence of
proxies, and it depends on select(2) which limits its utility if a lot
of file descriptors are open. I haven't touched the http library in
almost two years, and in the interim the Python community has
discovered a better way[1] of writing network code. In theory some day
urllib3 will have its own home-grown http library built on h11[2], or
we could do that. Either way, it's time to declare our current
confusingly-named "http2" client logic and move on. I do hope to
revisit this some day: it's still garbage that we can't even respond
with a 401 or 403 without reading the entire POST body from the
client, but the goalposts on writing a new http client library have
moved substantially. We're almost certainly better off just switching
to requests and eventually picking up their http fixes than trying to
live with something that realistically only we'll ever use. Another
approach would be to write an adapter so that Mercurial can use pycurl
if it's installed. Neither of those approaches seem like they should
be investigated prior to a release of Mercurial that works on Python
3: that's where the mindshare is going to be for any improvements to
the state of the http client art.
0: http://web.archive.org/web/
20130501031801/http://code.google.com/p/support/issues/detail?id=2716
1: http://sans-io.readthedocs.io/
2: https://github.com/njsmith/h11
Differential Revision: https://phab.mercurial-scm.org/D2444
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 23:34:58 -0500] rev 36425
statichttprepo: move HTTPRangeHandler from byterange and delete the latter
It turns out we've been toting around 472 lines of Python just for
this 20-ish line class that teaches urllib how to handle '206 Partial
Content'. byterange.py showed up in my \sstr\( Python 3 dragnet, and
found itself having overstayed its welcome in our codebase.
# no-check-commit because we're moving code that has to have foo_bar naming.
Differential Revision: https://phab.mercurial-scm.org/D2443
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 23:09:58 -0500] rev 36424
filemerge: do what the context __bytes__ does, but locally
str() here is clearly the wrong thing, and I think the code is clearer
when it doesn't just depend on the magic __{str,bytes}__ behavior.
I decided to grep around for \sstr\( and see what low-hanging fruit
that showed me. This was part of that hunt. That grep pattern still
has some things worth exploring.
Differential Revision: https://phab.mercurial-scm.org/D2442
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 23:09:07 -0500] rev 36423
py3: convert known-int values to bytes using %d
I decided to grep around for \sstr\( and see what low-hanging fruit
that showed me. This was part of that hunt. That grep pattern still
has some things worth exploring.
Differential Revision: https://phab.mercurial-scm.org/D2441
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 23:08:41 -0500] rev 36422
py3: hunt down str(exception) instances and use util.forcebytestr
I decided to grep around for \sstr\( and see what low-hanging fruit
that showed me. This was part of that hunt. That grep pattern still
has some things worth exploring.
Differential Revision: https://phab.mercurial-scm.org/D2440
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 22:30:14 -0500] rev 36421
subrepo: use util.forcebytestr() instead of str() on exception
Differential Revision: https://phab.mercurial-scm.org/D2437
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 22:29:28 -0500] rev 36420
tests: add missing b prefixes in test-commit.t
# skip-blame just some b prefixes
Differential Revision: https://phab.mercurial-scm.org/D2436
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 22:28:52 -0500] rev 36419
commitextras: fix on Python 3 by using sysstrs for __dict__ ops
I'm dubious of the __dict__ shenanigans in use here, but lack the
enthusiasm for figuring out why that was done right now.
# skip-blame just some r prefixes
Differential Revision: https://phab.mercurial-scm.org/D2435
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 22:06:53 -0500] rev 36418
util: use pycompat.bytestr() instead of str()
This fixes at least some environment variable prints for util.system()
callers on Python 3. Yay!
Differential Revision: https://phab.mercurial-scm.org/D2434
Yuya Nishihara <yuya@tcha.org> [Wed, 21 Feb 2018 22:47:47 +0900] rev 36417
showconfig: allow multiple section.name selectors (
issue5797)
This seems useful and we can disambiguate the output format solely by the
type of the command arguments.
Yuya Nishihara <yuya@tcha.org> [Wed, 21 Feb 2018 23:02:39 +0900] rev 36416
showconfig: use set to filter sections and entry names
Before, an entry matching the specified section could be printed twice if the
selector wasn't unique.
"sections" and "items" are renamed because it's hard to distinguish "sections"
from the loop variable "section".
Yuya Nishihara <yuya@tcha.org> [Wed, 21 Feb 2018 22:20:27 +0900] rev 36415
util: factor out shellsplit() function
It turned out to be more than the simple posix=True|False flag, so let's
introduce a platform function. I also made it py3 ready.
Yuya Nishihara <yuya@tcha.org> [Fri, 23 Feb 2018 23:09:58 +0900] rev 36414
diff: do not split function name if character encoding is unknown
Only ASCII characters can be split reliably at any byte positions, so let's
just leave long multi-byte sequence long. It's probably less bad than putting
an invalid byte sequence into a diff.
This doesn't try to split the first ASCII slice from multi-byte sequence
because a combining character may follow.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 11:20:35 +0900] rev 36413
histedit: use repo.revs() instead of repo.set() where revisions are needed
Follows up
72da480db4a5. This is just a micro optimization, but looks slightly
nicer.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 11:13:01 +0900] rev 36412
acl: replace bare getpass.getuser() by platform function
Follows up
dbadf28d4db0. bytestr() shouldn't be applied here because getuser()
isn't guaranteed to be all in ASCII.
This change means GetUserNameA() is used on Windows, but that's probably
better than trying to get the current user name in UNIX way.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 11:21:14 -0800] rev 36411
context: remove basectx.__int__ (API)
basectx is the only type in the repo having __int__ implemented.
This magic method can result in unexpected coercion. Furthermore,
having it implemented is wrong for some contexts, since rev() may
return None in some cases.
Previous commits removed known cases in core where contexts are
coerced to integers. So let's delete basectx.__int__.
This commit is a bit dangerous. While the test suite passes, there
are likely still some callers in core that rely on __int__ that
don't have test coverage. An alternative would be to issue a
deprecation warning and let this bake for a few releases.
.. api::
context.basectx no longer implements __int__. Context instances
will no longer cast to ints. Consumers should call ``ctx.rev()``
instead.
Differential Revision: https://phab.mercurial-scm.org/D2433
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 11:17:10 -0800] rev 36410
patchbomb: resolve revs before evaluating %ld revset
Weaning off of basectx.__rev__.
Differential Revision: https://phab.mercurial-scm.org/D2432
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 11:04:21 -0800] rev 36409
histedit: resolve revs before evaluating %ld revset
We want to stop relying on basectx.__int__. That means we can't
use the %ld revset operator with an iterable of contexts. So
we expand an iterable of contexts into a list of revs before calling
into the revset.
Perhaps it would be worthwhile to add a revset format operator
that recognizes context instances so we can just pass contexts
as revset arguments?
Differential Revision: https://phab.mercurial-scm.org/D2431
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 11:20:24 -0800] rev 36408
split: use ctx.rev() instead of %d % ctx
And rename a variable for clarity while we're here.
This is part of our effort to wean off basectx.__int__.
Differential Revision: https://phab.mercurial-scm.org/D2430
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 11:14:28 -0800] rev 36407
commands: use ctx.rev() instead of %d % ctx
Weaning off basectx.__int__.
Differential Revision: https://phab.mercurial-scm.org/D2429
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 11:13:36 -0800] rev 36406
cmdutil: use ctx.rev() instead of %d % ctx
Weaning off basectx.__int__.
Differential Revision: https://phab.mercurial-scm.org/D2428
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 11:07:07 -0800] rev 36405
rebase: use ctx.rev() instead of %d % ctx
Weaning away from basectx.__int__.
Differential Revision: https://phab.mercurial-scm.org/D2427
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 10:53:47 -0800] rev 36404
histedit: use ctx.rev() instead of %d % ctx
Weaning off basectx.__int__.
Differential Revision: https://phab.mercurial-scm.org/D2426
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 10:56:15 -0800] rev 36403
histedit: rename variables so they have "ctx" in them
It is convention for context instances to end with "ctx." Until
we have type annotations, this makes auditing much, much easier.
Differential Revision: https://phab.mercurial-scm.org/D2425
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 10:51:13 -0800] rev 36402
cmdutil: use ctx.rev() instead of int(ctx)
Continuing to wean off basectx.__int__.
Differential Revision: https://phab.mercurial-scm.org/D2424
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 10:48:24 -0800] rev 36401
templatekw: use ctx.rev() instead of casting context to int
basectx has __int__ implemented. Per mailing list discussion
with Yuya, we don't like having this implemented because it is
too much magic and in some cases rev() will return None, which
isn't an int.
So convert a `'%d' % ctx` to ctx.rev() instead.
Differential Revision: https://phab.mercurial-scm.org/D2423
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 16:18:40 +0530] rev 36400
py3: fix handling of keyword arguments at more places
The keys of keyword arguments of Python 3 should be str, which is why we need to
prevent getting the b'' prefix added by the transformer or convert keys to str
using pycompat.strkwargs()
Differential Revision: https://phab.mercurial-scm.org/D2420
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 16:16:14 +0530] rev 36399
py3: use '%d' for integers instead of '%s'
Differential Revision: https://phab.mercurial-scm.org/D2419
Kevin Bullock <kbullock+mercurial@ringworld.org> [Sat, 24 Feb 2018 17:49:10 -0600] rev 36398
merge with stable
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 16:20:55 +0530] rev 36397
py3: use '//' for integer division in hgweb/common.py
'/' on Python 3 does the float division.
Differential Revision: https://phab.mercurial-scm.org/D2422
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 16:20:15 +0530] rev 36396
py3: use util.forcebytestr to convert error messages to bytes
Differential Revision: https://phab.mercurial-scm.org/D2421
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 16:15:16 +0530] rev 36395
py3: add b'' prefixes to config options in test/badserverext.py
Differential Revision: https://phab.mercurial-scm.org/D2418
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 16:07:45 +0530] rev 36394
py3: replace file() with open()
file() is not present in Python 3.
Differential Revision: https://phab.mercurial-scm.org/D2417
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 16:06:21 +0530] rev 36393
py3: make sure regexes are bytes
# skip-blame because we added just b'' prefix
Differential Revision: https://phab.mercurial-scm.org/D2416
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 16:04:57 +0530] rev 36392
py3: convert dict.items() to list explicitly
On python 3, dict.items() returns a dict_items object which cannot be sorted.
Differential Revision: https://phab.mercurial-scm.org/D2415
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 15:35:00 +0530] rev 36391
py3: whitelist another 8 passing tests
Differential Revision: https://phab.mercurial-scm.org/D2414
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 01:22:15 +0530] rev 36390
py3: use '//' for integer divisions
Differential Revision: https://phab.mercurial-scm.org/D2413
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 01:21:22 +0530] rev 36389
py3: use "%d" for integers instead of "%s"
util.parsedate() returns a tuple of integers. Writing this patch, I wish we had
some type hinting.
Differential Revision: https://phab.mercurial-scm.org/D2412
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 01:20:20 +0530] rev 36388
py3: use util.forcebytestr instead of str to convert error messages
Differential Revision: https://phab.mercurial-scm.org/D2411
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 24 Feb 2018 01:19:26 +0530] rev 36387
py3: use pycompat.byteskwargs() to fix keyword arguments handling
I missed these when I fixed keyword arguments handling in the whole file.
Differential Revision: https://phab.mercurial-scm.org/D2410
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 23 Feb 2018 17:57:04 -0800] rev 36386
setup: only allow Python 3 from a source checkout (
issue5804)
People are running `pip install Mercurial` with Python 3 and that
is working because not everything performs a Python version
compatibility check.
Modern versions of pip do recognize the "python_requires" keyword
(https://packaging.python.org/tutorials/distributing-packages/#python-requires)
which we set if using setuptools. But this isn't set nor recognized
everywhere.
To prevent people from accidentally installing Mercurial with Python
3 until Python 3 is officially supported, have setup.py fail when
run with Python 3. But don't fail if we're running from a source
checkout, as we don't want to anger Mercurial developers hacking
on Python 3 nor Mercurial's test automation running from source
checkouts. People running setup.py from source checkouts could still
fall through a Python 3 crack. But at least the
`pip install Mercurial` attempt will get nipped in the bud.
Matt Harbison <matt_harbison@yahoo.com> [Fri, 23 Feb 2018 20:50:10 -0500] rev 36385
tests: add HTTP POST and PUT support to the $LOGDATE$ substitution
The lfs serving code uses both POST and PUT requests (and there's existing
support for POST).
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 23 Feb 2018 18:47:26 +0530] rev 36384
py3: make regex bytes in hgweb/webcommands.py
# skip-blame because just b'' prefix
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 23 Feb 2018 18:23:51 +0530] rev 36383
py3: replace types.NoneType with type(None)
types.NoneType is not present in Python 3.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 23 Feb 2018 18:12:20 +0530] rev 36382
py3: add missing b'' in test-arbitraryfilectx.t
# skip-blame as just b'' prefix
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 23 Feb 2018 18:04:33 +0530] rev 36381
py3: pass ctx.rev() instead of ctx in range()
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 23 Feb 2018 18:03:58 +0530] rev 36380
py3: add b'' prefixes in test-alias.t
# skip-blame as it's just b'' prefixes
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 23 Feb 2018 17:26:45 +0530] rev 36379
py3: add b'' prefixes in test-revset.t
# skip-blame because it's just b''
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 23 Feb 2018 17:25:51 +0530] rev 36378
py3: make sure we use bytes in generate-working-copy-states.py
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 23 Feb 2018 17:15:36 +0530] rev 36377
py3: fix keyword arguments handling in hgext/acl.py
# skip-blame because we added r'' prefixes
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 23 Feb 2018 17:14:25 +0530] rev 36376
py3: use pycompat.bytestr to convert str returned by getpass.getuser to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 23 Feb 2018 16:57:17 +0530] rev 36375
py3: add b'' prefixes in test-abort-checkin.t
# skip-blame because we just added a b'' prefix.
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 21 Feb 2018 23:43:23 +0530] rev 36374
py3: add b'' prefixes in test-dispatch.py
# skip-blame because this is just adding b'' prefixes
Augie Fackler <augie@google.com> [Thu, 22 Feb 2018 20:04:42 -0500] rev 36373
cleanup: say goodbye to manifestv2 format
This experiment was a bust: we'd hoped for smaller repository sizes,
but things got larger. Google ended up rolling out tree manifests in a
format that's compatible with the original manifest format, and I
believe Facebook is doing the same. This code was never implemented as
native speedups, so I'm pretty comfortable saying nobody is using the
experimental feature. Let's rip it out.
I noticed this code still kicking around because I was investigating a
repo corruption issue for timeless.
.. bc::
Support for the experimental manifestv2 format has been removed, as
it was never completed and failed to meet expectations.
Differential Revision: https://phab.mercurial-scm.org/D2393
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 21 Feb 2018 16:47:39 -0800] rev 36372
wireproto: document the wonky push protocol for SSH
It took me several minutes to figure out how the "unbundle"
protocol worked. It turns out that the SSH protocol handler
sends an empty reply that is interpreted as "OK to send" and
only then does the client send the bundle payload.
On top of that, the response is different depending on whether
the operation was successful or not. I nearly pulled out my hair
deciphering this.
Differential Revision: https://phab.mercurial-scm.org/D2385
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 21 Feb 2018 14:21:05 -0800] rev 36371
wireprototypes: move baseprotocolhandler from wireprotoserver
This is needed to prevent a cycle in an upcoming commit.
Differential Revision: https://phab.mercurial-scm.org/D2384
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 21 Feb 2018 14:02:23 -0800] rev 36370
sshpeer: defer pipe buffering and stderr sidechannel binding
The doublepipe and bufferedinputpipe types facilitate polling
multiple pipes without blocking and for automatically forwarding
output from the SSH server's stderr pipe to the ui as "remote: "
output. This all happens automatically and callers don't need
to worry about reading from multiple pipes.
An upcoming change to version 2 of the SSH wire protocol will
eliminate the use of stderr and move side-channel output into
the "main" pipe. The SSH wire protocol will use a pair of
unidirectional pipes - just like the HTTP protocol. In this
future world, the doublepipe primitive isn't necessary because
the stderr pipe won't be used.
To prepare for eventually not using doublepipe, we delay the
construction of this primitive from immediately after
connection establishment to inside construction of the peer
instance. The handshake occurs between these two events. So
we had to teach the handshake code to read from stderr so
any stderr output from the server is still attended to early in
the connection lifetime.
Differential Revision: https://phab.mercurial-scm.org/D2383
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 21 Feb 2018 13:08:55 -0800] rev 36369
sshpeer: make pipe polling code more explicit
"hasbuffer" is a property on our special bufferedinputpipe class.
When reading this code, I thought it might have had something
special to do properties on built-in types. But "hasbuffer" doesn't
appear in the CPython code base for either 2.7 or 3.7, so the
answer is no.
Let's make the code more explicit about the fact that it deals with
our special bufferedinputpipe type.
Differential Revision: https://phab.mercurial-scm.org/D2382
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 19 Feb 2018 13:20:17 -0800] rev 36368
tests: store protocol payload in files
Upcoming changes to version 2 of the SSH protocol will introduce
binary components to the protocol. It will be easier to eliminate
trailing newlines and use binary in the tests if the protocol
payload is being generated by Python.
So use inline Python to write payloads to files and pipe those files
to server processes instead of shell strings/variables.
Differential Revision: https://phab.mercurial-scm.org/D2381
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 21 Feb 2018 08:35:48 -0800] rev 36367
sshpeer: return framed file object when needed
Currently, wireproto.wirepeer has a default implementation of
_submitbatch() and sshv1peer has a very similar implementation.
The main difference is that sshv1peer is aware of the total amount
of bytes it can read whereas the default implementation reads the
stream until no more data is returned. The default implementation
works for HTTP, since there is a known end to HTTP responses (either
Content-Length or 0 sized chunk).
This commit teaches sshv1peer to use our just-introduced "cappedreader"
class for wrapping a file object to limit the number of bytes that
can be read. We do this by introducing an argument to specify whether
the response is framed. If set, we returned a cappedreader instance
instead of the raw pipe.
_call() always has framed responses. So we set this argument
unconditionally and then .read() the entirety of the result.
Strictly speaking, we don't need to use cappedreader in this case
and can inline frame decoding/read logic. But I like when things
are consistent. The overhead should be negligible.
_callstream() and _callcompressable() are special: whether framing
is used depends on the specific command. So, we define a set
of commands that have framed response. It currently only
contains "batch."
As a result of this change, the one-off implementation of
_submitbatch() in sshv1peer can be removed since it is now
safe to .read() the response's file object until end of stream.
cappedreader takes care of not overrunning the frame.
Differential Revision: https://phab.mercurial-scm.org/D2380
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 21 Feb 2018 08:33:50 -0800] rev 36366
sshpeer: move logic for sending a request into a new function
The **args being used to pass arbitrary command arguments is limiting
because it makes it harder to control behavior of the function.
We factor most of _callstream() into a new function that doesn't
use **args.
Differential Revision: https://phab.mercurial-scm.org/D2379
Josef 'Jeff' Sipek <jeffpc@josefsipek.net> [Wed, 21 Feb 2018 16:51:09 -0500] rev 36365
help: fix wording describing SSH requirements
Anton Shestakov <av6@dwimlabs.net> [Thu, 22 Feb 2018 15:18:44 +0800] rev 36364
graphlog: document what "_" and "*" mean
Documenting "*" should've been a part of
9b3f95d9783d, but I somehow didn't
notice that the symbols are explained in the command's help text.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 19 Feb 2018 15:57:28 -0800] rev 36363
sshpeer: rename _recv and _send to _readframed and _writeframed
Because it is reading and writing a chunk of data with a well-defined
size. "recv" and "send" make it sound like things are a direct proxy to
the underlying pipe, which they aren't.
Differential Revision: https://phab.mercurial-scm.org/D2378
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 21 Feb 2018 13:41:20 -0800] rev 36362
util: add a file object proxy that can read at most N bytes
Sometimes we have data of a known size within a stream. For
performance reasons, we don't want to pre-read this data (we want
to allow consumers to read on demand). For simplicitly reasons,
we don't want callers to necessarily know their data is coming
from within an outer stream and there is a limit to how much
they should read.
The class introduced by this commit provides a very simple proxy
around an underlying file object that allows the consumer to
.read() up to N bytes from the file object. Attempts to read
past this many bytes results in a simulated EOF.
Differential Revision: https://phab.mercurial-scm.org/D2377
Boris Feld <boris.feld@octobus.net> [Mon, 05 Feb 2018 15:03:51 +0100] rev 36361
patches: release the GIL while applying the patch
This will allow multiple threads to apply patches at the same time.
Boris Feld <boris.feld@octobus.net> [Wed, 21 Feb 2018 11:43:12 +0100] rev 36360
perfbranchmap: allow to select the filter to benchmark
Running the branchmap computation on all filter levels can be expensive.
Narrowing the run to some specific filters can speed up benchmarking time when
working only on a subset of filter levels.
Boris Feld <boris.feld@octobus.net> [Wed, 21 Feb 2018 12:13:16 +0100] rev 36359
perfbranchmap: display 'unfiltered' for unfiltered performance
This is slightly clearer than "None" and will help with coming changes to select
the filter level we want timing for.
Augie Fackler <augie@google.com> [Thu, 22 Feb 2018 01:00:57 -0500] rev 36358
py3: two more narrow tests passing
Differential Revision: https://phab.mercurial-scm.org/D2390
Augie Fackler <augie@google.com> [Thu, 22 Feb 2018 00:51:32 -0500] rev 36357
narrowbundle2: more kwargs native string fixes
This gets test-narrow.t to *almost* pass. Something appears to be
borked in producing bundles, but only some of the time? I'm lost, but
this change is at least a clear improvement.
# skip-blame just more r prefixes on strings
Differential Revision: https://phab.mercurial-scm.org/D2389
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 23:24:51 -0500] rev 36356
py3: whitelist another 11 passing tests
This is most of narrow. There's still some buglets at the margins, but
it's pretty good progress for not a lot of work.
Differential Revision: https://phab.mercurial-scm.org/D2388
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 22:49:40 -0500] rev 36355
narrowbundle2: use native string to get kwargs from dict
# skip-blame just some r prefixes on strings
Differential Revision: https://phab.mercurial-scm.org/D2387
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 22:49:15 -0500] rev 36354
narrowbundle2: drop legacy getcgkwargs variable
I think this was around as part of support for some older hg
internals. It's not needed any more.
Differential Revision: https://phab.mercurial-scm.org/D2386
Daniel Ploch <dploch@google.com> [Wed, 21 Feb 2018 20:05:29 -0800] rev 36353
fancyopts: add support for custom multi-arg opts in fancyopts.py
This allows for more complex multi-arg opt logic, such as "--sum 1 --sum 2"
-> 3, "--csv alice,bob --csv charlie" -> ["alice","bob","charlie"]. The
current support for callables is insufficient for this.
This is done by introducing a 'customopt' class which can be extended for
more powerful opts logic. All existing opt-types are converted to use this
class, simplifying the fancyopts() logic.
Differential Revision: https://phab.mercurial-scm.org/D2090
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 11:57:11 -0500] rev 36352
narrowcommands: add some missing strkwargs calls for py3
# skip-blame because it's just r prefixes
Differential Revision: https://phab.mercurial-scm.org/D2367
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 11:56:51 -0500] rev 36351
narrowwirepeer: add some strkwargs to fix a crash on py3
# skip-blame because it's just some r prefixes
Differential Revision: https://phab.mercurial-scm.org/D2366
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 12:03:44 -0500] rev 36350
narrowchangegroup: remove backwards compatibility with old hg
This was missed in the initial import of narrowhg, but was detected by
the Python 3 porting effort once I got enough other things in narrow
fixed.
Differential Revision: https://phab.mercurial-scm.org/D2370
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 19:11:11 -0800] rev 36349
narrowbundle2: replace map() with equivalent list comprehension
The result of this gets used as a list in core code, so the generator
returned by map() on Python 3 is a problem.
Differential Revision: https://phab.mercurial-scm.org/D2369
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 11:58:41 -0500] rev 36348
narrowbundle2: this dict contains native strings, look kws up as such
We could also do a byteskwargs dance, but that seems silly given that
we only need this one element.
Differential Revision: https://phab.mercurial-scm.org/D2368
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 11:56:22 -0500] rev 36347
tests: port extension in test-narrow-expanddirstate.t to Python 3
Differential Revision: https://phab.mercurial-scm.org/D2365
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 10:10:02 -0500] rev 36346
py3: use list comprehensions instead of filter where we need to eagerly filter
These two uses of filter() are then checked for truthiness, but on Python 3:
>>> bool(filter(None, []))
True
So we need to stop depending on that. Fortunately it's easy to replace
the filter with an equivalent list comprehension.
Differential Revision: https://phab.mercurial-scm.org/D2364
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 10:08:35 -0500] rev 36345
narrow: use list comprehension instead of filter for filtering lists
filter() returns a generator on Python 3, which causes these filters
to break things.
Differential Revision: https://phab.mercurial-scm.org/D2363
Augie Fackler <augie@google.com> [Wed, 21 Feb 2018 09:43:35 -0500] rev 36344
py3: whitelist another eight passing tests
Differential Revision: https://phab.mercurial-scm.org/D2362
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Feb 2018 08:57:22 -0800] rev 36343
mq: don't reimplement any()
Differential Revision: https://phab.mercurial-scm.org/D2376
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Feb 2018 08:55:54 -0800] rev 36342
mq: don't reimplement any()
Differential Revision: https://phab.mercurial-scm.org/D2375
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Feb 2018 08:54:36 -0800] rev 36341
strip: don't reimplement any()
Differential Revision: https://phab.mercurial-scm.org/D2374
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Feb 2018 08:52:12 -0800] rev 36340
convert: don't reimplement any()
Differential Revision: https://phab.mercurial-scm.org/D2373
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Feb 2018 08:49:37 -0800] rev 36339
verify: don't reimplement any()
Differential Revision: https://phab.mercurial-scm.org/D2372
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Feb 2018 08:48:05 -0800] rev 36338
walkrepos: don't reimplement any()
Differential Revision: https://phab.mercurial-scm.org/D2371
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 21 Feb 2018 00:25:16 +0530] rev 36337
py3: make sure we open file in bytes mode
Differential Revision: https://phab.mercurial-scm.org/D2360
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 21 Feb 2018 00:24:44 +0530] rev 36336
py3: add b'' to test-ui-color.py
# skip-blame because just b'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D2359
Matt Harbison <matt_harbison@yahoo.com> [Tue, 20 Feb 2018 22:03:13 -0500] rev 36335
debuginstall: strip double quotes from editorbin on Windows
The unconditional posix style shlex.split() prior to
94a1ff16f362 handled this.
This isn't mutually exclusive with stripping the quotes in util.findexe()- if
the editor can't be found, this command prints out the string, inside single
quotes.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 20 Feb 2018 21:37:30 -0500] rev 36334
pycompat: correct the shlex.split() proxy method signature in py3
Augie Fackler <augie@google.com> [Tue, 20 Feb 2018 22:23:06 -0500] rev 36333
merge with stable
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Feb 2018 23:47:53 +0530] rev 36332
convert: don't use type as a variable name
Differential Revision: https://phab.mercurial-scm.org/D2358
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Feb 2018 23:47:15 +0530] rev 36331
convert: don't use bytes as a variable name
Differential Revision: https://phab.mercurial-scm.org/D2357
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Feb 2018 23:46:42 +0530] rev 36330
py3: add a r'' prefix to prevent transformer from adding b''
# skip-blame as only r'' prefix was added
Differential Revision: https://phab.mercurial-scm.org/D2356
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Feb 2018 23:44:41 +0530] rev 36329
py3: use pycompat.byteskwargs in hgext/convert/
Differential Revision: https://phab.mercurial-scm.org/D2355
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Feb 2018 21:45:49 +0530] rev 36328
py3: add b'' prefixes in test-mdiff.py
# skip-blame because we are just adding b''
Differential Revision: https://phab.mercurial-scm.org/D2354
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Feb 2018 21:18:52 +0530] rev 36327
py3: use dict.items() instead of dict.iteritems() in tests
dict.iteritems() is not present in Python 3.
Differential Revision: https://phab.mercurial-scm.org/D2353
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Feb 2018 15:28:54 +0530] rev 36326
py3: add b'' prefixes in test-transplant.t
# skip-blame because we are just adding b''
Differential Revision: https://phab.mercurial-scm.org/D2352
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Feb 2018 15:28:16 +0530] rev 36325
py3: add b'' prefixes in fakepatchtime.py
# skip-blame because we are just adding b''
Differential Revision: https://phab.mercurial-scm.org/D2351
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Feb 2018 15:27:25 +0530] rev 36324
py3: add b'' prefixes in fakedirstatewritetime.py
# skip-blame because we are just adding b''
Differential Revision: https://phab.mercurial-scm.org/D2350
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 19 Feb 2018 15:26:07 +0530] rev 36323
py3: use '%d' to convert integer to bytes
Differential Revision: https://phab.mercurial-scm.org/D2349
Anton Shestakov <av6@dwimlabs.net> [Mon, 19 Feb 2018 12:48:50 +0800] rev 36322
hgweb: show each obsfateentry on its own line
Commits with more than one reason for being obsolete used to just show obsfate
entries all on one line, and that doesn't look good. Let's show each entry on
its own line.
In paper and coal the lines are simply split using a <br> element, and in other
hgweb themes each entry has its own table header. This is done by analogy with
changeset parents and children -- in paper and coal they are all put into one
table row, and everywhere else each one gets a separate row.
Anton Shestakov <av6@dwimlabs.net> [Mon, 19 Feb 2018 12:30:23 +0800] rev 36321
tests: check obsolete changeset with two obsfate entries
It's more interesting to see how a changeset that was both rewritten and split
looks in hgweb.
Augie Fackler <augie@google.com> [Sun, 18 Feb 2018 15:53:48 -0500] rev 36320
py3: whitelist another six passing tests
Differential Revision: https://phab.mercurial-scm.org/D2348