Sun, 25 Feb 2018 14:42:18 +0900 log: do not invoke templatekw.showobsfate() as a function
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 14:42:18 +0900] rev 36546
log: do not invoke templatekw.showobsfate() as a function Prepares for switching to the (context, mapping) API. I tried, but it appeared not an one-off change to extract a non-template function from showobsfate(), which deeply depends on the templater internals.
Sun, 25 Feb 2018 16:36:38 +0900 templatekw: inline getfiles()
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:36:38 +0900] rev 36545
templatekw: inline getfiles() It's just three lines. We don't need a separate function for that.
Sun, 25 Feb 2018 16:35:34 +0900 templatekw: factor out function to build a list of files per status
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:35:34 +0900] rev 36544
templatekw: factor out function to build a list of files per status Removes copy-paste code before switching to the (context, mapping) API.
Sun, 25 Feb 2018 13:40:46 +0900 templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 13:40:46 +0900] rev 36543
templatekw: switch non-showlist template keywords to new API
Sun, 25 Feb 2018 14:28:32 +0900 templatekw: extract non-templatekw function as getgraphnode()
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 14:28:32 +0900] rev 36542
templatekw: extract non-templatekw function as getgraphnode() Prepares for switching to the (context, mapping) API. We still need (repo, ctx) function for the fast path.
Wed, 28 Feb 2018 16:24:39 +0100 convert: avoid closing ui.fout in subversion code (issue5807)
Sascha Nemecek <nemecek@wienfluss.net> [Wed, 28 Feb 2018 16:24:39 +0100] rev 36541
convert: avoid closing ui.fout in subversion code (issue5807) Don't close 'fp' (= 'ui.fout') stream to prevent 'ValueError: I/O operation on closed file' (Bug #5807). Regression of changeset 30261:6bed17ba00a1 (https://www.mercurial-scm.org/repo/hg/rev/6bed17ba00a1)
Sun, 07 Jan 2018 11:53:07 +0900 cmdutil: expand filename format string by templater (BC)
Yuya Nishihara <yuya@tcha.org> [Sun, 07 Jan 2018 11:53:07 +0900] rev 36540
cmdutil: expand filename format string by templater (BC) This is BC because '{}' could be a valid filename before, but I believe good programmers wouldn't use such catastrophic output filenames. On the other hand, '\' has to be escaped since it is a directory separator on Windows. Thanks to Matt Harbison for spotting this weird issue. This patch also adds cmdutil.rendertemplate(ctx, tmpl, props) as a simpler way of expanding template against single changeset. .. bc:: '{' in output filename passed to archive/cat/export is taken as a start of a template expression.
Sun, 18 Feb 2018 11:53:26 +0900 templater: add option to parse template string just like raw string literal
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Feb 2018 11:53:26 +0900] rev 36539
templater: add option to parse template string just like raw string literal This seems a bit odd because the template syntax has no raw string literal containing template fragments, but is necessary to port filename format string to templater. See the next patch.
Sun, 18 Feb 2018 10:58:15 +0900 cmdutil: reorder optional arguments passed to makefileobj()
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Feb 2018 10:58:15 +0900] rev 36538
cmdutil: reorder optional arguments passed to makefileobj() **props will be passed directly to templater.
Sun, 18 Feb 2018 10:54:24 +0900 cmdutil: strip "%m" pattern (first line of commit message) from both ends
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Feb 2018 10:54:24 +0900] rev 36537
cmdutil: strip "%m" pattern (first line of commit message) from both ends This matches the behavior of the template keyword {desc}.
Tue, 27 Feb 2018 22:37:57 +0900 test-acl: mock up util.getuser() to trust $LOGNAME on Windows
Yuya Nishihara <yuya@tcha.org> [Tue, 27 Feb 2018 22:37:57 +0900] rev 36536
test-acl: mock up util.getuser() to trust $LOGNAME on Windows The test relies on POSIX-like getuser() behavior, so we can't use windows.getuser().
Thu, 01 Mar 2018 04:50:22 -0500 fileset: drop bad "elif:" trying to check invalid size expression
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 04:50:22 -0500] rev 36535
fileset: drop bad "elif:" trying to check invalid size expression Since str.isdigit is a function, the last "elif" was always true. An invalid expression is rejected by util.sizetoint(), so we don't need "elif".
Thu, 01 Mar 2018 08:55:39 -0500 py3: fix test-command-template.t to write files in binary mode
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:55:39 -0500] rev 36534
py3: fix test-command-template.t to write files in binary mode
Thu, 01 Mar 2018 08:45:34 -0500 py3: use bytestr() to coerce position carried by ParseError to string
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:45:34 -0500] rev 36533
py3: use bytestr() to coerce position carried by ParseError to string The position value is either int or byte string.
Thu, 01 Mar 2018 08:38:39 -0500 py3: use bytes.endswith('\n') to strip off '\n' from debug color output
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:38:39 -0500] rev 36532
py3: use bytes.endswith('\n') to strip off '\n' from debug color output
Thu, 01 Mar 2018 08:19:47 -0500 py3: fix type of attribute names forwarded by templatekw._hybrid
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:19:47 -0500] rev 36531
py3: fix type of attribute names forwarded by templatekw._hybrid # skip-blame because just r'' prefixes
Thu, 01 Mar 2018 06:47:06 -0500 py3: move between bytes and unicode when re-raising IOError
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 06:47:06 -0500] rev 36530
py3: move between bytes and unicode when re-raising IOError IOError is a Python exception, which argument must be a system string.
Thu, 01 Mar 2018 06:43:13 -0500 py3: use '%d' to format diffstat sum
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 06:43:13 -0500] rev 36529
py3: use '%d' to format diffstat sum
Thu, 01 Mar 2018 06:40:09 -0500 py3: make regexp literal bytes in templatefilters.py
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 06:40:09 -0500] rev 36528
py3: make regexp literal bytes in templatefilters.py # skip-blame because just b'' prefixes
Thu, 01 Mar 2018 06:38:37 -0500 templatefilters: use encoding.unifromlocal/unitolocal() for py3 compatibility
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 06:38:37 -0500] rev 36527
templatefilters: use encoding.unifromlocal/unitolocal() for py3 compatibility
Fri, 02 Mar 2018 00:00:41 +0530 py3: replace str() with it's bytes equivalent in hgext/shelve.py
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 00:00:41 +0530] rev 36526
py3: replace str() with it's bytes equivalent in hgext/shelve.py Internally we are dealing with bytes everywhere, so anything returning a unicode results in an error or some change in behaviour. Differential Revision: https://phab.mercurial-scm.org/D2520
Thu, 01 Mar 2018 23:59:20 +0530 py3: make sure we write bytes in a file open in bytes mode
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:59:20 +0530] rev 36525
py3: make sure we write bytes in a file open in bytes mode # skip-blame just b'' prefix Differential Revision: https://phab.mercurial-scm.org/D2519
Thu, 01 Mar 2018 23:58:21 +0530 py3: add b'' prefixes in tests/test-obsolete.t
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:58:21 +0530] rev 36524
py3: add b'' prefixes in tests/test-obsolete.t # skip-blame because it's just b'' prefixes Differential Revision: https://phab.mercurial-scm.org/D2518
Thu, 01 Mar 2018 23:57:16 +0530 py3: add a b'' prefix in tests/test-fncache.t
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:57:16 +0530] rev 36523
py3: add a b'' prefix in tests/test-fncache.t # skip-blame because it's just b'' prefix Differential Revision: https://phab.mercurial-scm.org/D2517
Thu, 01 Mar 2018 23:54:52 +0530 py3: use pycompat.bytestr() to convert error instances to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:54:52 +0530] rev 36522
py3: use pycompat.bytestr() to convert error instances to bytes Differential Revision: https://phab.mercurial-scm.org/D2516
Thu, 01 Mar 2018 23:52:30 +0530 py3: listify the return value of filter()
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:52:30 +0530] rev 36521
py3: listify the return value of filter() filter() on Python 3 returns a filter object. Differential Revision: https://phab.mercurial-scm.org/D2515
Thu, 01 Mar 2018 23:51:32 +0530 py3: use '%d' instead of '%s' for ints
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:51:32 +0530] rev 36520
py3: use '%d' instead of '%s' for ints Differential Revision: https://phab.mercurial-scm.org/D2514
Thu, 01 Mar 2018 03:56:41 +0530 py3: add 14 new passing tests to whitelist
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 03:56:41 +0530] rev 36519
py3: add 14 new passing tests to whitelist Differential Revision: https://phab.mercurial-scm.org/D2511
Wed, 28 Feb 2018 19:55:25 +0530 py3: use util.forcebytestr to convert str to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 19:55:25 +0530] rev 36518
py3: use util.forcebytestr to convert str to bytes Differential Revision: https://phab.mercurial-scm.org/D2498
Sun, 25 Feb 2018 11:00:53 -0800 sshpeer: factor out code for creating peers from pipes
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 25 Feb 2018 11:00:53 -0800] rev 36517
sshpeer: factor out code for creating peers from pipes An upcoming commit will want to instantiate an SSH peer via an alternate mechanism that doesn't require running a new `ssh` command. To facilitate that, we extract the code for creating a peer from pipes to its own function. Differential Revision: https://phab.mercurial-scm.org/D2391
Wed, 28 Feb 2018 22:25:41 +0530 py3: add b'' prefixes in tests/test-rollback.t
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 22:25:41 +0530] rev 36516
py3: add b'' prefixes in tests/test-rollback.t This makes the test run succesfully on Python 3. There is just a b'' prefix extra in the output. # skip-blame because we added just b'' prefixes Differential Revision: https://phab.mercurial-scm.org/D2510
Wed, 28 Feb 2018 22:14:36 +0530 py3: add b'' prefix in tests/test-revlog-v2.t
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 22:14:36 +0530] rev 36515
py3: add b'' prefix in tests/test-revlog-v2.t After this, the test works on Python 3. There is some extra return value by open().write() I think which needs to be handled. # skip-blame because just b'' prefix Differential Revision: https://phab.mercurial-scm.org/D2509
Wed, 28 Feb 2018 22:10:59 +0530 py3: add b'' prefixes in tests/test-revlog.t
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 22:10:59 +0530] rev 36514
py3: add b'' prefixes in tests/test-revlog.t # skip-blame because just b'' prefixes Differential Revision: https://phab.mercurial-scm.org/D2508
Wed, 28 Feb 2018 22:03:47 +0530 py3: make sure we open the file in bytes mode
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 22:03:47 +0530] rev 36513
py3: make sure we open the file in bytes mode This makes the test pass on Python 3. Differential Revision: https://phab.mercurial-scm.org/D2507
Wed, 28 Feb 2018 22:03:29 +0530 py3: add b'' prefixes in tests/test-revlog-ancestry.py
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 22:03:29 +0530] rev 36512
py3: add b'' prefixes in tests/test-revlog-ancestry.py # skip-blame because just b'' prefixes Differential Revision: https://phab.mercurial-scm.org/D2506
Wed, 28 Feb 2018 21:57:22 +0530 py3: port the markdirver extension in tests/test-resolve.t
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:57:22 +0530] rev 36511
py3: port the markdirver extension in tests/test-resolve.t Differential Revision: https://phab.mercurial-scm.org/D2505
Wed, 28 Feb 2018 21:48:30 +0530 py3: backout changeset 56635c506608 which wrongly added couple of b''
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:48:30 +0530] rev 36510
py3: backout changeset 56635c506608 which wrongly added couple of b'' I am not sure what I was thinking when I added that but while fixing rebase tests, I revisited the file and found that I did wrong. I am sorry for this. Differential Revision: https://phab.mercurial-scm.org/D2504
Wed, 28 Feb 2018 21:45:42 +0530 py3: add a missing b'' in tests/bruterebase.py
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:45:42 +0530] rev 36509
py3: add a missing b'' in tests/bruterebase.py Differential Revision: https://phab.mercurial-scm.org/D2503
Wed, 28 Feb 2018 21:45:15 +0530 py3: use '%d' for integers instead of b'%s'
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:45:15 +0530] rev 36508
py3: use '%d' for integers instead of b'%s' Differential Revision: https://phab.mercurial-scm.org/D2502
Wed, 28 Feb 2018 21:44:28 +0530 py3: make sure we write in mergestate in bytes mode
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:44:28 +0530] rev 36507
py3: make sure we write in mergestate in bytes mode Differential Revision: https://phab.mercurial-scm.org/D2501
Wed, 28 Feb 2018 21:43:35 +0530 py3: add b'' prefixes in tests/test-rebase-scenario-global.t
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:43:35 +0530] rev 36506
py3: add b'' prefixes in tests/test-rebase-scenario-global.t # skip-blame because just b'' prefixes Differential Revision: https://phab.mercurial-scm.org/D2500
Wed, 28 Feb 2018 21:42:37 +0530 py3: replace str() calls with their preferred bytes equivalent
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:42:37 +0530] rev 36505
py3: replace str() calls with their preferred bytes equivalent Differential Revision: https://phab.mercurial-scm.org/D2499
Wed, 28 Feb 2018 19:54:49 +0530 py3: convert error messages to bytes using util.forcebytestr()
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 19:54:49 +0530] rev 36504
py3: convert error messages to bytes using util.forcebytestr() Differential Revision: https://phab.mercurial-scm.org/D2497
Wed, 28 Feb 2018 19:54:10 +0530 py3: slice over bytes or use startswith() to prevent getting ascii values
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 19:54:10 +0530] rev 36503
py3: slice over bytes or use startswith() to prevent getting ascii values Differential Revision: https://phab.mercurial-scm.org/D2496
Wed, 28 Feb 2018 10:38:09 -0800 narrow: drop safehasattr() checks for always-present repo.narrowmatch
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:38:09 -0800] rev 36502
narrow: drop safehasattr() checks for always-present repo.narrowmatch I've added checks for repo.narrowmatch().always() in order to restore some of the fast paths for non-narrow repos. Differential Revision: https://phab.mercurial-scm.org/D2495
Wed, 28 Feb 2018 12:56:01 -0800 narrow: move narrowmatch-related methods to localrepo
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 12:56:01 -0800] rev 36501
narrow: move narrowmatch-related methods to localrepo This patch makes it so localrepo.narrowmatch() and a few more are always available, which will let us simplify the use sites a bit. narrowmatch() will return an always-matcher in non-narrow repos (just like it did when it lived in the narrow extension). Differential Revision: https://phab.mercurial-scm.org/D2494
Tue, 27 Feb 2018 23:05:39 -0800 narrow: remove dependency from narrowspec module to hg module
Martin von Zweigbergk <martinvonz@google.com> [Tue, 27 Feb 2018 23:05:39 -0800] rev 36500
narrow: remove dependency from narrowspec module to hg module Differential Revision: https://phab.mercurial-scm.org/D2493
Wed, 28 Feb 2018 10:32:00 -0800 narrow: reduce depedence on narrowspec.save()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:32:00 -0800] rev 36499
narrow: reduce depedence on narrowspec.save() I think narrowspec should be a simple, low-level module and not depend on the hg module. This prepares for moving that dependency out of narrowspec. Differential Revision: https://phab.mercurial-scm.org/D2492
Wed, 28 Feb 2018 12:55:05 -0800 narrow: always wrap repo
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 12:55:05 -0800] rev 36498
narrow: always wrap repo It's simpler to always wrap the repo. This prepares for moving narrowrepo.narrowmatch() onto localrepo by showing that it's now safe to always wrap the repo (and thus always define narrowmatch() etc.). Note that since narrowmatch() returns an always-matcher (rather than None) in non-narrow repos, this may mean a performance hit when the narrow extension is enabled because it adds a no-op filtering step in various places against the always-matcher. I'll restore some of that soon. Differential Revision: https://phab.mercurial-scm.org/D2491
Wed, 28 Feb 2018 10:29:04 -0800 narrow: consider both local and remote matchers in narrowchangegroup
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:29:04 -0800] rev 36497
narrow: consider both local and remote matchers in narrowchangegroup The existing code that picked one or the other seemed very suspicious. This patch makes us intersect the local matcher with the matcher from the remote, which seems better. It fixes one test case and makes another one that used to crash no longer crash, but instead silently succeed with a push that's lossy, so that remains to be fixed. The real reason for doing this now is that I'm going to move narrowrepo.narrowmatch() onto localrepo and then it will always be defined, which would otherwise break this code. Differential Revision: https://phab.mercurial-scm.org/D2490
Wed, 28 Feb 2018 10:22:54 -0800 narrow: move checking for narrow requirement into _narrowmatch()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:22:54 -0800] rev 36496
narrow: move checking for narrow requirement into _narrowmatch() We want to move narrowmatch() and others into core, so we need to get rid of the dependence on the "narrow_opts" from the closure in narrowrepo.wraprepo(). We can simply check if the narrow requirement is set. I think that seems like an improvement regardless of moving narrowmatch(). Differential Revision: https://phab.mercurial-scm.org/D2489
Wed, 28 Feb 2018 10:55:21 -0800 narrow: move changegroup.supportedoutgoingversions() override to core
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:55:21 -0800] rev 36495
narrow: move changegroup.supportedoutgoingversions() override to core Also document why we need cg3 or higher. Differential Revision: https://phab.mercurial-scm.org/D2488
Wed, 28 Feb 2018 10:21:43 -0800 narrow: move requirement constant to core
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:21:43 -0800] rev 36494
narrow: move requirement constant to core My short-term goal is to move narrowrepo.narrowmatch() onto localrepo and this is a necessary step for that. I put the constant in changegroup.py, unlike REVLOGV2_REQUIREMENT, which is in localrepo.py, since we'll need to access it from the changegroup module eventually. Differential Revision: https://phab.mercurial-scm.org/D2487
Wed, 21 Feb 2018 14:36:42 +0530 remotenames: don't inherit the remotenames class from dict class
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 21 Feb 2018 14:36:42 +0530] rev 36493
remotenames: don't inherit the remotenames class from dict class The remotenames class was moved from hgremotenames extension. The class in hgremotenames extension used to extend dict because updating bookmark was done through a dict-like interface or Sean (smf) wanted it to be that way. But now, we can remove the inheritance from the dict class as updating bookmark is not done using a dict-like interface. Thanks to Martin von Zweigbergk for spotting this. Differential Revision: https://phab.mercurial-scm.org/D2361
Sun, 25 Feb 2018 17:22:25 -0500 run-tests: cache hghave results
Matt Harbison <matt_harbison@yahoo.com> [Sun, 25 Feb 2018 17:22:25 -0500] rev 36492
run-tests: cache hghave results Spawning a process on Windows is expensive. I've got a version of test-lfs-test-server.t locally which prints the http request/responses that totals 819 lines, with 149 conditional lines, 11 #if tests, and 2 test cases. It takes just under 1 minute with this change to run both cases, vs just over 2 minutes without this change. Worse, when I explored adding ui.debug to the test, it takes 13 minutes due to all of the mismatches and retests, vs less than 1 minute with this change. Overall, the difference when running all tests is negligible- 103 minutes with this change, vs 105 without when using -j9. It also looks like an exit value of 2 from `hghave` is treated specially, but there's nothing preventing 2 missing features from also using this value.
Mon, 26 Feb 2018 23:34:29 -0500 run-tests: resume raising an exception when a server fails to start
Matt Harbison <matt_harbison@yahoo.com> [Mon, 26 Feb 2018 23:34:29 -0500] rev 36491
run-tests: resume raising an exception when a server fails to start Prior to 93228b2a1fc0, this exception was raised before the diff could be printed. By raising the exception after printing the diff, the location of the failure can be identified, but it is also easier to locate test runs where this occurs. The test bot maintains a list of failed tests, separate from the wall of diff output.
Tue, 27 Feb 2018 14:49:05 +0530 py3: use print as a function in tests/test-hgrc.t
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:49:05 +0530] rev 36490
py3: use print as a function in tests/test-hgrc.t print was made a function in Python 3. Differential Revision: https://phab.mercurial-scm.org/D2480
Tue, 27 Feb 2018 14:46:35 +0530 py3: use '%d' to convert integers to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:46:35 +0530] rev 36489
py3: use '%d' to convert integers to bytes Differential Revision: https://phab.mercurial-scm.org/D2479
Tue, 27 Feb 2018 14:44:37 +0530 py3: add b'' prefixes in tests/test-extension.t
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:44:37 +0530] rev 36488
py3: add b'' prefixes in tests/test-extension.t We are now close to getting this test pass on Python 3. # skip-blame because just b'' prefixes. Differential Revision: https://phab.mercurial-scm.org/D2478
Tue, 27 Feb 2018 14:42:30 +0530 py3: convert os.devnull to bytes using pycompat.bytestr
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:42:30 +0530] rev 36487
py3: convert os.devnull to bytes using pycompat.bytestr os.devnull returns str on Python 3. Differential Revision: https://phab.mercurial-scm.org/D2477
Tue, 27 Feb 2018 14:41:24 +0530 py3: fix more keyword arguments handling
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:41:24 +0530] rev 36486
py3: fix more keyword arguments handling Differential Revision: https://phab.mercurial-scm.org/D2476
Tue, 27 Feb 2018 14:28:17 +0530 py3: make sure regexes are bytes
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:28:17 +0530] rev 36485
py3: make sure regexes are bytes # skip-blame because we are adding just b'' prefixes Differential Revision: https://phab.mercurial-scm.org/D2475
Tue, 27 Feb 2018 00:43:37 +0530 py3: use pycompat.strurl to convert url to str
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 00:43:37 +0530] rev 36484
py3: use pycompat.strurl to convert url to str Differential Revision: https://phab.mercurial-scm.org/D2474
Mon, 26 Feb 2018 13:34:35 -0800 bookmarks: write bookmarks file deterministically
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 26 Feb 2018 13:34:35 -0800] rev 36483
bookmarks: write bookmarks file deterministically Bookmarks are internally stored as an unsorted dictionary. Let's at least write out the bookmarks file in a deterministic order so it is easier to test, diff, etc. Differential Revision: https://phab.mercurial-scm.org/D2469
Mon, 26 Feb 2018 13:32:03 -0800 phases: write phaseroots deterministically
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 26 Feb 2018 13:32:03 -0800] rev 36482
phases: write phaseroots deterministically self.phaseroots is a list of sets of binary nodes. Let's sort the nodes before writing so the phaseroots file is written out deterministically. Differential Revision: https://phab.mercurial-scm.org/D2468
Sat, 17 Feb 2018 11:19:52 -0700 internals: document bundle2 format
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 17 Feb 2018 11:19:52 -0700] rev 36481
internals: document bundle2 format It seems like a good idea to have thorough documentation of the bundle2 data format, including the format of each part and the capabilities. The added documentation is far from complete. For example, we don't fully capture the semantics of each capability and part. But a start is better than nothing, which was pretty much where we were before. Differential Revision: https://phab.mercurial-scm.org/D2298
Mon, 26 Feb 2018 23:54:40 +0530 py3: convert bytes to str using encoding.strfromlocal
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 23:54:40 +0530] rev 36480
py3: convert bytes to str using encoding.strfromlocal using encoding.strfromlocal because sender is provided from user config or argument. Differential Revision: https://phab.mercurial-scm.org/D2460
Mon, 26 Feb 2018 23:50:30 +0530 py3: use encoding.strtolocal() to convert str to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 23:50:30 +0530] rev 36479
py3: use encoding.strtolocal() to convert str to bytes Differential Revision: https://phab.mercurial-scm.org/D2459
Mon, 26 Feb 2018 16:19:53 +0530 py3: use email.utils module instead of email.Utils
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 16:19:53 +0530] rev 36478
py3: use email.utils module instead of email.Utils On py2: >>> import email >>> import email.utils as eutil >>> email.Utils.parseaddr is eutil.parseaddr True >>> email.Utils.formatdate is eutil.formatdate True email.Utils is not present on Python 3. Differential Revision: https://phab.mercurial-scm.org/D2453
Mon, 26 Feb 2018 17:25:46 +0530 py3: slice over bytes or use .startswith() to prevent getting ascii values
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 17:25:46 +0530] rev 36477
py3: slice over bytes or use .startswith() to prevent getting ascii values Differential Revision: https://phab.mercurial-scm.org/D2457
Mon, 26 Feb 2018 16:23:12 +0530 py3: use '%d' for integers instead of '%s'
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 16:23:12 +0530] rev 36476
py3: use '%d' for integers instead of '%s' Differential Revision: https://phab.mercurial-scm.org/D2455
Sun, 25 Feb 2018 13:24:35 +0900 templatekw: add 'requires' flag to switch to exception-safe interface
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 13:24:35 +0900] rev 36475
templatekw: add 'requires' flag to switch to exception-safe interface The current templatekw interface, f(repo, ctx, templ, **args), is horrible because it's quite easy to encounter TypeError, ValueError, etc. It's also bad for Python 3 porting due to the **kwargs issue. This patch introduces a flag to switch to new f(context, mapping) API seen in templater functions. The requirement spec isn't verified (yet) because context.resource() can gracefully raise a ResourceUnavailable exception, but it's planned to be used as a filter in the help, such as "Revision Keywords" (if 'ctx' in requires), "File Keywords" (if 'fctx' in requires), etc. showauthor() is ported to the new API as an example. 20 more follows.
Sun, 25 Feb 2018 12:50:30 +0900 templater: specialize ResourceUnavailable error so that it can be caught
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 12:50:30 +0900] rev 36474
templater: specialize ResourceUnavailable error so that it can be caught See the next patch how it will be used.
Sun, 25 Feb 2018 12:47:53 +0900 templater: move specialized exception types to top
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 12:47:53 +0900] rev 36473
templater: move specialized exception types to top I'm going to add one more exception type.
Sun, 25 Feb 2018 14:14:33 +0900 templatekw: minimize resource dependency of {envvars} and {termwidth}
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 14:14:33 +0900] rev 36472
templatekw: minimize resource dependency of {envvars} and {termwidth} These keywords can be evaluated without a repo.
Sun, 25 Feb 2018 14:12:34 +0900 templatekw: simply override {graphwidth} function by mapping variable
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 14:12:34 +0900] rev 36471
templatekw: simply override {graphwidth} function by mapping variable
Sun, 25 Feb 2018 16:40:41 +0900 remotenames: drop redundant templatekw names from help text
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:40:41 +0900] rev 36470
remotenames: drop redundant templatekw names from help text Also removed the second "List of" phrase, which is obvious from the type "List of strings."
Sun, 25 Feb 2018 13:42:51 +0900 narrow: drop redundant templatekw/revset names from help text
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 13:42:51 +0900] rev 36469
narrow: drop redundant templatekw/revset names from help text ":<name>:" is automatically added by the registrar.
Sun, 25 Feb 2018 21:04:12 -0500 run-tests: don't mask errors when a server fails to start
Matt Harbison <matt_harbison@yahoo.com> [Sun, 25 Feb 2018 21:04:12 -0500] rev 36468
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.
Mon, 26 Feb 2018 17:27:08 +0530 py3: use bytes instead of str in isinstance
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 17:27:08 +0530] rev 36467
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
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 36466
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 36465
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 36464
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 36463
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 36462
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 36461
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 36460
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 36459
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 36458
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 36457
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 36456
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 36455
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 36454
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 36453
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 36452
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 36451
subrepo: use util.forcebytestr() instead of str() on exception Differential Revision: https://phab.mercurial-scm.org/D2437
(0) -30000 -10000 -3000 -1000 -300 -100 -96 +96 +100 +300 +1000 +3000 +10000 tip