Mon, 26 Feb 2018 18:00:29 +0530 py3: convert a map expression into list comprehension
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
Mon, 26 Feb 2018 16:22:15 +0530 py3: use email.generator module instead of email.Generator
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
Mon, 26 Feb 2018 16:16:37 +0530 py3: use pycompat.strkwargs to convert kwargs keys to str
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
Mon, 26 Feb 2018 01:01:35 -0500 py3: whitelist test-push-http.t as passing
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
Mon, 26 Feb 2018 00:51:41 -0500 util: handle fileno() on Python 3 throwing io.UnsupportedOperation
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
Mon, 26 Feb 2018 00:50:57 -0500 wireproto: use %d to encode an int, not a %s
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
Mon, 26 Feb 2018 00:50:35 -0500 httppeer: explicitly catch urlerr.httperror and re-raise
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
Mon, 26 Feb 2018 00:49:33 -0500 hgweb: pass exception message to builtin Exception ctor as sysstr
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
Mon, 26 Feb 2018 00:28:10 -0500 bundle2: part id is an int, use %d to make it bytes
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
Mon, 26 Feb 2018 00:27:47 -0500 bundle2: **strkwargs love on various kwargs constructions
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
Sun, 25 Feb 2018 23:51:32 -0500 http: drop custom http client logic
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
Sun, 25 Feb 2018 23:34:58 -0500 statichttprepo: move HTTPRangeHandler from byterange and delete the latter
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
Sun, 25 Feb 2018 23:09:58 -0500 filemerge: do what the context __bytes__ does, but locally
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
Sun, 25 Feb 2018 23:09:07 -0500 py3: convert known-int values to bytes using %d
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
Sun, 25 Feb 2018 23:08:41 -0500 py3: hunt down str(exception) instances and use util.forcebytestr
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
Sun, 25 Feb 2018 22:30:14 -0500 subrepo: use util.forcebytestr() instead of str() on exception
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
Sun, 25 Feb 2018 22:29:28 -0500 tests: add missing b prefixes in test-commit.t
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
Sun, 25 Feb 2018 22:28:52 -0500 commitextras: fix on Python 3 by using sysstrs for __dict__ ops
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
Sun, 25 Feb 2018 22:06:53 -0500 util: use pycompat.bytestr() instead of str()
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
Wed, 21 Feb 2018 22:47:47 +0900 showconfig: allow multiple section.name selectors (issue5797)
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.
Wed, 21 Feb 2018 23:02:39 +0900 showconfig: use set to filter sections and entry names
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".
Wed, 21 Feb 2018 22:20:27 +0900 util: factor out shellsplit() function
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.
Fri, 23 Feb 2018 23:09:58 +0900 diff: do not split function name if character encoding is unknown
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.
Sun, 25 Feb 2018 11:20:35 +0900 histedit: use repo.revs() instead of repo.set() where revisions are needed
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.
Sun, 25 Feb 2018 11:13:01 +0900 acl: replace bare getpass.getuser() by platform function
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.
Sat, 24 Feb 2018 11:21:14 -0800 context: remove basectx.__int__ (API)
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
Sat, 24 Feb 2018 11:17:10 -0800 patchbomb: resolve revs before evaluating %ld revset
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
Sat, 24 Feb 2018 11:04:21 -0800 histedit: resolve revs before evaluating %ld revset
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
Sat, 24 Feb 2018 11:20:24 -0800 split: use ctx.rev() instead of %d % ctx
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
Sat, 24 Feb 2018 11:14:28 -0800 commands: use ctx.rev() instead of %d % ctx
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
Sat, 24 Feb 2018 11:13:36 -0800 cmdutil: use ctx.rev() instead of %d % ctx
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
Sat, 24 Feb 2018 11:07:07 -0800 rebase: use ctx.rev() instead of %d % ctx
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
Sat, 24 Feb 2018 10:53:47 -0800 histedit: use ctx.rev() instead of %d % ctx
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
Sat, 24 Feb 2018 10:56:15 -0800 histedit: rename variables so they have "ctx" in them
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
Sat, 24 Feb 2018 10:51:13 -0800 cmdutil: use ctx.rev() instead of int(ctx)
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
Sat, 24 Feb 2018 10:48:24 -0800 templatekw: use ctx.rev() instead of casting context to int
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
Sat, 24 Feb 2018 16:18:40 +0530 py3: fix handling of keyword arguments at more places
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
Sat, 24 Feb 2018 16:16:14 +0530 py3: use '%d' for integers instead of '%s'
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
Sat, 24 Feb 2018 17:49:10 -0600 merge with stable
Kevin Bullock <kbullock+mercurial@ringworld.org> [Sat, 24 Feb 2018 17:49:10 -0600] rev 36398
merge with stable
Sat, 24 Feb 2018 16:20:55 +0530 py3: use '//' for integer division in hgweb/common.py
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
Sat, 24 Feb 2018 16:20:15 +0530 py3: use util.forcebytestr to convert error messages to bytes
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
Sat, 24 Feb 2018 16:15:16 +0530 py3: add b'' prefixes to config options in test/badserverext.py
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
Sat, 24 Feb 2018 16:07:45 +0530 py3: replace file() with open()
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
Sat, 24 Feb 2018 16:06:21 +0530 py3: make sure regexes are bytes
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
Sat, 24 Feb 2018 16:04:57 +0530 py3: convert dict.items() to list explicitly
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
Sat, 24 Feb 2018 15:35:00 +0530 py3: whitelist another 8 passing tests
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
Sat, 24 Feb 2018 01:22:15 +0530 py3: use '//' for integer divisions
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
Sat, 24 Feb 2018 01:21:22 +0530 py3: use "%d" for integers instead of "%s"
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
(0) -30000 -10000 -3000 -1000 -300 -100 -48 +48 +100 +300 +1000 +3000 +10000 tip