Fri, 09 Mar 2018 14:39:35 -0800 xdiff: remove unused xpp and xecfg parameters
Jun Wu <quark@fb.com> [Fri, 09 Mar 2018 14:39:35 -0800] rev 36832
xdiff: remove unused xpp and xecfg parameters They are unused. Thus removed. Differential Revision: https://phab.mercurial-scm.org/D2764
Fri, 09 Mar 2018 14:37:55 -0800 xdiff: remove unused flags parameter
Jun Wu <quark@fb.com> [Fri, 09 Mar 2018 14:37:55 -0800] rev 36831
xdiff: remove unused flags parameter After D2683, the flags parameter in some functions is no longer needed. Thus removed. Differential Revision: https://phab.mercurial-scm.org/D2763
Fri, 09 Mar 2018 14:24:27 -0800 xdiff: replace {unsigned ,}long with {u,}int64_t
Jun Wu <quark@fb.com> [Fri, 09 Mar 2018 14:24:27 -0800] rev 36830
xdiff: replace {unsigned ,}long with {u,}int64_t MSVC treats "long" as 4-byte. That could cause overflows since the xdiff code uses "long" in places where "size_t" or "ssize_t" should be used. Let's use explicit 8 byte integers to avoid FWIW git avoids that overflow by limiting diff size to 1GB [1]. After examining the code, I think the remaining risk (the use of "int") is low since "int" is only used for return values and hash table size. Although a wrong hash table size would not affect the correctness of the code, but that could make the code extremely slow. The next patch will change hash table size to 8-byte integer so the 1GB limit is unlikely needed. This patch was done by using `sed`. [1]: https://github.com/git/git/commit/dcd1742e56ebb944c4ff62346da4548e1e3be67 Differential Revision: https://phab.mercurial-scm.org/D2762
Sun, 04 Mar 2018 11:30:16 -0800 xdiff: add comments for fields in xdfile_t
Jun Wu <quark@fb.com> [Sun, 04 Mar 2018 11:30:16 -0800] rev 36829
xdiff: add comments for fields in xdfile_t This makes the related code easier to understand. Differential Revision: https://phab.mercurial-scm.org/D2685
Wed, 07 Mar 2018 14:45:31 -0800 xdiff: add a preprocessing step that trims files
Jun Wu <quark@fb.com> [Wed, 07 Mar 2018 14:45:31 -0800] rev 36828
xdiff: add a preprocessing step that trims files xdiff has a `xdl_trim_ends` step that removes common lines, unmatchable lines. That is in theory good, but happens too late - after splitting, hashing, and adjusting the hash values so they are unique. Those splitting, hashing and adjusting hash values steps could have noticeable overhead. Diffing two large files with minor (one-line-ish) changes are not uncommon. In that case, the raw performance of those preparation steps seriously matter. Even allocating an O(N) array and storing line offsets to it is expensive. Therefore my previous attempts [1] [2] cannot be good enough since they do not remove the O(N) array assignment. This patch adds a preprocessing step - `xdl_trim_files` that runs before other preprocessing steps. It counts common prefix and suffix and lines in them (needed for displaying line number), without doing anything else. Testing with a crafted large (169MB) file, with minor change: ``` open('a','w').write(''.join('%s\n' % (i % 100000) for i in xrange(30000000) if i != 6000000)) open('b','w').write(''.join('%s\n' % (i % 100000) for i in xrange(30000000) if i != 6003000)) ``` Running xdiff by a simple binary [3], this patch improves the xdiff perf by more than 10x for the above case: ``` # xdiff before this patch 2.41s user 1.13s system 98% cpu 3.592 total # xdiff after this patch 0.14s user 0.16s system 98% cpu 0.309 total # gnu diffutils 0.12s user 0.15s system 98% cpu 0.272 total # (best of 20 runs) ``` It's still slightly slower than GNU diffutils. But it's pretty close now. Testing with real repo data: For the whole repo, this patch makes xdiff 25% faster: ``` # hg perfbdiff --count 100 --alldata -c d334afc585e2 --blocks [--xdiff] # xdiff, after ! wall 0.058861 comb 0.050000 user 0.050000 sys 0.000000 (best of 100) # xdiff, before ! wall 0.077816 comb 0.080000 user 0.080000 sys 0.000000 (best of 91) # bdiff ! wall 0.117473 comb 0.120000 user 0.120000 sys 0.000000 (best of 67) ``` For files that are long (ex. commands.py), the speedup is more than 3x, very significant: ``` # hg perfbdiff --count 3000 --blocks commands.py.i 1 [--xdiff] # xdiff, after ! wall 0.690583 comb 0.690000 user 0.690000 sys 0.000000 (best of 12) # xdiff, before ! wall 2.240361 comb 2.210000 user 2.210000 sys 0.000000 (best of 4) # bdiff ! wall 2.469852 comb 2.440000 user 2.440000 sys 0.000000 (best of 4) ``` [1]: https://phab.mercurial-scm.org/D2631 [2]: https://phab.mercurial-scm.org/D2634 [3]: ``` // Code to run xdiff from command line. No proper error handling. #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include "mercurial/thirdparty/xdiff/xdiff.h" #define ensure(x) if (!(x)) exit(255); mmfile_t readfile(const char *path) { struct stat st; int fd = open(path, O_RDONLY); fstat(fd, &st); mmfile_t file = { malloc(st.st_size), st.st_size }; ensure(read(fd, file.ptr, st.st_size) == st.st_size); close(fd); return file; } int main(int argc, char const *argv[]) { mmfile_t a = readfile(argv[1]), b = readfile(argv[2]); xpparam_t xpp = {0}; xdemitconf_t xecfg = {0}; xdemitcb_t ecb = {0}; xdl_diff(&a, &b, &xpp, &xecfg, &ecb); return 0; } ``` Differential Revision: https://phab.mercurial-scm.org/D2686
Fri, 09 Mar 2018 14:30:15 -0800 transaction: add a name and a __repr__ implementation (API)
Martin von Zweigbergk <martinvonz@google.com> [Fri, 09 Mar 2018 14:30:15 -0800] rev 36827
transaction: add a name and a __repr__ implementation (API) This has been useful for me for debugging. Differential Revision: https://phab.mercurial-scm.org/D2758
Fri, 09 Mar 2018 16:10:55 +0100 phabricator: update doc string for deprecated token argument
Joerg Sonnenberger <joerg@bec.de> [Fri, 09 Mar 2018 16:10:55 +0100] rev 36826
phabricator: update doc string for deprecated token argument Differential Revision: https://phab.mercurial-scm.org/D2755
Fri, 09 Mar 2018 16:09:27 +0100 phabricator: print deprecation warning only once
Joerg Sonnenberger <joerg@bec.de> [Fri, 09 Mar 2018 16:09:27 +0100] rev 36825
phabricator: print deprecation warning only once Differential Revision: https://phab.mercurial-scm.org/D2754
Thu, 08 Mar 2018 21:17:26 -0800 tests: add a few tests involving --collapse and rebase.singletransaction=1
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Mar 2018 21:17:26 -0800] rev 36824
tests: add a few tests involving --collapse and rebase.singletransaction=1 I'm about to change the rebase code quite a bit and this was poorly tested. Differential Revision: https://phab.mercurial-scm.org/D2757
Thu, 08 Mar 2018 20:55:51 -0800 tests: simplify test-rebase-transaction.t
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Mar 2018 20:55:51 -0800] rev 36823
tests: simplify test-rebase-transaction.t The file was extracted from test-rebase-base.t in 8cef8f7d51d0 (test-rebase-base: clarify it is about the "--base" flag, 2017-10-05). This patch follows up that and clarifies the new file's purpose and simplifies it a bit. Differential Revision: https://phab.mercurial-scm.org/D2756
Thu, 08 Mar 2018 16:22:25 -0800 hgweb: parse and store HTTP request headers
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 16:22:25 -0800] rev 36822
hgweb: parse and store HTTP request headers WSGI transmits HTTP request headers as HTTP_* environment variables. We teach our parser about these and hook up a dict-like data structure that supports case insensitive header manipulation. Differential Revision: https://phab.mercurial-scm.org/D2742
Thu, 08 Mar 2018 16:43:32 -0800 wireprotoserver: remove broken optimization for non-httplib client
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 16:43:32 -0800] rev 36821
wireprotoserver: remove broken optimization for non-httplib client There was an experimental non-httplib client in core for several years. It was removed a week or so ago. We kept the optimization for this client in the server code. I'm not sure if that was intended or not. But it doesn't matter: the code was wrong. Because the code was accessing a WSGI environment dict, it needed to access the HTTP_X_HGHTTP2 key to actually read the HTTP header. So the code deleted by this commit wasn't actually doing anything meaningful. Doh. Differential Revision: https://phab.mercurial-scm.org/D2741
Thu, 08 Mar 2018 15:58:52 -0800 wireprotoserver: move all wire protocol handling logic out of hgweb
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 15:58:52 -0800] rev 36820
wireprotoserver: move all wire protocol handling logic out of hgweb Previous patches from several days ago worked to isolate processing of HTTP wire protocol requests to wireprotoserver. We still had a little logic in hgweb. If feels like the right time to finish the job. This commit moves WSGI request servicing from hgweb to wireprotoserver. The ugly dict holding the parsed request is no more. I think the new code is cleaner. As part of this, we now process wire protocol requests before the block to obtain the "query" variable. This makes it clear that this wonky "query" variable is not used by the wire protocol. The wonkiest part about this code is the HTTP 404. I'm actually not sure what all is going on here. It looks like the code is trying to prevent URL with path components that specify a command from not working. That part I grok. What I don't grok is why we need to send a 404. I would think it would be OK to no-op and let another handler try to service the request. But if we do this, we get some subrepo test failures. So it looks like something is expecting the HTTP 404 and reacting to it in a specific way. It /might/ be possible to change the behavior here. But it isn't something I'm comfortable doing because I don't understand the problem space. Differential Revision: https://phab.mercurial-scm.org/D2740
Thu, 08 Mar 2018 15:37:05 -0800 hgweb: use parsed request to construct query parameters
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 15:37:05 -0800] rev 36819
hgweb: use parsed request to construct query parameters The way hgweb routes requests is kind of bonkers. If PATH_INFO is set, we take the URL path after the repository. Otherwise, we take the first part of the query string before "&" and the part before ";" in that. We then kinda/sorta treat this as a path and route based on that. This commit ports that code to use the parsed request object. This required a new attribute on the parsed request to indicate whether there is any PATH_INFO. The new code still feels a bit convoluted for my liking. But we'll need to rewrite more of the code before a better solution becomes apparant. This code feels strictly better since we're no longer doing low-level WSGI manipulation during routing. Differential Revision: https://phab.mercurial-scm.org/D2739
Thu, 08 Mar 2018 11:33:33 -0800 hgweb: only recognize wire protocol commands from query string (BC)
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 11:33:33 -0800] rev 36818
hgweb: only recognize wire protocol commands from query string (BC) Previously, we attempted to parse the wire protocol command from `req.form`. Data could have come from the query string or POST form data. The wire protocol states that the command must be declared in the query string. And AFAICT all Mercurial releases from at least 1.0 send the command in the query string. So let's actual require this behavior. This is technically BC. But I'm not sure how anyone in the wild would encounter this. POST has historically been used for sending bundle data. So there's no opportunity to encode arguments there. And the experimental HTTP POST args also takes over the body. So the only way someone would be impacted by this is if they wrote a custom client that both used POST for everything and sent arguments via the HTTP body. I don't believe such a client exists. .. bc:: The HTTP wire protocol server no longer accepts the ``cmd`` argument to control which command to run via HTTP POST bodies. The ``cmd`` argument must be specified on the URL query string. Differential Revision: https://phab.mercurial-scm.org/D2738
Thu, 08 Mar 2018 11:21:46 -0800 hgweb: teach WSGI parser about query strings
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 11:21:46 -0800] rev 36817
hgweb: teach WSGI parser about query strings Currently, req.form uses cgi.parse() to populate form data. Depending on the request, form data can come from POST multipart/form-data, application/x-www-form-urlencoded, or the URL query string. Putting all these things into one data structure makes it difficult to reason about how exactly parameters got to the request. It can lead to wonkiness such as pulling parameters from both the URL and POST data. This commit teaches our WSGI request parser about argument data in query strings. We populate fields containing the query string data and only the query string data so it can't be confused with POST data. Differential Revision: https://phab.mercurial-scm.org/D2737
Thu, 08 Mar 2018 15:08:20 -0800 hgweb: use the parsed application path directly
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 15:08:20 -0800] rev 36816
hgweb: use the parsed application path directly Previously, we assigned a custom system string with a trailing slash to wsgirequest.url. The addition of the trailing slash felt arbitrary and seems to go against how things typically work in WSGI. We also want our URLs to be bytes, not system strings. And, assigning a custom attribute to wsgirequest felt wrong. This commit fixes all those things by removing the trailing slash from the app path, changing consumers to use that variable and to use it without a trailing slash, and removing the custom attribute from wsgirequest. We preserve the trailing slash on {url}. Also, makebreadcrumb strips the trailing slash. So no change to it was needed. Differential Revision: https://phab.mercurial-scm.org/D2736
Thu, 08 Mar 2018 12:59:25 -0800 hgweb: use computed base URL from parsed request
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 12:59:25 -0800] rev 36815
hgweb: use computed base URL from parsed request Let's not reinvent URL construction in a function that runs the templater. Differential Revision: https://phab.mercurial-scm.org/D2735
Sat, 10 Mar 2018 10:20:51 -0800 hgweb: parse WSGI request into a data structure
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 10 Mar 2018 10:20:51 -0800] rev 36814
hgweb: parse WSGI request into a data structure Currently, our WSGI applications (hgweb_mod and hgwebdir_mod) process the raw WSGI request instance themselves. This means they have to talk in terms of system strings. And they need to know details about what's in the WSGI request. And in the case of hgweb_mod, it is doing some very funky things with URL parsing to impact dispatching. The code is difficult to read and maintain. This commit introduces parsing of the WSGI request into a higher-level and easier-to-reason-about data structure. To prove it works, we hook it up to hgweb_mod and use it for populating the relative URL on the request instance. We hold off on using it in more places because the logic in hgweb_mod is crazy and I don't want to involve those changes with review of the parsing code. The URL construction code has variations that use the HTTP: Host header (the canonical WSGI way of reconstructing the URL) and with the use of SERVER_NAME. We need to differentiate because hgweb is currently using SERVER_NAME for URL construction. Differential Revision: https://phab.mercurial-scm.org/D2734
Thu, 08 Mar 2018 15:14:32 -0800 hgweb: always use "?" when writing session vars
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 15:14:32 -0800] rev 36813
hgweb: always use "?" when writing session vars This code resolves a string to insert in URLs as part of a query string. Essentially, it resolves the {sessionvars} template keyword, which is used by hgweb templates to build a URL as a string. The whole approach here feels wrong because there's no way of knowing when this code runs how the final URL will look. There could be additional URL fragments added before this template keyword that add a query string component. Furthermore, I don't think there's *any* for req.url to have a query string. That's because the code that populates this variable only takes SCRIPT_NAME and REPO_NAME into account. The "?" character it is searching for would only be added if some code attempted to add QUERY_STRING to the URL. Hacking the code up to raise if "?" is present in the URL yields a clean test suite run. I'm not sure if we broke this code or if it has always been broken. Anyway, this commit removes support for emitting "&" as the first character in {sessionvars} and makes it always emit "?", which is what it was always doing before AFAICT. Differential Revision: https://phab.mercurial-scm.org/D2733
Thu, 08 Mar 2018 15:15:59 -0800 hgweb: rename req to wsgireq
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 15:15:59 -0800] rev 36812
hgweb: rename req to wsgireq We will soon introduce a parsed WSGI request object so we don't have to concern ourselves with low-level WSGI matters. Prepare for multiple request objects by renaming the existing one so it is clear it deals with WSGI. We also remove a symbol import to avoid even more naming confusion. # no-check-commit because of some new foo_bar naming that's required Differential Revision: https://phab.mercurial-scm.org/D2732
Thu, 08 Mar 2018 09:44:27 -0800 hgweb: validate WSGI environment dict
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 09:44:27 -0800] rev 36811
hgweb: validate WSGI environment dict The wsgiref.validate module contains useful functions for validating that various WSGI data structures are proper. This commit adds validation of the environment dict to our built-in HTTP server, which turns an HTTP request into an environment dict. The check discovered that we weren't always setting QUERY_STRING, which would cause the cgi module to fall back to sys.argv. So we change things to always set QUERY_STRING. The check passes on Python 2 and 3. Differential Revision: https://phab.mercurial-scm.org/D2731
Thu, 08 Mar 2018 09:26:51 -0800 hgweb: ensure all wsgi environment values are str
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 09:26:51 -0800] rev 36810
hgweb: ensure all wsgi environment values are str Previously, we had a few entries that were bytes on Python 3. PEP-0333 states that all entries must be the native str type (bytes on Python 2, str on Python 3). This required a number of changes to hgweb_mod to unbreak things on Python 3. I suspect there still may be some regressions. I'm going to introduce a data structure that represents a parsed WSGI request in upcoming commits. This will hold bytes and will allow us to stop using raw literals throughout the WSGI code. Differential Revision: https://phab.mercurial-scm.org/D2730
Wed, 07 Mar 2018 16:18:52 -0800 wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Mar 2018 16:18:52 -0800] rev 36809
wireproto: formalize permissions checking as part of protocol interface Per the inline comment desiring to formalize permissions checking in the protocol interface, we do that. I'm not convinced this is the best way to go about things. I would love for there to e.g. be a better exception for denoting permissions problems. But it does feel strictly better than snipping attributes on the proto instance. Differential Revision: https://phab.mercurial-scm.org/D2719
Wed, 07 Mar 2018 16:02:24 -0800 wireproto: declare permissions requirements in @wireprotocommand (API)
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Mar 2018 16:02:24 -0800] rev 36808
wireproto: declare permissions requirements in @wireprotocommand (API) With the security patches from 4.5.2 merged into default, we now have a per-command attribute defining what permissions are needed to run that command. We now have a richer @wireprotocommand that can be extended to record additional command metadata. So we port the permissions mechanism to be based on @wireprotocommand. .. api:: hgweb_mod.perms and wireproto.permissions have been removed. Wire protocol commands should declare their required permissions in the @wireprotocommand decorator. Differential Revision: https://phab.mercurial-scm.org/D2718
Tue, 06 Mar 2018 15:08:33 -0800 wireprotoserver: check permissions in main dispatch function
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 06 Mar 2018 15:08:33 -0800] rev 36807
wireprotoserver: check permissions in main dispatch function The permissions checking code merged from stable is out of place in the refactored hgweb_mod module. This commit moves the main call to wireprotoserver. We still have some lingering code in hgweb_mod. This will get addressed later. Differential Revision: https://phab.mercurial-scm.org/D2717
Tue, 06 Mar 2018 15:02:53 -0800 wireprotoserver: check if command available before calling it
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 06 Mar 2018 15:02:53 -0800] rev 36806
wireprotoserver: check if command available before calling it The previous behavior was just plain wrong. I have no clue how it landed. My guess is a merge conflict resolution gone wrong on my end a few weeks ago. Differential Revision: https://phab.mercurial-scm.org/D2716
Tue, 06 Mar 2018 02:43:17 -0600 py3: drop encoding.strio()
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:43:17 -0600] rev 36805
py3: drop encoding.strio() Its buffered nature makes TextIOWrapper unsuitable for temporarily wrapping bytes I/O.
Tue, 06 Mar 2018 02:42:37 -0600 ui: adjust Windows workaround to new _readline() code
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:42:37 -0600] rev 36804
ui: adjust Windows workaround to new _readline() code It's only needed when rawinput() is called. Also made it Py3 compatible.
Tue, 06 Mar 2018 02:38:53 -0600 ui: do not use rawinput() when we have to replace sys.stdin/stdout
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:38:53 -0600] rev 36803
ui: do not use rawinput() when we have to replace sys.stdin/stdout See the inline comment for why. The current Python3 hack doesn't work if more than one user inputs are expected because TextIOWrapper fills its internal buffer at the first read() request. Maybe we could write an unbuffered TextIOWrapper, but I don't want to make things more complicated. Instead, this patch reinvents raw_input(' ') of no readline support.
Tue, 06 Mar 2018 02:32:26 -0600 ui: do not try readline support if fin/fout aren't standard streams
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:32:26 -0600] rev 36802
ui: do not try readline support if fin/fout aren't standard streams It's unlikely for a non-stdio stream to be a tty. Minimizing readline support makes it much simpler to work around the unicode input() function of Python 3. This also works on chg which duplicates client's tty to stdio fds.
Tue, 06 Mar 2018 02:28:59 -0600 util: add public isstdin/isstdout() functions
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:28:59 -0600] rev 36801
util: add public isstdin/isstdout() functions
Tue, 06 Mar 2018 03:05:49 -0600 ui: add debug commands to test interactive prompt
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 03:05:49 -0600] rev 36800
ui: add debug commands to test interactive prompt Interactive operations aren't easily covered by tests. So let's add commands to test them manually.
Tue, 06 Mar 2018 02:14:11 -0600 ui: inline util.bytesinput() into ui._readline()
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:14:11 -0600] rev 36799
ui: inline util.bytesinput() into ui._readline() Prepares for rework of Python 3 support, which is currently broken due to read-ahead buffer of TextIOWrapper.
Tue, 06 Mar 2018 02:05:25 -0600 hgk: stop using util.bytesinput() to read a single line from stdin
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:05:25 -0600] rev 36798
hgk: stop using util.bytesinput() to read a single line from stdin Appears that the stdio here is an IPC channel between hg and hgk (tk) processes, which shouldn't need a fancy readline support.
Mon, 29 Aug 2016 10:42:58 -0400 bookmarks: test for exchanging long bookmark names (issue5165)
Augie Fackler <augie@google.com> [Mon, 29 Aug 2016 10:42:58 -0400] rev 36797
bookmarks: test for exchanging long bookmark names (issue5165) As far as I can tell a test for a long bookmark name never actually got added when this was fixed. Let's document that a 300 byte bookmark is something we're supporting (this patch started out life over a year ago as a way for me to validate the problem, and I recently found it.) I think the nonzero exits from the push operations are only because no new changesets get exchanged. Please correct me if I'm wrong on that. :) Differential Revision: https://phab.mercurial-scm.org/D2727
Sun, 04 Mar 2018 11:46:03 -0500 phabricator: follow-up phab auth improvements with backwards compat mode
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 11:46:03 -0500] rev 36796
phabricator: follow-up phab auth improvements with backwards compat mode We'll rip this out before we ship 4.6, but this gives people a window to migrate. Differential Revision: https://phab.mercurial-scm.org/D2703
Sat, 20 Jan 2018 02:41:10 -0700 phabricator: specify API tokens per host, rather than per repo
Tom Prince <mozilla@hocat.ca> [Sat, 20 Jan 2018 02:41:10 -0700] rev 36795
phabricator: specify API tokens per host, rather than per repo Differential Revision: https://phab.mercurial-scm.org/D1919
Sun, 04 Mar 2018 18:47:07 -0500 py3: drop b'' from generate-working-copy-states.py output
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 18:47:07 -0500] rev 36794
py3: drop b'' from generate-working-copy-states.py output I could make everything bytes, but decoding filename seemed easier and we don't have to worry about non-ascii filenames here.
Sun, 04 Mar 2018 18:41:09 -0500 py3: make test-commit-multiple.t byte-safe
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 18:41:09 -0500] rev 36793
py3: make test-commit-multiple.t byte-safe
Sun, 04 Mar 2018 18:34:46 -0500 py3: fix type of default username
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 18:34:46 -0500] rev 36792
py3: fix type of default username
Sun, 04 Mar 2018 18:21:16 -0500 py3: read/write plain lock file in binary mode
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 18:21:16 -0500] rev 36791
py3: read/write plain lock file in binary mode A lock file shouldn't contain '\n', so this isn't a BC.
Mon, 05 Mar 2018 12:31:08 -0500 util: stop calling os.stat_float_times()
Augie Fackler <augie@google.com> [Mon, 05 Mar 2018 12:31:08 -0500] rev 36790
util: stop calling os.stat_float_times() It had Python-wide side effects, and it disappears in 3.7.0. As of this change, we're mostly working on 3.7.0b2. There are a few worrying failures, mostly around regular expressions, but we'll have to tackle those separately. Differential Revision: https://phab.mercurial-scm.org/D2697
Mon, 05 Mar 2018 12:30:20 -0500 cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com> [Mon, 05 Mar 2018 12:30:20 -0500] rev 36789
cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime The latter is floating point by default, and we've been doing os.stat_float_times(False). Unfortunately, os.stat_float_times was removed between Python 3.7.0a1 and 3.7.0b2, so we have to stop using it. Differential Revision: https://phab.mercurial-scm.org/D2696
Mon, 05 Mar 2018 15:07:32 -0500 osutil: implement minimal __getitem__ compatibility on our custom listdir type
Augie Fackler <augie@google.com> [Mon, 05 Mar 2018 15:07:32 -0500] rev 36788
osutil: implement minimal __getitem__ compatibility on our custom listdir type We previously declined to do this, but the removal of the deprecated os.stat_float_times() method in Python 3.7 forces our hand. Differential Revision: https://phab.mercurial-scm.org/D2695
Sun, 04 Mar 2018 21:14:24 -0500 hgweb: adapt to socket._fileobject changes in Python 3
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 21:14:24 -0500] rev 36787
hgweb: adapt to socket._fileobject changes in Python 3 Differential Revision: https://phab.mercurial-scm.org/D2688
Sun, 04 Mar 2018 16:20:24 -0500 debugcommands: fix some %r output with bytestr() wrappers
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:20:24 -0500] rev 36786
debugcommands: fix some %r output with bytestr() wrappers Almost fixes test-merge-tools.t. I think the remaining failure there is due to some overspecified tempfile names. Differential Revision: https://phab.mercurial-scm.org/D2675
Wed, 07 Mar 2018 11:00:17 -0800 tests: add test for issue 5494 but with --collapse
Martin von Zweigbergk <martinvonz@google.com> [Wed, 07 Mar 2018 11:00:17 -0800] rev 36785
tests: add test for issue 5494 but with --collapse This was not fixed, so the test case currently demonstrates the breakage. Differential Revision: https://phab.mercurial-scm.org/D2714
Wed, 07 Mar 2018 10:55:57 -0800 tests: .hg/merge is a directory, so use `test -d`
Martin von Zweigbergk <martinvonz@google.com> [Wed, 07 Mar 2018 10:55:57 -0800] rev 36784
tests: .hg/merge is a directory, so use `test -d` This part of test-rebase-interrupts.t would have passed before the fix in a580b2d65ded (rebase: make sure merge state is cleaned up for no-op rebases (issue5494), 2017-05-18). Differential Revision: https://phab.mercurial-scm.org/D2713
Tue, 06 Mar 2018 14:29:20 -0800 rebase: only store collapse message once
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Mar 2018 14:29:20 -0800] rev 36783
rebase: only store collapse message once The message is determined by the user passing --message or --log when the rebase is started. There's no need to write it to a file for each rebased commit; writing it once at the start of the rebase is enough. Differential Revision: https://phab.mercurial-scm.org/D2712
Tue, 06 Mar 2018 09:39:24 -0800 rebase: collapse two nested if-conditions
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Mar 2018 09:39:24 -0800] rev 36782
rebase: collapse two nested if-conditions Also change the order since it feel to me like it's more about --collapse than it is about --keep. Differential Revision: https://phab.mercurial-scm.org/D2711
Thu, 01 Mar 2018 20:12:25 -0800 rebase: reduce scope of "dsguard" variables a bit
Martin von Zweigbergk <martinvonz@google.com> [Thu, 01 Mar 2018 20:12:25 -0800] rev 36781
rebase: reduce scope of "dsguard" variables a bit Differential Revision: https://phab.mercurial-scm.org/D2710
Wed, 07 Mar 2018 09:46:53 -0800 rebase: remove unused argument "state" from rebasenode()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 07 Mar 2018 09:46:53 -0800] rev 36780
rebase: remove unused argument "state" from rebasenode() Differential Revision: https://phab.mercurial-scm.org/D2709
Wed, 07 Mar 2018 10:31:01 -0800 rebase: delete obsolete internal "keepopen" option
Martin von Zweigbergk <martinvonz@google.com> [Wed, 07 Mar 2018 10:31:01 -0800] rev 36779
rebase: delete obsolete internal "keepopen" option The option was apparently introduced for use by the "pbranch" extension, see f2558a8228be (rebase: add option to not commit after a collapsing, 2010-02-07). However, it doesn't seem like it was ever used by that extension (according to `hg grep` in a clone of https://bitbucket.org/parren/hg-pbranch/), so let's delete it. Differential Revision: https://phab.mercurial-scm.org/D2708
Sun, 04 Mar 2018 00:25:58 +0530 releasenotes: allow notes for multiple directives in a single changeset
Rishabh Madan <rishabhmadan96@gmail.com> [Sun, 04 Mar 2018 00:25:58 +0530] rev 36778
releasenotes: allow notes for multiple directives in a single changeset This problem was caught in da91e7309daf8ffc51bf3e6f4b2d8a16ef5af95a. This patch just makes sure there is no warning when we encounter such a case. Differential Revision: https://phab.mercurial-scm.org/D2254
Sun, 04 Mar 2018 00:15:35 +0530 releasenotes: mention changeset with warning and abort
Rishabh Madan <rishabhmadan96@gmail.com> [Sun, 04 Mar 2018 00:15:35 +0530] rev 36777
releasenotes: mention changeset with warning and abort Output the changeset hash with the warning/abort message just to know where things messed up. Differential Revision: https://phab.mercurial-scm.org/D2253
Sat, 03 Mar 2018 23:47:22 +0530 releasenotes: replace abort with warning while parsing (issue5775)
Rishabh Madan <rishabhmadan96@gmail.com> [Sat, 03 Mar 2018 23:47:22 +0530] rev 36776
releasenotes: replace abort with warning while parsing (issue5775) During the 4.5 development cycle, the extension broke on two different changesets. This fixes the issue by ensuring that it just throws a warning when it encounters unexpected behaviour, instead of aborting. Differential Revision: https://phab.mercurial-scm.org/D2255
Wed, 07 Mar 2018 09:07:34 +1100 archival: fileit should not use atomictemp, causes performance regression
Vincent Parrett <vincent@finalbuilder.com> [Wed, 07 Mar 2018 09:07:34 +1100] rev 36775
archival: fileit should not use atomictemp, causes performance regression Differential Revision: https://phab.mercurial-scm.org/D2704
Sat, 03 Mar 2018 18:55:43 -0500 perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 18:55:43 -0500] rev 36774
perf: teach perfbdiff to call blocks() and to use xdiff Differential Revision: https://phab.mercurial-scm.org/D2624
Tue, 06 Mar 2018 19:31:17 -0800 fuzz: fix xdiff build
Jun Wu <quark@fb.com> [Tue, 06 Mar 2018 19:31:17 -0800] rev 36773
fuzz: fix xdiff build Recent xdiff code cleanups removed some files and changed some structures. Update fuzz code. Differential Revision: https://phab.mercurial-scm.org/D2707
Tue, 06 Mar 2018 18:51:11 -0800 xdiff: remove xmerge related logic
Jun Wu <quark@fb.com> [Tue, 06 Mar 2018 18:51:11 -0800] rev 36772
xdiff: remove xmerge related logic hg has its own merge algorithm with flexible config options. Differential Revision: https://phab.mercurial-scm.org/D2706
Tue, 06 Mar 2018 18:41:08 -0800 xdiff: remove xemit related logic
Jun Wu <quark@fb.com> [Tue, 06 Mar 2018 18:41:08 -0800] rev 36771
xdiff: remove xemit related logic xemit handles "diff formatting and output" with options like context lines, whether show function names, etc. That is handled more cleanly at a higher level in hg. Removing context line parameters would also make the trimming logic (D2686) cleaner and more confident. See [1]. [1]: https://github.com/git/git/commit/d2f82950a9226ae1102a7a97f03440a4bf8c6c09 Differential Revision: https://phab.mercurial-scm.org/D2705
Sun, 04 Mar 2018 00:17:49 -0800 xdiff: remove unused structure, functions, and constants
Jun Wu <quark@fb.com> [Sun, 04 Mar 2018 00:17:49 -0800] rev 36770
xdiff: remove unused structure, functions, and constants `bdiffparam_t` is unused. `xdl_fall_back_diff` is no longer used after D2573. `XDL_MMB_READONLY`, `XDL_MMF_ATOMIC` are unused. `XDL_BDOP*` are unused since there is no xdiff binary diff algorithm. `anchors` feature is not used. It's also relatively new in git. Differential Revision: https://phab.mercurial-scm.org/D2684
Sun, 04 Mar 2018 00:07:04 -0800 xdiff: remove whitespace related feature
Jun Wu <quark@fb.com> [Sun, 04 Mar 2018 00:07:04 -0800] rev 36769
xdiff: remove whitespace related feature In Mercurial, whitespace related handling are done at a higher level than the low-level diff algorithm so "ignore spaces". So it's not used by mdiff. Some of the upcoming optimizations would be more difficult with whitespace related features kept. So let's remove them. Differential Revision: https://phab.mercurial-scm.org/D2683
Tue, 06 Mar 2018 14:32:14 -0800 merge with stable
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 06 Mar 2018 14:32:14 -0800] rev 36768
merge with stable There were a handful of merge conflicts in the wire protocol code due to significant refactoring in default. When resolving the conflicts, I tried to produce the minimal number of changes to make the incoming security patches work with the new code. I will send some follow-up commits to get the security patches better integrated into default.
Sun, 04 Mar 2018 21:16:36 -0500 sslutil: some more forcebytes() on some exception messages
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 21:16:36 -0500] rev 36767
sslutil: some more forcebytes() on some exception messages At this point, test-https.t no longer dumps tracebacks everywhere. Instead, we get some results that look like we're not adequately finding things in hg's configuration, which should be manageable (if somewhat annoying to find and fix.) Differential Revision: https://phab.mercurial-scm.org/D2690
Sun, 04 Mar 2018 21:15:37 -0500 sslutil: sslcontext needs the cipher name as a sysstr
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 21:15:37 -0500] rev 36766
sslutil: sslcontext needs the cipher name as a sysstr Differential Revision: https://phab.mercurial-scm.org/D2689
Sun, 04 Mar 2018 18:03:55 -0500 sslutil: lots of unicode/bytes cleanup
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 18:03:55 -0500] rev 36765
sslutil: lots of unicode/bytes cleanup In general, we handle hostnames as bytes, except where Python forces them to be unicodes. This fixes all the tracebacks I was seeing in test-https.t, but there's still some ECONNRESET weirdness that I can't hunt down... Differential Revision: https://phab.mercurial-scm.org/D2687
Mon, 05 Mar 2018 20:22:34 -0500 debugwireproto: handle unimplemented util.poll() for Windows
Matt Harbison <matt_harbison@yahoo.com> [Mon, 05 Mar 2018 20:22:34 -0500] rev 36764
debugwireproto: handle unimplemented util.poll() for Windows This is the same logic used in sshpeer.doublepipe. It doesn't completely fix test-ssh-proto{,-unbundle}.t ("read(-1) -> X" is changed to "read(X) -> X", the order of some lines are changed, and abort messages seem to be missing), but it cuts down a ton on the failure spew.
Sun, 04 Mar 2018 16:55:51 -0500 py3: byte-stringify test-blackbox.t
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:55:51 -0500] rev 36763
py3: byte-stringify test-blackbox.t
Sun, 04 Mar 2018 16:54:14 -0500 py3: byte-stringify blackbox-readonly-dispatch.py
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:54:14 -0500] rev 36762
py3: byte-stringify blackbox-readonly-dispatch.py # skip-blame because just adding some b''
Sun, 04 Mar 2018 16:50:35 -0500 py3: make blackbox-readonly-dispatch.py use ui instead of print()
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:50:35 -0500] rev 36761
py3: make blackbox-readonly-dispatch.py use ui instead of print()
Sun, 04 Mar 2018 16:48:17 -0500 py3: fix int formatting of "incoming changes" log
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:48:17 -0500] rev 36760
py3: fix int formatting of "incoming changes" log
Sun, 04 Mar 2018 16:48:01 -0500 largefiles: use %d instead of %s to process ints
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:48:01 -0500] rev 36759
largefiles: use %d instead of %s to process ints Differential Revision: https://phab.mercurial-scm.org/D2677
Sun, 04 Mar 2018 16:11:15 -0500 transaction: fix an error string with bytestr() on a repr()d value
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:11:15 -0500] rev 36758
transaction: fix an error string with bytestr() on a repr()d value Fixes test-rollback.t on Python 3. Differential Revision: https://phab.mercurial-scm.org/D2674
Sun, 04 Mar 2018 16:23:10 -0500 py3: work around comparison between int and None in tagmerge
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:23:10 -0500] rev 36757
py3: work around comparison between int and None in tagmerge
Sun, 04 Mar 2018 16:13:46 -0500 py3: do not mutate dict while iterating in tagmerge
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:13:46 -0500] rev 36756
py3: do not mutate dict while iterating in tagmerge
Sun, 04 Mar 2018 16:01:18 -0500 py3: fix type of ui.configitems(ignoresub=True) result
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:01:18 -0500] rev 36755
py3: fix type of ui.configitems(ignoresub=True) result
Sun, 04 Mar 2018 15:53:10 -0500 py3: don't use str() to stringify pushloc
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 15:53:10 -0500] rev 36754
py3: don't use str() to stringify pushloc
Sun, 04 Mar 2018 15:26:26 -0500 py3: byte-stringify test-config.t and test-config-env.py
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 15:26:26 -0500] rev 36753
py3: byte-stringify test-config.t and test-config-env.py
Sun, 04 Mar 2018 15:24:45 -0500 py3: use startswith() instead of slicing to detect leading whitespace
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 15:24:45 -0500] rev 36752
py3: use startswith() instead of slicing to detect leading whitespace
Sun, 04 Mar 2018 16:06:47 -0500 archival: use py3 friendly replacements for chr() and long()
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:06:47 -0500] rev 36751
archival: use py3 friendly replacements for chr() and long() Differential Revision: https://phab.mercurial-scm.org/D2673
Sun, 04 Mar 2018 16:06:27 -0500 archival: ensure file mode for gzipfile is sysstr
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:06:27 -0500] rev 36750
archival: ensure file mode for gzipfile is sysstr Differential Revision: https://phab.mercurial-scm.org/D2672
Sun, 04 Mar 2018 16:06:10 -0500 archival: fix a missing r'' on a kwargs check
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:06:10 -0500] rev 36749
archival: fix a missing r'' on a kwargs check # skip-blame just an r prefix Differential Revision: https://phab.mercurial-scm.org/D2671
Sun, 04 Mar 2018 16:05:44 -0500 py3: more passing tests (ten this time)
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:05:44 -0500] rev 36748
py3: more passing tests (ten this time) Differential Revision: https://phab.mercurial-scm.org/D2670
Sun, 04 Mar 2018 15:55:55 -0500 util: fix unsafe url abort with bytestr() on url
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 15:55:55 -0500] rev 36747
util: fix unsafe url abort with bytestr() on url Differential Revision: https://phab.mercurial-scm.org/D2669
Sun, 04 Mar 2018 15:16:42 -0500 xdiff: fix builds on Windows
Matt Harbison <matt_harbison@yahoo.com> [Sun, 04 Mar 2018 15:16:42 -0500] rev 36746
xdiff: fix builds on Windows This works on my ancient Fedora system too, without warnings. There are, however, warnings about various 64 to 32 bit conversions on Windows that need to be examined.
Mon, 05 Mar 2018 01:08:40 +0530 py3: use bytes() instead of str()
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 05 Mar 2018 01:08:40 +0530] rev 36745
py3: use bytes() instead of str() Differential Revision: https://phab.mercurial-scm.org/D2665
Mon, 05 Mar 2018 01:05:54 +0530 py3: use b"%d" instead of str() to convert integers to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 05 Mar 2018 01:05:54 +0530] rev 36744
py3: use b"%d" instead of str() to convert integers to bytes Differential Revision: https://phab.mercurial-scm.org/D2664
Mon, 05 Mar 2018 01:03:23 +0530 py3: use util.forcebytestr to convert testedwith value to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 05 Mar 2018 01:03:23 +0530] rev 36743
py3: use util.forcebytestr to convert testedwith value to bytes Bad extensions can put anything in testedwith so we should use util.forcebytestr here. Differential Revision: https://phab.mercurial-scm.org/D2663
Sun, 04 Mar 2018 22:33:59 +0530 py3: use pycompat.bytestr instead of str
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 22:33:59 +0530] rev 36742
py3: use pycompat.bytestr instead of str Differential Revision: https://phab.mercurial-scm.org/D2648
Sun, 04 Mar 2018 07:40:21 -0800 setdiscovery: avoid a Yoda condition
Martin von Zweigbergk <martinvonz@google.com> [Sun, 04 Mar 2018 07:40:21 -0800] rev 36741
setdiscovery: avoid a Yoda condition Differential Revision: https://phab.mercurial-scm.org/D2646
Sun, 04 Mar 2018 07:40:11 -0800 setdiscovery: remove unnecessary sample size limiting
Martin von Zweigbergk <martinvonz@google.com> [Sun, 04 Mar 2018 07:40:11 -0800] rev 36740
setdiscovery: remove unnecessary sample size limiting Both _takequicksample() and _takefullsample() already limit their result to the request size, so there's no need to let the caller do that again. Differential Revision: https://phab.mercurial-scm.org/D2645
Sun, 04 Mar 2018 07:39:46 -0800 setdiscovery: remove initialsamplesize from a condition
Martin von Zweigbergk <martinvonz@google.com> [Sun, 04 Mar 2018 07:39:46 -0800] rev 36739
setdiscovery: remove initialsamplesize from a condition It seems more direct to compare the actual sample size. That way we can change the sample taken earlier in the code without breaking the condition. Differential Revision: https://phab.mercurial-scm.org/D2644
Sun, 04 Mar 2018 07:37:08 -0800 setdiscovery: back out changeset 5cfdf6137af8 (issue5809)
Martin von Zweigbergk <martinvonz@google.com> [Sun, 04 Mar 2018 07:37:08 -0800] rev 36738
setdiscovery: back out changeset 5cfdf6137af8 (issue5809) As explained in the bug report, this commit caused a performance regression. The problem occurs when the local repo has very many heads. Before 5cfdf6137af8, we used to get the remote's list of heads and if these heads mostly overlapped with the local repo's heads, we would mark these common heads as common, which would greatly reduce the size of the set of undecided nodes. Note that a similar problem existed before 5cfdf6137af8: If the local repo had very many heads and the server just had a few (or many heads from a disjoint set), we would do the same kind of slow discovery as we would with 5cfdf6137af8 in the case where local and remote repos share a large set of common nodes. For now, we just back out 5cfdf6137af8. We should improve the discovery in the "local has many heads, remote has few heads" case, but let's do that after backing this out. Differential Revision: https://phab.mercurial-scm.org/D2643
Sun, 04 Mar 2018 13:04:12 -0500 hgweb: fix up trailing slash detection on Python 3
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 13:04:12 -0500] rev 36737
hgweb: fix up trailing slash detection on Python 3 Fixes a couple of hgweb tests. Differential Revision: https://phab.mercurial-scm.org/D2661
Sun, 04 Mar 2018 13:03:22 -0500 hgweb: convert req.form to bytes for all keys and values
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 13:03:22 -0500] rev 36736
hgweb: convert req.form to bytes for all keys and values This is just going to be a lot cleaner for our internals. Differential Revision: https://phab.mercurial-scm.org/D2660
Sun, 04 Mar 2018 12:33:15 -0500 templater: show repr of string we're rejecting
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:33:15 -0500] rev 36735
templater: show repr of string we're rejecting I feel like this should make it a little easier to hunt down problems. Differential Revision: https://phab.mercurial-scm.org/D2659
Sun, 04 Mar 2018 12:21:01 -0500 webutil: some %d instead of %s love on ints
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:21:01 -0500] rev 36734
webutil: some %d instead of %s love on ints Differential Revision: https://phab.mercurial-scm.org/D2658
Sun, 04 Mar 2018 12:17:02 -0500 py3: whitelist three more cases
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:17:02 -0500] rev 36733
py3: whitelist three more cases Differential Revision: https://phab.mercurial-scm.org/D2657
Sun, 04 Mar 2018 12:08:53 -0500 archival: our filenames are bytes, not strs
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:08:53 -0500] rev 36732
archival: our filenames are bytes, not strs Differential Revision: https://phab.mercurial-scm.org/D2656
Sun, 04 Mar 2018 12:08:37 -0500 archival: tar file modes need to be sysstrs
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:08:37 -0500] rev 36731
archival: tar file modes need to be sysstrs Differential Revision: https://phab.mercurial-scm.org/D2655
Sun, 04 Mar 2018 12:08:19 -0500 archival: fsdecode paths before passing to tar or zip objects
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:08:19 -0500] rev 36730
archival: fsdecode paths before passing to tar or zip objects Both of these traffic in unicodes for filenames on Python 3, and inspection of the tarfile module shows that it uses the filesystem encoding, so fsdecode is the right choice. Differential Revision: https://phab.mercurial-scm.org/D2654
Sun, 04 Mar 2018 05:15:24 +0530 py3: add b'' prefixes in tests/test-minirst.py
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 05:15:24 +0530] rev 36729
py3: add b'' prefixes in tests/test-minirst.py # skip-blame because just b'' prefixes Differential Revision: https://phab.mercurial-scm.org/D2653
Sun, 04 Mar 2018 22:40:33 +0530 py3: make sure __repr__ returns a str
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 22:40:33 +0530] rev 36728
py3: make sure __repr__ returns a str # skip-blame because just r'' prefix Differential Revision: https://phab.mercurial-scm.org/D2652
Sun, 04 Mar 2018 22:40:08 +0530 py3: make sure regular expressions are bytes
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 22:40:08 +0530] rev 36727
py3: make sure regular expressions are bytes # skip-blame because just b'' prefix Differential Revision: https://phab.mercurial-scm.org/D2651
Sun, 04 Mar 2018 05:53:59 +0530 py3: use bytes instead of str to make sure we use bytes internally
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 05:53:59 +0530] rev 36726
py3: use bytes instead of str to make sure we use bytes internally Differential Revision: https://phab.mercurial-scm.org/D2650
Sun, 04 Mar 2018 22:37:41 +0530 py3: use util.forcebytestr instead of str to convert error messages
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 22:37:41 +0530] rev 36725
py3: use util.forcebytestr instead of str to convert error messages Differential Revision: https://phab.mercurial-scm.org/D2649
Sat, 03 Mar 2018 23:49:39 -0500 lock: block signal interrupt while making a lock file
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 23:49:39 -0500] rev 36724
lock: block signal interrupt while making a lock file On Windows where symlink isn't supported, util.makelock() could leave an empty file if interrupted immediately after os.open(). This empty lock never dies as it has no process id recorded. ld = os.open(pathname, os.O_CREAT | os.O_WRONLY | os.O_EXCL) # an interrupt may occur here os.write(ld, info) os.close(ld) This was a long-standing bug of TortoiseHg which runs a command-server and kills it by CTRL_C_EVENT, reported by random Windows users. https://bitbucket.org/tortoisehg/thg/issues/4873/#comment-43591129 At first, I tried to fix makelock() to clean up a stale lock file, which turned out to be hard because any instructions may be interrupted by a signal. ld = None try: # CALL_FUNCTION # os.open(...) # an interrupt may occur here # STORE_FAST # ld = ... ld = os.open(pathname, os.O_CREAT | os.O_WRONLY | os.O_EXCL) os.write(ld, info) ... return True except: if ld: ... os.unlink(pathname) return False So I decided to block signals by temporarily replacing the signal handlers so makelcok() and held = 1 will never be interrupted. Many thanks to Fernando Najera for investigating the issue.
Sun, 04 Mar 2018 09:40:12 -0500 fuzz: add some more docs about building/running fuzzers
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 09:40:12 -0500] rev 36723
fuzz: add some more docs about building/running fuzzers Differential Revision: https://phab.mercurial-scm.org/D2635
Sun, 04 Mar 2018 11:49:33 -0500 util: also silence py3 warnings from codec module
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 11:49:33 -0500] rev 36722
util: also silence py3 warnings from codec module Fixes warnings like this: + mercurial/util.py:2446: DeprecationWarning: invalid escape sequence '\d' + return codecs.escape_decode(s)[0] Differential Revision: https://phab.mercurial-scm.org/D2642
Thu, 15 Feb 2018 18:05:58 -0800 docs: small fixes for profiling.nested and the overall description
Kyle Lippincott <spectral@google.com> [Thu, 15 Feb 2018 18:05:58 -0800] rev 36721
docs: small fixes for profiling.nested and the overall description - profiling.nested defaults to 0, not 5 - profiling is not always done with lsprof Differential Revision: https://phab.mercurial-scm.org/D2641
Sun, 04 Mar 2018 10:20:41 -0500 scmutil: fix oversight in b76248e51605c6 where I forgot to use msg
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 10:20:41 -0500] rev 36720
scmutil: fix oversight in b76248e51605c6 where I forgot to use msg Thanks to Yuya for spotting my mistake. Differential Revision: https://phab.mercurial-scm.org/D2636
Sun, 04 Mar 2018 10:23:07 -0500 hghave: remove unused "as ex" in exception block
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 10:23:07 -0500] rev 36719
hghave: remove unused "as ex" in exception block I overlooked this when removing a debug print in another change. Differential Revision: https://phab.mercurial-scm.org/D2637
Sat, 03 Mar 2018 18:33:10 -0500 tests: port test-log to Python 3
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 18:33:10 -0500] rev 36718
tests: port test-log to Python 3 Required some porting to >>> inline Python instead of using heredocs into $PYTHON. Differential Revision: https://phab.mercurial-scm.org/D2621
Sat, 03 Mar 2018 19:12:47 -0500 py3: make gettext domain a system string
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 19:12:47 -0500] rev 36717
py3: make gettext domain a system string
Sun, 04 Mar 2018 07:03:50 -0500 templater: fix position of terminator character in error message
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 07:03:50 -0500] rev 36716
templater: fix position of terminator character in error message Since a template expression starts after the '{' character, the expression should be considered to end immediately before the terminator '{'.
Sun, 04 Mar 2018 10:42:51 -0500 merge with stable
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 10:42:51 -0500] rev 36715
merge with stable
Sat, 03 Mar 2018 15:31:37 -0800 revsetlang: add a hint for more useful parse errors
Ryan McElroy <rmcelroy@fb.com> [Sat, 03 Mar 2018 15:31:37 -0800] rev 36714
revsetlang: add a hint for more useful parse errors This logic is largely based on the similar logic added to template error messages in D2608 and D2609, but with a few tweaks based on how revsets actually work. Differential Revision: https://phab.mercurial-scm.org/D2619
Sat, 03 Mar 2018 11:07:46 -0800 setup: ignore extension load failures when finding working hg
Ryan McElroy <rmcelroy@fb.com> [Sat, 03 Mar 2018 11:07:46 -0800] rev 36713
setup: ignore extension load failures when finding working hg Previously, `make local` would fail if any extension was not properly loading. Differential Revision: https://phab.mercurial-scm.org/D2589
Sat, 03 Mar 2018 00:35:59 -0500 profile: colorize output on Windows
Matt Harbison <matt_harbison@yahoo.com> [Sat, 03 Mar 2018 00:35:59 -0500] rev 36712
profile: colorize output on Windows Previously, the ANSI codes were printed to the screen, throwing off the alignment. We could probably do this unconditionally, but it's kind of a hack, so I figured I'd limit the scope.
Sat, 03 Mar 2018 19:02:50 -0500 dispatch: don't clamp the range of the exit code twice
Kevin Bullock <kbullock+mercurial@ringworld.org> [Sat, 03 Mar 2018 19:02:50 -0500] rev 36711
dispatch: don't clamp the range of the exit code twice We already limit the range to (0, 255) in the call to sys.exit(). The duplicated operation can't possibly be hurting us, but let's clean it up to avoid confusion.
Sat, 03 Mar 2018 23:29:40 -0500 bdiff: avoid pointer arithmetic on void*
Matt Harbison <matt_harbison@yahoo.com> [Sat, 03 Mar 2018 23:29:40 -0500] rev 36710
bdiff: avoid pointer arithmetic on void* MSVC 2008 complains: mercurial/cext/bdiff.c(106) : error C2036: 'void *' : unknown size mercurial/cext/bdiff.c(107) : error C2036: 'void *' : unknown size Maybe it's a gcc extension? https://stackoverflow.com/questions/37460579/error-c2036-void-unknown-size
Sat, 03 Mar 2018 19:26:30 -0500 fuzz: add a quick README to try and document how to test new fuzzers
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 19:26:30 -0500] rev 36709
fuzz: add a quick README to try and document how to test new fuzzers Differential Revision: https://phab.mercurial-scm.org/D2633
Sat, 03 Mar 2018 18:58:13 -0500 fuzz: add a fuzzer for xdiff
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 18:58:13 -0500] rev 36708
fuzz: add a fuzzer for xdiff Based entirely on the fuzzer for bdiff. Differential Revision: https://phab.mercurial-scm.org/D2632
Sat, 03 Mar 2018 12:39:15 -0800 tests: add tests about diff quality
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:39:15 -0800] rev 36707
tests: add tests about diff quality These show the differences between bdiff and xdiff. Differential Revision: https://phab.mercurial-scm.org/D2604
Sat, 03 Mar 2018 12:39:14 -0800 run-tests: allow #require inside #if
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:39:14 -0800] rev 36706
run-tests: allow #require inside #if Used by the next patch. Differential Revision: https://phab.mercurial-scm.org/D2605
Sat, 03 Mar 2018 12:39:14 -0800 mdiff: add a config option to use xdiff algorithm
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:39:14 -0800] rev 36705
mdiff: add a config option to use xdiff algorithm The `experimental.xdiff` will affect the default diffopts and make mdiff use the xdiff algorithm for better diff quality. Differential Revision: https://phab.mercurial-scm.org/D2603
Sat, 03 Mar 2018 12:39:14 -0800 bdiff: add a xdiffblocks method
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:39:14 -0800] rev 36704
bdiff: add a xdiffblocks method This is similar to `bdiff.blocks`, but uses xdiff as the backend. The indent heuristic is turned on by default since it has little overhead and improves diff quality significantly. Differential Revision: https://phab.mercurial-scm.org/D2602
Sat, 03 Mar 2018 12:39:11 -0800 xdiff: reduce indent heuristic overhead
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:39:11 -0800] rev 36703
xdiff: reduce indent heuristic overhead Adds some threshold to avoid expensive cases, like: ``` #!python open('a', 'w').write(" \n" * 1000000) open('b', 'w').write(" \n" * 1000001) ``` The indent heuristic is O(N * 20) (N = 1000000) for the above case, and makes diff much slower. Before this patch (system git 2.14.2): ``` git diff --no-indent-heuristic a b 0.21s user 0.03s system 100% cpu 0.239 total git diff --indent-heuristic a b 0.77s user 0.02s system 99% cpu 0.785 total ``` After this patch (git 2fc74f41, with xdiffi.c patched): ``` # with the changed xdiffi.c git diff --indent-heuristic a b 0.16s user 0.01s system 90% cpu 0.188 total git diff --no-indent-heuristic a b 0.18s user 0.01s system 99% cpu 0.192 total ``` Now turning on indent-heuristic has no visible impact on performance. Differential Revision: https://phab.mercurial-scm.org/D2601
Sat, 03 Mar 2018 12:38:41 -0800 xdiff: add a bdiff hunk mode
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:38:41 -0800] rev 36702
xdiff: add a bdiff hunk mode xdiff generated hunks for the differences (ex. questionmarks in the `@@ -?,? +?,? @@` part from `diff --git` output). However, bdiff generates matched hunks instead. This patch adds a `XDL_EMIT_BDIFFHUNK` flag used by the output function `xdl_call_hunk_func`. Once set, xdiff will generate bdiff-like hunks instead. That makes it easier to use xdiff as a drop-in replacement of bdiff. Note that since `bdiff('', '')` returns `[(0, 0, 0, 0)]`, the shortcut path `if (xscr)` is removed. I have checked functions called with `xscr` argument (`xdl_mark_ignorable`, `xdl_call_hunk_func`, `xdl_emit_diff`, `xdl_free_script`) work just fine with `xscr = NULL`. Test Plan: Will be tested in a later patch. Differential Revision: https://phab.mercurial-scm.org/D2575
Sat, 03 Mar 2018 10:39:55 -0800 xdiff: remove patience and histogram diff algorithms
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 10:39:55 -0800] rev 36701
xdiff: remove patience and histogram diff algorithms Patience diff is the normal diff algorithm, plus some greediness that unconditionally matches common common unique lines. That means it is easy to construct cases to let it generate suboptimal result, like: ``` open('a', 'w').write('\n'.join(list('a' + 'x' * 300 + 'u' + 'x' * 700 + 'a\n'))) open('b', 'w').write('\n'.join(list('b' + 'x' * 700 + 'u' + 'x' * 300 + 'b\n'))) ``` Patience diff has been advertised as being able to generate better results for some C code changes. However, the more scientific way to do that is the indention heuristic [1]. Since patience diff could generate suboptimal result more easily and its "better" diff feature could be replaced by the new indention heuristic, let's just remove it and its variant histogram diff to simplify the code. [1]: https://github.com/git/git/commit/433860f3d0beb0c6f205290bd16cda413148f098 Test Plan: `gcc -fPIC *.c --shared -o xdiff.so` still builds. Differential Revision: https://phab.mercurial-scm.org/D2573
Sat, 03 Mar 2018 10:39:43 -0800 xdiff: vendor xdiff library from git
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 10:39:43 -0800] rev 36700
xdiff: vendor xdiff library from git Vendor git's xdiff library from git commit d7c6c2369d7c6c2369ac21141b7c6cceaebc6414ec3da14ad using GPL2+ license. There is another recent user report that hg diff generates suboptimal result. It seems the fix to issue4074 isn't good enough. I crafted some other interesting cases, and hg diff barely has any advantage compared with gnu diffutils or git diff. | testcase | gnu diffutils | hg diff | git diff | | | lines time | lines time | lines time | | patience | 6 0.00 | 602 0.08 | 6 0.00 | | random | 91772 0.90 | 109462 0.70 | 91772 0.24 | | json | 2 0.03 | 1264814 1.81 | 2 0.29 | "lines" means the size of the output, i.e. the count of "+/-" lines. "time" means seconds needed to do the calculation. Both are the smaller the better. "hg diff" counts Python startup overhead. Git and GNU diffutils generate optimal results. For the "json" case, git can have an optimization that does a scan for common prefix and suffix first, and match them if the length is greater than half of the text. See https://neil.fraser.name/news/2006/03/12/. That would make git the fastest for all above cases. About testcases: patience: Aiming for the weakness of the greedy "patience diff" algorithm. Using git's patience diff option would also get suboptimal result. Generated using the Python script: ``` open('a', 'w').write('\n'.join(list('a' + 'x' * 300 + 'u' + 'x' * 700 + 'a\n'))) open('b', 'w').write('\n'.join(list('b' + 'x' * 700 + 'u' + 'x' * 300 + 'b\n'))) ``` random: Generated using the script in `test-issue4074.t`. It practically makes the algorithm suffer. Impressively, git wins in both performance and diff quality. json: The recent user reported case. It's a single line movement near the end of a very large (800K lines) JSON file. Test Plan: Code taken as-is. Differential Revision: https://phab.mercurial-scm.org/D2572 # no-check-commit for vendored code
Sat, 03 Mar 2018 14:30:21 -0800 templater: provide hint for multi-line templates with parse errors
Ryan McElroy <rmcelroy@fb.com> [Sat, 03 Mar 2018 14:30:21 -0800] rev 36699
templater: provide hint for multi-line templates with parse errors Previously, we punted. Now we "rewrite" the template's newlines to r'\n' and offset the hint appropriately. Differential Revision: https://phab.mercurial-scm.org/D2609
Sat, 03 Mar 2018 14:23:40 -0800 templater: add hint to template parse errors to help locate issues
Ryan McElroy <rmcelroy@fb.com> [Sat, 03 Mar 2018 14:23:40 -0800] rev 36698
templater: add hint to template parse errors to help locate issues Previously, we would print the error name and location, but this isn't as helpful as we can be. Let's add a hint that shows the location where we encountered the parse error. Differential Revision: https://phab.mercurial-scm.org/D2608
Fri, 02 Mar 2018 07:17:06 +0530 py3: use b"%d" to covert integer to bytes instead of str
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 07:17:06 +0530] rev 36697
py3: use b"%d" to covert integer to bytes instead of str Differential Revision: https://phab.mercurial-scm.org/D2618
Fri, 02 Mar 2018 07:16:33 +0530 py3: use bytes() instead of str()
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 07:16:33 +0530] rev 36696
py3: use bytes() instead of str() Differential Revision: https://phab.mercurial-scm.org/D2617
Fri, 02 Mar 2018 07:15:54 +0530 py3: replace __str__ to __bytes__ in hgext/journal.py
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 07:15:54 +0530] rev 36695
py3: replace __str__ to __bytes__ in hgext/journal.py Differential Revision: https://phab.mercurial-scm.org/D2616
Wed, 31 Jan 2018 22:21:33 -0800 testrunner: add option to sort tests by previous run time
Martin von Zweigbergk <martinvonz@google.com> [Wed, 31 Jan 2018 22:21:33 -0800] rev 36694
testrunner: add option to sort tests by previous run time We currently estimate the time a test file will take to run by taking its length and its extension into account (.py is assumed to be much faster). On top of that, we have set of multipliers saying e.g. that tests with "i18n" in the name are estimated to be 10 times slower than other tests. Since a1eff44c432b (tests: write recent run times to a file named tests/.testtimes, 2016-01-04), we have a simpler way of estimating the run time: simply read the previous time from .testtimes. Although we haven't needed to adjust the multipliers since b4d7743e174a (run-tests: add more scheduling weight hints, 2015-12-04), it's just much simpler not to have to. Perhaps more importantly than not having to maintain the multipliers for core is that non-core users of the test runner cannot update the multipliers. 0 1 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 2 c c o i c p p r p p p c r p p p p p l p p p p p p p p p c p p p p p p s p p c p p c c g c c o g h g 3 o o b m o u u u u u u h e u u u u u a u u u u u u u u u o u u u u u u u u u h u u h h e o o b e e l 4 n n s p n s s n s s s e b s s s s s r s s s s s s s s s p s s s s s s b s s e s s e e n n m s n l o 5 t t o o v h h - h h h c a h h h h h g h h h h h h h h h y h h h h h h r h h c h h c c d v m o d p g 6 r r l r e - - t - - - k s - - - - - e - - - - - - - - - t - - - - - - e - - k - - k k o = a = o . . 7 i = e t r r r e c c c - e c c c c c f c c c c c c c c c r c c c c c c p c c - c c - - c p n o c . . 8 b a t s t a a s h h h p - h h h h h i h h h h h h h = h a h h h h h h o h h c h h c m - a d b . . . 9 - b e - - c c t e e e y c e e e e e l e e e e e e e c e c e e e e e e - e e o e e o o j t - s . . . 10 p o - c s e e s c c c 3 h c c c c c e c c c = = c c h = e c c c = c c s c c d c c n d a c t o . . . 11 e r c h v . . . k k k - e k k k k k s k k k o c k = e c - k k k c k k v k k e k k f u . h e l . . . 12 r = h e n . . . h h = c c = h h h = - h h = b h h a c o h = = = o h h n h h . = = i l . b m e . . . 13 f c e = - . . . = e l o k e e e e c u e = c s e = c k n e h d o n e = . = e . c h g e . o p t . . . 14 . h c l s . . . h = o m - x = a a o p = h h m c b l - v u g i b v a c . c = . h g . - . m l e . . . 15 . e k a o . . . g s g p r t r = = n d c g e a k u . h e r w r s e = o . h h . e w . i . b a - . . . 16 . c h r u . . . w u . a = e e s g v a o w c r - n . e r i e s o r h n . e t . c e . m . . t b . . . 17 . k e g r . . . e b . t s n v h e e t n e k k s d . l t s b t l t g v . c t . k b . p . . e u . . . 18 . - a e c . . . b r . . u s s e n r e v b - e h l . p - t - a e - w = . k p . - - . o . . . n . . . 19 . c d f e . . . d e . . b i e l d t . - e r b e . . s i s t t s e b . - - . p c . r . . . d . . . 20 . o s i . . . . i p . . r o t v o - . = f x - a 2 . . v c y e e v b u . p b . y o . t . . . l . . . 21 . m . l . . . . r o . . e n . e c s . r i e t n - . . n s m - . n - n . y a . f m . s . . . e . . . 22 . m . e . . . . . . . . p . . . - v . e l c e g f . . - . r r . - j d . l d . l m . . . . . - = . . 23 . i . s . . . . . . . . o . . . r n . b e u m . o . . s . e a . m s l . i - . a a . . . . . s i . . 24 . t . . . . . . . . . . - . . . o - . a l t p . r . . i . v c . o o e . n s . k n . . = . . t m . . 25 . . . . . . . . . . . . d . . . . e . s o e l . m . . n . . e . v n 2 . t e . e d . . = . . r p . . 26 . . . . . . . . . . . . e . . . . n . e g . a . a . . k . . . . e . - . . r . s s . . s . . i o . . 27 . . . . . . . . . . . . e . . . . c . - . . t . t . . . . . . . . . e . . v . . . . . t . . p r . . 28 . = . . . . . . . . . . p . . . . o . o . . e = . . . . . . . . . . x . . e . . . . . r . . . t . . 29 . m . . . . . . . . . . - . . . . d . b . = . r . . . . . . . . . . c . . r . . . . . i . . . . . . 30 . e . . . . . . . . . . n . . . . i . s . c . e . . . . . . . . . . h . . . . . . . . p . . . . . . 31 . r . . . . . . . . . . e . . . . n . o . o . n . . . . . . . . . . a . . . . . . . . . . . . . . . 32 . g . . . . . . . . . . s . . . . g . l . m . a . . . . . . . . . . n . . . . . . . . . . . . . . . 33 . e . . . . . . . . . . t . . . . . . e . m . m . . . . . . . . . . g . . . . . . = . . . . . . . . 34 . - . . . . . . . . . . e . . . . . . t . i . e . . . . . . . . . . e . . . . . . l . . . . . . . . 35 . c . . . . . . . . . . d . . . . . . e . t . - . . . . . . . . . . . . . . . . . f . . . . . . . . 36 . h . . . . . . . . . . - . . . . . . . . - . m . . . . . . . . . . . . . . . . . s . . . . . . . . 37 . a . . . . . . . . . . c . . . = . . . . i . e . . . . . . . . . . . . . . . . . . . . . . . . . . 38 . n . . . . . . . . . . h . . . h = . . . n . r . . . . . . . . . . . . . . . . . . . . . . . . . . 39 . g . . . . . . . . . . a . . . t c . . . t . g . . . . . . . . . . . . . . . . . . . . . . . . . . 40 = e . . . . . . . . . = n . . . t o . . . e . e . . . . . . . . . . . . . . . . . . . . . . . . . . 41 b d = . . . . . . . . h g . . . p n . . . r . 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 42 o e b . . . . . . . . i e . . . s v . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 o l o . . . . . . . . g . . . . . e . . = c . . . . = . . . . . . . . . . . . . . . . . . . . . . . 44 k e o . . . . . . . . h . . . . . r . . g t . . . . h . . . . . . . . . . . . . . . . . . . . . . . 45 m t k . . . . . . . . l . . . . . t . . r i . . . . o . . . . . . . . . . . . . . . . . . . . . . . 46 a e m . . . . . . . . i . . . . . - . . a v . . . . o . . . . . . . . . . . . . . . . . . . . . . . 47 r . a . . . . . . . . g . . . . . g . . f e . . = . k . . . . . . . . . . . . . . . . . . . . . . . 48 k . r . . . . . . . . h . . . . . i . . t . . . c . . . . . . . . . . . . . . . . . . . . . . . . . 49 s . k . . . . . . . . t . . . . . t . . . . . . h . . . . . . . . . . . . . . . . . . . . . . . . . 50 - . s . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . 51 p . - . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . . . . . . . . . . . . . . 52 u . p . . . . . . . . . . . . . . . . . . . . . k . . . . . . . . . . . . . . . . . . . . . . . . . 53 s . u . . . . . . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . . . 54 h . s . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . = . . . . . . . . . . . . . . . . 55 p . h . . . . . . . . . . . . . . . . . . . . . l . . . . . . . . = . . . . . . . . . . . . . . . . 56 u . p . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . r . . . . . . . . . . . . . . . . 57 l . u . . . . . . . . . . . . . . . . . . . . . n . . . . . . . . e . . . . . . . . . . . . . . . . 58 l . l . . . . . . . . . . . . . . . . . . . . . g . . . . . . . . v . . . . . . . . . . . . . . . . 59 . . l . . . . . . . . . . . . . . . . . . . . . = . . . . . . . . s . . . . . . . . . . . . . . . . 60 . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . e . . . . . . . . . . . . . . . . 61 . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . t . . . . . . . . . . . . . . . . 62 . . . . . . . . . . . . . . . . . . . . . . . . n . . . . = . . . 2 . . . . . . . . . . . . . . . . 63 . . . . . . . . . . . . . . . . . . . . . . . . v . . . . h . . . . . . . . . . . . . . . . . . . . 64 . . . . . . . . . . . . . . . . . . . . . . . . e . . . . g . = . . . . . . . . . = . . . . . . . 65 . . . . . . . . . . . . . . . . . . . . . . . . r . . . . w = . b . . . . . . . . . c . . . . . . . 66 . . . . . . . . . . . . . . . . . . . . . . . . t . . . . e l . o . . . . . . . . . l . . . . . . . 67 . . . . . . . . . . . = . . . . . . . . . . . . - . . . . b a . o . . . . . . . . . o . . . . . . . 68 . . . . . . . . . . . k . . . . . . . . . . . . h . . . . - r . k . . . . . . . . . n . . . . . . . 69 . . . . . . . . . . . e . . . . . . . . . . . . g . . . . d g . m . . . . . . . . . e . . . . . . . 70 . . . . . . . . . . . y . . . . . . . . . . . . - . . . . i e . a . . . . . . . = . . . . . . . . . 71 . . . . . . . . . . . w . . . . . . . . . . . . s . . . . f f . r . . . . . . . c . . . . . . . . . 72 . . . . . . . . . . . o . . . . . . . . . . . . v . . . . f i . k . . . . . . . o . . . . . . . . . 73 . . . . . . . . . . . r . . . . . . . . . . . . n . . . . s l . s . . . . . . . m . . . . . . . . . 74 . . . . . . . . . . . d . . . . . . . . . . . . . . . . . . e . . . . . . . . . m . . . . . . . . . 75 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . i . . . . . . . . . 76 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - . . . . . . . . . t . . . = . . . = . 77 . . . . = . . . . . . . . . . . . . . . . . . . . . . . . . m . . . . . . = . . - . . . c . . . r . 78 . . . . b . . . . . . . . . . . . . . . . . . . . . . . . . i . . . . . . m . . a . . . o . . . e . 79 . . . . r . . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . e . . m . . . n . . . v . 80 . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . r . . e . . . v . . . e . 81 . . . . n . . . . . . . . . . . . . . . . . . . . = . . . . . . . . . . . g . . n . . . e . . . r . 82 . . . . c . . . . . . . . . . . . . . . . . . . = m . . . . . . . . . . . e . . d . . . r . . . t . 83 . . . . h . . . . . . . . . . . . . . . . . . . p q . . . . . . . . . . . - . = . . . . t . . . . . 84 . . . . e . . . . . . . . . . . . . . . . . . . h . . . . . . . . . . . . f . u . . . . - . . . . . 85 . . . . s . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . o . p . . . . s . . . . . 86 . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . r . g . . . . v . . . . . 87 . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . c . r . . . . n . . . . . 88 . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . e . a . . . . - . . . . . 89 . . . . . . . . . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . d . . . . b . . . . . 90 . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . e . . . . r . . . . . 91 . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . - . . . . a . . . . . 92 . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . . . r . . . . n . . . . . 93 . . . . . . . . . . . . . . . . . . . . . . . . h . . . . . . . . . . . . . . e . . . . c . . . . . 94 . . . . . . . . = . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . p . . . . h . . . . . 95 . . . . . . . . c . . . . . . . . . . . . . . . n . . . . = . . . . . . . . . o . . . . e . . . . . 96 . . . . . . . . o . . . . . . . . . . . . . . . g . . . . g . . . . . . . . . . . . . . s . . . . . 97 . . . . . . . . m . . . . . . . . . . . . . . . e . . . . e . . . . . . . . . . . . . . . . . . . . 98 . . . . . . . . m . . . . . . . . . . . . . . . . . . . . n . . . . . . . . . . . . . . . . . . . . 99 . . . . . . . . a . . . . . . . . . . . . . . . . . . . . d . . . . . . . . . . . . . . . . . . . 100 . . . . . . . . n . . . . . . . . . . . . . . . . . . . . o . . . . . . . . = . . . . . . . . . . . 101 . . . . . . . . d . . . . = . . . . . . . . . . . . . . . c . . . . . . . . m . . . . . . . . . . . 102 . . . . . . . . s . . . . s . . . . . . . . . . . . . . . - . . . . . . . . e . . . . . . . . . . . 103 . . . . . . . . e . . . . u . . . . . . . . . . . . . . . d . . . . . . . . r . . . . . . . . . . . 104 . . . . . . . . r . . . . b . . . . . . . . . . . . . . . e . . . . . . . . g . . . . . . . . . . . 105 . . . . . . . . v . . . . r . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . 106 . . . . . . . . e . . . . e . . . . . . . . . . . . . . . . . . . . . . . . - . . . . . . . . . . . 107 . . . . . . . . r . . . . p . . . . . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . 108 . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . . 109 . . . . . . . . . . . . . - . . = . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . . 110 . . . . . . . . . . . . . g . . t . . . . . . . . . . . . . . . . . . . . . l . . . . . . . . . . . 111 . . . . . . . . . . . . . i . . r . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . . 112 . . . . . . . . . . . . . t . . e . . . . . . . . . . . . = . . . . . . . . . . . . . . . . . . . . 113 . . . . . . . . . . . . . . . . e . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . . 114 . . . . . . . . . . . . . . . . m . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . 115 . . . . . . . . . . . . . . . . a . . . . . . . . . . . . g . . . . . . . . . . . . . . . . . . . . 116 . . . . . . . . . . . . . . . . n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 . . . . . . . . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 . . . . . . . . . . . . . . . . f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 . . . . . . . = . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . = . . . . . . . . . . 120 . . . . . . . t . . . . . . . . s . . . . . . . . . . . . . . . . . . . . . . = . . . . . . . . . . 121 . . . . . . . a . . . . . . . . t . . . . . . . . . . . . . . . . . . . . . . t . . . . = . . . . . 122 . . . . . . . g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r . . . . c . . . . . 123 . . . . . . . s . . . . . . . . . . . . . = . . . . . . . . . . . . . . . . . a . . . . o . . . . . 124 . . . . . . . . . . . . . . . . . . . . . h . . . . . . . . . . . . . . . . . n . . . . n . . . . . 125 . . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . s . . . . v . . . . . 126 . . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . p . . . . e . . . . . 127 . . . . . . . . . . . . . . . . . . . . . p . . . . . . . . . . . . . . . . . l . . . . r . . . . . 128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a . . . . t . . . . . 129 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n . . . . . . . . . . 130 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . 131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 . . . . . . . . . . . . = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 . . . . . . . . . . . . c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 . . . . . . . . . . . . n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 . . . . . . . . . . . . v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 . . . . . . . . . . . . r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 . . . . . . . . . . . . f . . . . . . . . . . . . . . = . . . . . . . . . . . . . . . . . . . . . . 144 . . . . . . . . . . . . i . . . . . . . . . . . . . . p . . . . . . . . . . . . . . . . . . . . . . 145 . . . . . . . . . . . . l . . . . . . . . . . . . . . h . . . . . . . . . . . . . . . . . . . . . . 146 . . . . . . . . . . . . e . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . 147 . . . . . . . . . . . . m . . . . . . . . . . . . . = s . . . . . . . . . . . . . . . . . . . . . . 148 . . . . . . . . . . . . a . . . . . . . . . . . . . e e . . . . . . . . . . . . . . . . = . . . . . 149 . . . . . . . . . . . . p . . . . . . . . . . . . . n s = . . . . . . . . . . . . . . . b . . . . . 150 . . . . . . . . . . . . . . . . . . . . . . . . . . c . h . . . . . . . . . . . . . . . u . . . . . 151 . . . . . . . . . . . . . . . . . . . . . . . . . . o . g . . . . . . . . . . . . . . . n . . . . . 152 . . . . . . . . . . . . . . . . . . . . . . . . . . d . w . . . . . . . . . . . . . . . d . . . . . 153 . . . . . . . . . . . . . . . . . . = . . . . . . . i . e . . . . . . . . . . . . . . . l . . . . . 154 . . . . . . . . = . . . . . . . . . w . . . . . . . = . b . . . . . . . . . . . . . . . e . . . . . 155 . . . . . . . . = . . . . . . . . . a . . . . . . . m . . . . . . . . . . . . . . . . . . . . . . . 156 . . . . . . . . r . . . . . . . . . l . . . . . . . v . . . . . . . . . . . . . . . . . . . . . . . 157 . . . . . . . . e . . . . . . . . . k . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . 158 . . . . . . . . b . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . . . . . . . . . . . . 159 . . . . . . . . a . . . . . . . . . . . . . . . . . p . . . . . . . . . . . . . . . . . . . . . . . 160 . . . . . = . . s . . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . 161 . . . . . b . . e . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . . . . . . . . . . . . 162 . . . . = u . . - . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . . . . . 163 . . . . = n . . s . . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . 164 . . . . c d . . c . . . . . . . . . . . . . . . . . d . . . . . . . . . . . . . . . . . . . . . . . 165 . . . . o l . . e . . . . . . . . . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . 166 . . . . m e . . n . . . . . . . . . . . . . . . . . f . . . . . . . . . . . . . . . . . . . . . . . 167 . . . . m 2 = . a . . . . . . . . . . . . . . . . . f . . . . . . . . . . . . . . = . . . . . . . . 168 . . . . i - i . r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g . . . . . . . . 169 . . . . t r m . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . 170 . . . . . e p . o . . . . . . . . = . . . . . . . . . . . . . . . . . . . . . . . n . . . . . . . . 171 . . . . . m o . - . . . . . . . . c . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . 172 . . . . . o r . g . . . . . . . . l . . . . . . . . . . . . . . . . . . . . . . . r . . . . . . . . 173 . . . . . t t . l . . . . . . . . o . . . = . . . . . . . . . . . . . . . . . . . a . . . . . . . . 174 . . . . . e - . o . . . . . . . . n . . . m . . . . . . . . . . . . . . . . . . . l . . . . . . . . 175 . . . . . - g . b . . . . . . . . e . . . q . . . . . . . . . . . . . . . . . . . d . . . . . . . . 176 . = . . . c i . a . . . . . . . . b . . . - . . . . . . . . . . . . . . . . . . . e . . . . . . . . 177 . i . . . h t . l . . . . . . . . u . . . h . . . . . . = . . . . . . . . . . . . l . . . . . . . . 178 . 1 . . . a . . . . . . . . . . . n . . . e . . . . . . b . . . . . . . . . . . . t . . . . . . . . 179 . 8 . . . n . . . . . . . . . . . d . . . a . . . . . . i . . . . . . . . . . . . a . . . . . . . . 180 . n . . . g . . . . . . . . . . . l . . . d . . . . . . s . . . . . . . . . . . . . . . . . . . . . 181 . . . . . e . . . . . . . . . . . e . . . e . . . . . . e . . . . . . . . . . . . . . . . . . . . . 182 . . . . . g . . . . . . . . . . . s . . = r . . . . . . c . . . . . . . . . . . . . . . . . . . . . 183 . . . . . r . . . . . . . . . . . . . . o - . . . . . . t . . . . . . . . . . . . . . . . . . . . . 184 . . . . . o . . . . . . . . . . . . . . b f . . . . . . 2 . . . . . . . . . . . . . . . . . . . . . 185 . . . . . u . . . . . . . . . . . . . . s r . . = . . . . . . . . . . . . . . . . . . . . . . . . . 186 . . . . . p . . . . . . . . . . . . . . o o . . s . . . . . . . . . . . . . . . . . . . . . . . . . 187 . . . . . . . . . . . . . . . . . . . . l m . . s . . . . . . . . . . . . . . . . . . . . . . . . . 188 . . . . . . . . . . . . . . . . . . . . e . . . h . . . . . . . . . . . . . . . . . . . . . . . . . 189 . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 . . . . . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 . . . . . . . . . . . . . . . . . . . . d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 . . . . . . . . . . . . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . = . . . . . . . . . . . . . . 196 . . . . . . . . . . . . . . . . . . . . r . . . . . . . . . . . . . . t . . . . . . . . . . . . . . 197 . . . . . . . . . . . . . . . . . . . . i . . . . . . . . . . . . . . r . . . . . . . . . . . . . . 198 . . . . . . . . . . . . . . . . . . . . b . . . . . . . . . . . . . . e . . . . . . . . . . . . . . 199 . . . . . . . . . . . . . . . . . . . . u . . . . . . . . . . . . . . e . . . . . . . . . . . . . . 200 . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . d . . . . . . . . . . . . . . 201 . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . i . . . . . . . = . . . . . . 202 . . . . . . . . . . . . . . . . . . . . d . . . . . . . . . . . . . . s . . . . . . . a . . . . . . 203 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . = n . . . . . . 204 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . b n . . . . . . 205 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = v . . . . . . i o . . . . . . 206 . = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h e . . . . . . s t . . . . . . 207 . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g r . . . . . . e a . . . . . . 208 . u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . w y . . . . . = c t . . . . . . 209 . b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . n t e . . . . . . 210 . r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b . . . . . . o . . . . . . = . 211 . e . . . . . . . . . . . . . . = . . . . . . . . . . . . . . . . . - . . . . . . t . . . . . . m . 212 . p . . . = . . . . . . . . . . p . = . . . . . . . . . . . . . . . a . . . . . . i . . . . . . q . 213 . o . . . r . . . . . . . . . . u p . . . . . . . . . . . . . . . n . . . . . . f . . . . . . - . 214 . - . . . e . . . . . . . . . . s = u . . . . = . . . . . . . . = = n . . . . . . y . . . . . . h . 215 . r . . . m . . . . . . . . . . h c l . . . . d . . . . . . . . s o o . . . . . . . . . . . . . e . 216 . e . . . o . . . . . . . . . . - o l . . . . e . . . . . . . . s b t . . . . . . . . . . . . . a . 217 . c . . . v . . . . . . . . . . w n - . . . = v . . . = . . . . h s a . . . . . . . . . . . . . d . 218 . u . . . e . . . . . . . . . . a v p . . . h e . . . b . . . . - o t . . . . . . . . . . . . . e . 219 . r . . . . . . . . . . . . . . r e u = . . t l . . . a . . . . b l = . . . . . . . . . . . . . r . 220 . s . . . . . . . . . . . . . . n r l r . . t - . . . c . . . . u e h . . . . . . . . . . . . . - . 221 . i . . . . . . . . . . . . . . . t l e . . p w . . . k . . . . n t g . . . . . . . . . . . . . d . 222 . o . . . . . . . . . . . . . . . - - b . . - a . . . o . . . . d e w . . = . . . . . . . . . . a . 223 . n . . . . . . . . . . . . . . . s c a . . b r . . . u . . . . l - e . . s . . . . . . . . . . t . 224 . . . . . . . . . . . . . . . . . v o s . . u n . . . t . . . . e d b . . e . . . . . . . . . . e . 225 . . . . . . . . . . . . . . . . . n r e . . n i . . . . . . . . 1 i = . . t . . . . . . . . . . . . 226 . . . . . . . . . . . . . . . . . - r - . . d n . . . . . . . . . v c . . d . . . . . . . . . . . . 227 . . . . . . . . . . . . . . . . . s u c . . l g . . . . . . . . . e l . . i . . . . . . . . . . . . 228 . . . . . . . . . . . . . . . . . t p o . . e s . . . . . = . . . r o . . s . . . . . . . . . . . . 229 . . . . . . . . . . . . . . . . . a t l . . 1 = . . . . . c . . . g n . . c . . . . . . . . . . . . 230 . . . . . . . . . . . . . . . . . r i l . . . h . . . . . l . . . e e . . o . . . . . . . . . . . . 231 . . . . . . . = . . . = . . . . . t o a . . . i . . . . . o . . . n - . . v . . . . . . . . . . . . 232 . . . . . . . m . . . w . . . . . r n p . . . s . . . . . n . . . t u . . e . . . . . . . . . . . . 233 . . . . . . . q . . . i . . . . . e . s . . . t . . . . . e . . . . n . . r . . . . . . . . . . . . 234 . . . . . . . - . . . r . . . . . v . e . . . e . . . . . - . . . . c . . y . . . . . . = . . . . = 235 . . . . . . = s . . . e . . . . . . = . . . . d . . . . . u . . . . o . . . . . . = . . o . . . . u 236 . . . . . . l u . . . p . . . . . . p . . . . i . . . . . n . . . . m . . . . . . h . . b . . . . p 237 . . . . . . a b . . . r . . . . . . r . . . . t . . . . . c . . . . p . . . . . . i . . s . . = . d 238 . . . . . . r r . . . o . . . . . . o . . . . - . . . . . o . . . . r . . . . . . s . . h . . a . a 239 . . . . . . g e . . . t . . . . . . g . . . . o . . . . . m . . . . e . . . . . . t . . i . . l . t 240 . . . . . . e p . . . o . . . . . = r . . . . b . . . . . p . . . . s . . . . . . e . . s . . i . e 241 . . . . . . f o . . . . . . . . . a e . . . . s . . . . . r . . . . s . . . . . . d . . t . . a . - 242 . . . . . . i . . . . . . . . . . r s . . . . o . . . . . e . . . . e . . . . . . i . . o . . s . b 243 . . . . . . l . . . . . . . . . . c s . = . . l . . . . . s . . . . d . . . . . . t . . r . . . . r 244 . . . . . . e . . . . . . . . . . h . . g . . e . . . . . s . . . . . . . . . . . - . . y . . . . a 245 . . . . . . s . . . . . . . . . . i . . e . . t . . . . . e . . . . . . . . . . . a . . . . . . . n 246 . . . . . . - . . . . . . . . . . v . . t . . e . . . . . d . . . . . . . . . . . r . . . . . . . c 247 . . . . . . w . . . . . . . . . . e . . b . . . . . . . . . . . . . . . . . . . = g . . . . . . . h 248 . . . . . . i . . . . . . . . . . . = . u . . . . . . . . . . . . . . . . . . . g u . . . . . . . e 249 . . . . . . r . . . . . . . . . . . s . n . . . . . . . . . . . . . . . . . . . l m . . . . . . . s 250 . . . . = . e . . . . . . . . . . . t . d . . . . . . . . . . . . . . . . . . . o e . . . . . . . . 251 . . . . m . p . . . . . . . . . . . a . l . . . . . . . . . . . . . . . . . . . b n . . . . . . . . 252 . . . . e . r . . . . . . . . . . . t . e . . . . . . . . . . . . . . . . . . . a t . . . . . . . . 253 . = . . r . o . . . . . . . . . . . u . . . . . . . . . . . . . . . . . . . . . l s . . . . . . . . 254 . r . . g . t . . . . . . . . . . . s . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . 255 . e . . e . o . . . . = . . . . . . - . . . . . . . . . . . . . . . . . = . . = p . . . . . . . . . 256 . n . . - . . . . . . b . . . . . . c . . . . . . . . . . . . . . . . . l . = c t . . . . . . . . . 257 . a . . c . . . . . . l . . . . . . o . . . . . . . . . . . . . . . . . o . c e s . . . . . . . . . 258 . m . . r . . . . . . a . . . . . . l . . . . . . . . . . . . . . . . . g . o n . . . . . . . . . . 259 . e . . i . . . . . . c . . . . . . o . = . . . . . . . . . . . . . . . - . n s . . . . . . . . . . 260 . . . . s . . . . . . k . . . . . . r . l . . . . . . . . . . . . . . . l . v o . . . . . . . . . . 261 . . . . s . . . . . . b . . . . . . . . f . . . . . . . . . . . . . . . i . e r . . . . . . . . . . 262 . . . . - . . . . . . o . . . . . . . . c . = . . . . . . . . . . . . . n . r . . . . . . . . . . . 263 . . . . c . . . . . . x . . . . . . . . o . m . . . . . . . . . . . . . e . t . . . . . . . . . . . 264 . . . . r . . . . . . . . . . . . . . . n . e . . . . . . . . . . . . . r . - . . . . . . . . . . . 265 . . . . o . . . . . . . . . . . . . . . v . r . . . . . . . . . . . . . a . h . . . . . . . . . . . 266 . . . . s . . . . . . . . . . . . . . . e . g . . . . . = . . . . . . . n . g . . . . . . . . . . . 267 . . . . s . . . . . . . . . . . . . . . r . e . . . . . f . . . . . . . g . - . . . . . . . . . . . 268 . . . . . . . . . . . . = . . . . . . . t . - . . . . e . . . . . . . e . s . . . . . . . . . . . 269 . . . . . . . . . . . . h . . . . . . . . . t . = . . . t . . . . . . . . . i . . . . . . . . . . . 270 . . . . . = . . . . . . i . . . . . . . . . y . i . . . c . . . . . . . . . n . . . . . . . . . . . 271 . . . . . c . . = . . . s . . . . . . . . . p . n . . . h . . . . . . . . . k . . . . . . . . . . . 272 . . . . . l . . f . . . t . . . . . . . . . e . c . . . . . . . . . . . . . . . . . . . . . . . . . 273 . . . . . o . . i . . . e . . . . . . . . . s . o . . . . . . . . . . . . . . . . . . . . . . . . . 274 . . . . . n . . l . . . d . . . . . . . . . . . m . . . . . . . . . . . . . . . . . . . . . . . . . 275 . . . . . e . . e . = . i . . . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . . 276 . . . . . - . . s . e . t . . . . . . . . . . . n . . . . . . . . . . = . . . . . . . . . . . . . . 277 . . . . . p . . e . o . - . . . . . . . . . . . g . . . . . . . . . . r . . . . = . . . . . . . . . 278 . . . . . u . . t . l . c . . . . . . . . . . . - . . . . . . . . . . o . . . . m . . . . . . . . . 279 . . . . . l . . . . . . o . . . . . . . . . . . o . . . . . . . . . . l . . . . q . . . . . . . . . 280 . . . . . l . . . . . . m . . . . . . . . . . . u . . . . . . . . . . l . . . . - . . . . . . . . . 281 . . . . . = . . . . . . m . . . . . . . . . . . t . . . . . . . . . . b . . . . s . . . . . . . . . 282 . . . . . e . . . . . . u . . . . . . . . . . . g . . . . . . . . . . a . . . . u . . . . . . . . . 283 . . . = . x . . . . . . t . . . . . . . . . . . o . . . . . . . . . = c . . . . b . . . . . . . . . 284 . . . h . t . . . . . . e . . . . . . . . . . . i . . . . . . . . . n k = . . . r . . . . . . . . . 285 . . . i . d . . . . . . . . . . . . . . . . . . n . . . . . . . . . e . f . . . e . . . . . . . . . 286 . . . s . i . . . . . . . . . . . . . . . . . . g . . . . . . . . . w . n . . . p . . . . . . . . . 287 . . . t . f . . . . . = . . . . . . . . . . . . . . . . . . . . . . b . c . . . = . . . . . . . . . 288 . . . e = f . . . . . h . . . . . . . . . . . . . . . . . . . . . . r . a . . . g . . . . . . . . . 289 . . . d h . . . . . . i . . . . . . . . . . . . . . . . . = . . . . a . c . . . i . . . . . . . . . 290 . . . i g . . . . . . s . . . . . . . . . . . . . . = . . l . = . . n . h . . . t . . . . . . . . . 291 . . . t w . . . . . . t . . . . . . . . . . . . . . s . . f . m . . c . e . . . - . . . . . . . . . 292 . . . - e . . . . . . e . . = . . . . . . . . . . . h . . s . e . . h . . . . . e . . . . . . . . . 293 . . . f b . . . . . . d . . b . . . . . . . . . . . a . . - . r . . . . . . . . x . . . . . . . . . 294 . . . o = . . . . . . i . . u . . . . . . . . . . . r . . l . g = . . . . . . . p . . . . . . . . . 295 . . . l r . . . . . . t . . n . . . . . . . . . . . e . . a . e s . . . . . . . o . . . . . . . . . 296 . . . d e . . . . . . - . . d . . . . . . . . . . . . . . r . 1 t . . . . . . . r . . . . . . . . . 297 . . . . b . . . . . . e . . l . . . . . . . . . . . . . . g = . a . . . . . . . t . . . . . . . . . 298 . . . . a . . . . . . d . . e . . . = . . . . . . . . . . e = . t . . . . . . . . . . . . . . . . . 299 . . . . s . . . . . . i . . 2 . . . r . . . . . . . . . . f s . u . . . . . . . . . . . . . . . . . 300 . . . . e . . . . . . t . . - . . . e . . . . . . . . . . i p . s . . . . . . . . . . . . . . . . . 301 . . . . - . . . . . . . . . m . . . b . . . . . . . . . . l l . . . . . . = . . . . . . . . . . . . 302 . . . . c . . . . . . . . . u . . . a . . . = . . . . . . e i . . . . . . s . . . . . . . . . . . . 303 . . . . o . . . . . . . . . l . . . s . . . m . . . . . . s t . . . . . . p . . . . . . . . . . . . 304 . . . . n . . . . . . . . . t . . . e . . . q . . . . . . . . . . . . . . l . . . . . . . . . . . . 305 . . . . f . . . . . . . . . i . . . - . . . - . . . . . . . . . . . . . . i . . . . . . . . . . . . 306 . . . . l . . . . . . . . . p . . . n . . . g . . . . . . . . . . . . . . t . . . . . . . . . . . . 307 . . . . i . . . . = . . . . l . . . e . . . u . = . . . . . . . . . . . . . . . . . . . . . . = . . 308 . . . . c . . . . d . . . . e . . . w . . . a . c . . . . . . . . . . . . . . . . = . . . . . r . . 309 . . . . t . . . . i . . . . - . . . a . = = r . o . . . . . . . . . . . . . . . . u . . . . = e . . 310 = . . . s . . . . f . . . . c . . . n . v i d . n . . . . . . . . . . . = . . . . n . . . . r b . . 311 r . . . . . . . . f . . . . h . . . c . e s s . v . . . . . . . . . . . r . . . . c . . . . e a . . 312 e . . . . . . . . - . . = . a . . = e . r s . . e . . . . . . . . . . . e . . . . o . . = . b s . . 313 b . . . . . = . . c . . h . n . . h s . i u . . r . . . . . . . . . . . s . . . . m . . m . a e . . 314 a . . . . . d . . o . . g . g . . a t . f e . = t . . . . . . . . . . . o . . . . m . . q . s - . . 315 s . . . . . e . . l . . h . = . . r o . y 3 . r - . . . . . . . . . . . l . . . . i . . - . e a . . 316 e . = . . . b . . o . . a . r . . d r . . 0 . e s . . . . . . . . . . . v . . . . t . . q . - b . . 317 - . e . . . u . . r . . v . e . . l . . . 8 . b v . . . . . . . . . . . e . . . . . . . p . p o . . 318 i . x . . . g . . . . . e . b . . i . . . 4 . a n . . . . . . . . . . . . . . . . . . . u . a r . . 319 n . c . . . c . . . . . . . a . . n . . . . . s - . . . . . . . . . . . . . . . . . . . s . r t . . 320 t . h . . . o . . . . . . . s . . k . . . . . e t . . . . . . . . . . . . . = . . . . . h . a . . . 321 e . a . . . m . . . . . . . e . . s . . . . . - a . . . . . . . . . . . . . q . . . . . - . m . . . 322 r . n . . . m . . . . . . . - . . . . . . . . p g . . . . . . . . . . . . . r . . . . . f . e . . . 323 r . g . . . a . . . . . . . d . . . . . . . . u s . . = . . . . . . . . . . e . . . = . a . t . . . 324 u . e . . . n . . . . . . . e . . . . . . . . l . . . s . . . . . . . . . . c . . . b . i . e . . . 325 p . - . . . d . . . . . . . s . . . . . . . . l . . . p . . . . . . . . . . o . . . u = l . r . . . 326 t . o . . . s . . . . . . . t . . . . . . . . . . . . a . . . . . . . . . . r . . . n c . . s . . . 327 i . b . . . . . . = . . . . . . . . . . . . . . . = . r . . . . . . . . . . d . . . d o . . . . . . 328 o . s . . . . . . i . . . . . . . . . . . . . . . p . s . = . . . . . . . . . . . . l m . . . . . . 329 n . m . . . . . . m . . . . . = . . . . . . . . . a . e . l . . . . . . . . . . . . e p . . . . . . 330 s . a . . . . . . p . . . . . l . . . . . . . . . g . . . f . . . . . . . . . . . . - l . . . . . . 331 . . r . . . . . . o . . . . . f . . . . . . . . = e . . . s . . . . . . . . . . . . r e . . . . . . 332 . . k . = . . . . r . . . . . s . . . . . . . . t r . . . - = . . . . . . . . . . . . t . . . . . . 333 . . e . r . . . . t . . . . . - . . . . . . . . r . . . . s p . . . . . . . . . . . . i . . . . . . 334 . . r . e . . . . - . . . . . s . . . . . . . . e . . . . e u . . . . = . . . . . . . o . . . . . . 335 . . s . b . . . . b . = . . . e . . . = = . . . e . . . . r s . . . . a . . = . . . . n . . . . . . 336 . . - . a . . . . y . i . . . r . . . r a . . . d . . . . v h . . . . m . . p . . . . . . . . . . . 337 . . c . s . . . . p . n . . . v . . . e m . . . i . . . . e . . . . . e . . a . . . . . . . . . . . 338 . . a . e . . . . a . s . . . e . . . b e . . . s . . . . . . . . . . n . . r . . . . . . . . . . . 339 . . s . - . . . . s . t . . . . . . . a n . . . c . . . . . . . . . . d . . s . . . . . . . . . . . 340 . . e . n . . . . s . a . . . . . . . s d . . . o . . . . . . . . . . . . . e . . . . . . . . . . . 341 . . - . a . . . . . . l . . . . . . . e . . . . v . . . . . . . . = . . . = - . . . . . . . . . . . 342 . . A . m . . . . . . l . . . . . . . - . . . . e . . . . . . . . m . . . h d . . . . . . . . . . . 343 . . 1 . e . . . . . . . . . . . . . . c . . . . r . = . . . . . . q . . . i a . . . . = . . . . . . 344 . . . . d . . . . . . . . . . . . . . a . . . . y . g . . . . . . - . . . s t . . . . g . . . . . . 345 . = . . - . . . . . . . . . . . . . . c . . . . - . e . = . . . . q . . . t e . . . . e . . . . . . 346 . g . . b . . . . . . . . . . . . . . h . . . . l . n . h = . . . r . . . e . . . . . n . . . . . . 347 . e . . r . . . . . . . . . . . . . . e . . . . e . d . i c . . . e . . . d . . . . . d . . . . . . 348 . n . . a . . . . . . . . . . . = . . . . . . . g . o . s o . . . f . . . i . . . . . o . . . . = . 349 . d . . n . . . . . . . . . . . w . . . . . . . a . c . t m . . . r . . . t . . . . . c . . . . e . 350 . o . . c . . . . . . . . . . . i . . . . . . . c . - . e m . . . e . . . - . . . . . - . . . . x . 351 . c . . h . . . . . . . . . . . n . . . . . . . y . z . d i . . . s . . . f . . . . . p . . . . c . 352 . - . . e . . . . . . . . . . . 3 . . . . . . . . . h . i t . . . h . . . o . . . . . t . . . . h . 353 . z . . s . . . . . . . . . . . 2 . . . . . . . . . _ . t - . . . . . . . l . . . . . _ . . . . a . 354 . h . . . = . . . . . = . . . . t . . . . . . . . . C . - i . . . . . . . d . . = . . B . . . . n . 355 . _ . . . g . . . . = g . . . . e . . . . . . . . . N . n n . . . . . . . - . . g . . R . . . . g . 356 . T . . . e . . . . g e . . . . x . . . . . . . . . . . o t . . . . . . . n . . e . . . . . . . e . 357 . W . . . n . . . . e n . . . . t . . . . . . . . . . . n e . . . . . . = o . . n . . . . . . . - . 358 . . . . . d . . . . n d . . . . . . . . . . . . . . . . - r . = . . . . g n . . d . . . . . . . o . 359 . . . . . o . . . . d o . . . . . . . . . . . . . . . . c a . g . . . . e - . . o . . . . . . . b . 360 . . . . . c . . . . o c . . . . . . . . . . . . . . . . o c . e . . . . n c . = c . . . . . . . s . 361 . . . . . - = . . . c - . . . . . . . . . . . . . . . . m t . n . . . . d o . g - . . . . . . . m . 362 . . . . . r m . . . - d . . . . . = = . . . . . . . . . m i . d . . . . o m . r e . . . . . . . a . 363 . . . . . u q . . . s a . . . . . e = . . . . . . . = . u v . o . . . . c m . e l . . . . . . . r . 364 . . = . . . - . . . v . . . . . . x m . . . . . . = b . t e . c . . . . - u . p . . . . . . . . k . 365 . . d . . . q . . . . . . . . . . c q . . . . . . g h . e - . - . . . . f t . . . . . . . . . . e . 366 = . i . . . r . . . . . . . . . . h - . . . . . . i e . . c . i . . . . r e . . . . . . . . . . r . 367 l . f . . . e . . . . . . . . . . a q . . . . . . t a . . u . t . . . . . . . . . . . . . . . . s . 368 a . f = . . f . . . . . . . . . . n n . . . . . . h d . . r . . . . . . . . . . . . . = . . . . - . 369 r . - r . . r . . . . . . . . . . g e . . . . . . e s . . s . . . . = . . . . . . . . c . . . . c . 370 g = i e . . e . . . . . . . . . . e w . . . . = . l . . . e . . . . e . . . . . . . . l . . . . a . 371 e u g b . . s . . . . . . . . . . - . . . . . s . p . . . s . . . . n . . . . . . . . o . . . . s . 372 f r n a . . h . . . . . . . . . . o . . . . . t . . . . . . . . . . c . . . . . . . . n . . . . e . 373 i l o s . . - . . . . . . . . . . b . . . . . a . . . . . . . . . . o . . . . . . . . e . . . . - . 374 l - r e . . = . . . . . . . . . . s . . . . . t . . . . . . . . . . d . . . . . . . . - . . . . A . 375 e r e - . . m . . . . . . . . . . m . . . . . i . . . . . . . . . . i . . . . . . . . r . . = . 3 . 376 s e - r . . q . . . . . . . . . . a . . . . . c . . . . . . . . . . n . . . . . . . . . . . m . . . 377 - v w e . . - . . . . . . . . = . r . . . . . - . . . . . . . . . . g . . . . . . . . . . . q . . . 378 c . h n . . q . . . . = . . . b . k . . . . . h . . . . . . . . . . . . . . . . = . . . . . - . . . 379 a . i a . = r . . . = r . . . r . e . . . . . t . . . . . . . . = . . . . . . . p = . . . . q . . . 380 c . t m . r e . . = h e . . . a . r . . . . . t . . . . . . . . l . . . . . . . a r . . . . i . . . 381 h . e e . e f . . h i b . . . n . s . . . . . p . . . . . . . = = . . . = . . . g e . . . . m . . . 382 e . s . . b r = . g s a . . . c = - . . = . . . . . . . . . . e h . . . e . . . e v . . . . p . . . 383 . . p . . a e a . w t s . . . h u c . . e . . . . . . . . . . o t . . . x . . . r e . . . . o . . . 384 . . a . . s s u . e e e . . . - n a . . x . . . . . . . . . = l t . . = c . . . - r . . . . r . . . 385 . . c . . e h t = b d - . . = c a s . . c . . . . . . . . . = - p . . h h . . . l t . . . . t . . . 386 . . e . . - - o h - i b . . f h m e . . h . . . . . . . . = s p - . . g a . . . e - = . . . . . . . 387 . . . . . m r m t = t a . . l a e - . . a . . . . . . . . j s a p . = i n . = . g i r . . . . . . . 388 . . . . = q e v t h - s . . a n n C . . n . . . . . . . . o h t r . i g g . h . a n e . . . . . . . 389 . . . . c . p . p i b e . . g g d 3 . . g . . . = . . . . u - c o . n n e = t . c t n . . . . = . . 390 . . . . o . l . - s a - . . p e . . . . e . . . f . . . . r c h t . i o - = t . y e a . . . . h . . 391 . . . . n . a . c t s f . . r . . . . . - . . . i . . . . n l . o . t r o e p . . r m . . . . g . . 392 . . . . v . c . l e e l . . o . . . . . o . . l . . . . a o . c . . e b x - . . a e . . . . r . . 393 . . . . e . e . o d . a . . c . . . . . b = . . e . . . . l n . o . . . s c p . . c - . . . . c . . 394 . . . . r . - . n i . g . . e . . . . . s s . . s . . = = . e . l . . . m h r . . t d . . . . . . . 395 . . . . t . l . e t . . . . s . . . . . m t . . e . . p d . - . . . . . a a o . . i i . . . . . . . 396 . . . . - . o . - - . . . . s . . = . . a a . . t . . y i . r . . . . . r n x . . v r . . . . . . . 397 . . . . s . g . r n . . . . o . . u . . r t . . - . . 3 f . . . . . . . k g y . . e - . . . . . . . 398 . . . . p . - . . o . . . . r . . p . . k u . . g . . - f . . . . . . . e e . . . . m . . . . . . . 399 . . . . l . m . . - . . . . . . . - . . e s . . e . . c - . . . . . . . r - . = . . e . . . . . . . 400 . . . . i . e . . c . . . . . . . l . . r - . . n . . o u . . . . = . . s o = p . . r . = . . . . . 401 . . . . c . s . . h . . . . . . . o . . s r . . e . . m p . . . . b . . - b c u . . g . e . . . . . 402 . . . . e . s . . a . . . . . . . c . . - e . . r . . m g . . . . i . . c s o s . . e . o . . . . . 403 . . . . m . a . . n = . . . . . . a . . c v . . a . . a r . . . = s . . a m p h . . . . l . . . . . 404 . . . . a . g . . g c . . . . . . l . . a . . . t . . = a = . . c e . . s a y - . . . - . . = . . 405 . . . . p . e . . e o . . . . . . - . . s . . = e = . b d d . = o c . . e r . h . . . = h . . p = . 406 . . = . . . . . . . n . . . . . . c . . e . = e d c . u e i . m n t . . - k . t . . . e o . . u d . 407 . . p . . . . . . . f . . . . . . h . . - . e x . h . n . s . e t 3 . . D e . t . . x o . . l i . 408 . . u . . . . . . . l . . . . . . a . . C . x p . u . d . p . r r . . . 1 r . p = . . c k . . l f . 409 = = s . . . . . . . i . . . . . . n . . 2 . c o . r . l = a . g i . . . . s . . p = . h . . . - f . 410 p o h . . . . . . . c . . . . . . g . = . . h r . n . e r t . e b . . . . - . . u s . a . . . u - . 411 a b - . . . . . . . t . . . . . . e . s . . a t = . . - e c . - . . . . . c . . l i . n . . . p u . 412 r s h . . . . . . . . . . . . . . . . p . = n . m . . p b h . c . . . . . a . . l n . g . . . d n = 413 s o t . . . . . . . . . . . . . . . . a . d g . q . . h a . . o . . . . = s . . - g . e . . . a i r 414 e l t . . . . . . . . . . . . . . . . r . e e . - . . a s . . m . . . = n e . . b l . - . . . t f e 415 i e p . . . . . . . . . . . . . . . . s = b - . q . . s e . . m . . . s o - . . r e . o . . . e i b 416 n t - . . . . . = . . . . . . . . . . e = u o . p . . e - . . i . . . t t C . . a - . b . . . . e a 417 d e b . . . = . = . . . . . . . . . . - e g b . u . . s d . . t . . . r i 1 . . n h . s . . . . d s 418 e - u . . . s . c . . . . . . . . . . p n b s . s . . . e . . . . . . i f . . . c e . m . . . . . e 419 x c n = . . h . o . . . . . . . . . . r c u m . h . . . t . . . . . . p y = . . h a . a . . . . . - 420 = h d a . . o . n . . . . . . . . . . o o i a . - . . . a . . . = . . - - d . . . d . r . = . . . b 421 b a l d . . w . v . . . . . . . . . . f d l r . e . . . c . . . b . . c c i . . . . . k . e . . . o 422 o n e d . . - . e . . . . . . . . . . i i d k . x . . . h . = . u . . r h f . . . . . e . x . . . o 423 o g 1 . . . w . r . . . . . . . . . . l n d e . a . . . . . s . n . . o a f . . . . . r . c . . . k 424 k e . . = . o . t . . . . . . . . . . e g a r . c . . . . . y . d . = s n s . . . . . s . h . . . m 425 m s . . e . r . - = = . . . . = . . . s - g s . t . . . . . m . l . p s g t . . . . . - . a . . . a 426 a e . . x . k . h a e . . . . m . . . . a . - . . . . . . . l = e . u . e a . . . . . c . n . . . r 427 r t . . c . . . g u x . . . . q . . . . l . c . . . . . . . i h - . r . t . . . . = a . g . . . k 428 k - . . h . . . - d c . . . . - . . . . i a . . . . . . . n i t . g . = . . . . . e s = e . . = s 429 s e . . a . . . s i h = . . = s . . . . g = s . . . . . . . k s y . e . d . . . . . x e m - . . c . 430 - x . . n . . . t t a p . . = a . . . . n m e = . . . . . . s t p . . . i . . . . . c - q o . . o . 431 c c . . g . . . a - n a . . o f . . . . . q - p . . . . . . . e e = . . f . . . . . h D - b . . n . 432 u h . . e . . . r p g t . . b e . . . . = - B a . . . . . = . d . h . . f . . . . . a = g s . . v . 433 r = . . - = . . t a e c . . s t . = . . j q 5 t . . . . . h . i . i . . - . . . . . n d i m . . e . 434 r p . . o d . . r t - h . . o y . h . . o f . h . . . . . g . t . s . . b . . . . . g i t a . . r . 435 e a . . b r . . e h o b . = l . . g . . u o . s . . . . . w . - . t . . i . . . . . e r . r . . t . 436 n t . . s a . . v . b o . i e . . w = . r l . . . = . . . e . b . e . . n . . = . . - e . k = . - . 437 t c . . m w . . . . s m . m t . = = c . n d = . . e . . . b . o . d . . a . . s . . o c . e r . h . 438 . h . . a d . . . . m b . p e . e o = . a . m . . x = . . - . o . i . . r . . h . . b t . r e . g . 439 . b . . r a . . . . a - . o - . x b p . l . e . . c h . . c . k . t . . y . . o . = s a . s n . - . 440 . o . . k g . . . . r b . r t . c s a . - . r . . h i . . s . m . - . . - . = w . m m c . - a . s . 441 . m . . e . . . . . k = . t a . h m t . s . g . . a s . . p . a . n . . f . l - . q a c . c m . o . 442 . b = . r . . . . . e h . - g . a a h . h . e . . n t . . . . r . o . . i . o s . - r e . a e = u . 443 . - e . s . . . . . r i . m - . n r c = a . 7 . . g e . . . . k . n . . l . c t . e k s . s - b r . 444 . t x . - . . . . . s s . e c . g k o f r . . . . e d . . . . - . - . . e . k a = o e s . e m o c . 445 . l c . c . . . . . - t . r = . e e n i e . . . . - i . . . . m . c . . . . - c m l r . . - e o e . 446 . s h . a . . . . . c e . g c . - r f l . . . . . o t . . . . o . o . . . . b k q . s . . B r k . . 447 . . a . s . . . . . a d . e o . o s l e . . . . . b - . . . . t . m . . . . a . - . - . . 4 g m . . 448 . = n . e . . . = . s i . . p . b - i b . . . . . s d . . = . i . m . . = . d . q . c . . . e a . . 449 . c g . - . . . m . e t . . y . s e c r . . . . . m r . . e . = . u . . = . n . c . a . . . 1 r . . 450 . o e . C . . . e . - - . . - . m f t a . . = . . a o . . x . i . t . = e . e . l . s . = . . k . . 451 . n - . = . . . r . A o . . m . a f s n = . r . . r p . = c . n . = . f x = s . o . e . r . . s . . 452 . f o . p . . . g . 6 u . . o . r e - c p . e . . k . . s h . h . s . l c a s . n . = . e = . - . . 453 . i b . r . . . e . . t . . v . k c m h a . b . . e . = u a . e . h . a h d . . e . r . p h . m . . 454 . g s . o . . . - . = g . . e . e t e . t . a . . r . d b n . r . o g a d . . - . e . a g . e . . 455 . . m . f . . . d . p o . . - . r f r . h . s . . s . e r g . i . w = s n r . . h . b = i w . r . . 456 . . a . i . . . e . u i . . m . s l g . c . e . . - . b e e . . . u . g e . . t . a s r = . g . . 457 . . r . l . . . f . l n . . e . - a e = o . - . . c . u p - . = . . n . e m = . t . s p - c . e . . 458 . . k . e . . . a . l g . . r . c g . m n . m . . a . g o o . d . . i . - o c . p . e a s o . . . . 459 . . e . . = . . u . . . . . g . a . . q f . q . . s = b - b . e . . o . o v o . . . - r t m . . . . 460 . . r . . m . . l . . . . . e . s . . - l . - = . e p u m s = f . . n . b e n . . . e s r m . . . . 461 . . s . . q . . t . . . . . . . = . . q i = s b . = e = i m p a = . r . s - v . . = m e i i . . . = 462 = . - . . - . . . . . . . . . . m . . d c o k a . c n c s a u u e . e . m s e . . m p - p t . . . m 463 m . c . . m . . . . . . . . . . e . . e t r i d . l d o s r l l x . p . a i r . . q t i . - . . . e 464 e = a . e . . . . . . . . . . r . . l s i p - . o i m i k l t c . o . r m t . . - y m . m . . . r 465 r i s = . r . . . = . . . . . . g . . e - g . = . n n m n e - - h . . . k i - . . m c p . u . . = g 466 g d e b . g . . . p . . . . . . e . . t u b . e . e g i g r r p a . . . e l d . . i o o . l . . = e 467 e e = r . e . . . a . = . . . . - . . e p a . m . - . t . s . u n . . . r a a . . s m r . t . . w - 468 - n s a . . . . . r . e . . . . l . . . d c . p . u . - . - . s g . . s r t . . s m t . i . . o s 469 h t u n . . . . . e . x . . . = o . . . a k . t . p . u . c . h e . . = = . e . . i i . = p . . r u 470 a i b c . . . . . n . c . . . b c . . . t u . y . d . n . a . . - = . h d . s . . n t . i l . . k b 471 l f r h . . . = . t . e . . . u a . . . e p . - . a . r . = . . o r . t i . o . = g . . s e . . e r 472 t y e - . . . r . s . s . . g l . = . . - . g . t . e . e . . b e . t f . r . m f . s = . . = e 473 = = = = = = = = = = = = . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 474 i e s m m c o = b p h a . e c a r e e r e a m b a c s p e i i l u m d b r l i p c r m t e c i h p c 475 m o i q q a l i u u y u . x o m e x x e o m e u r a t a x m s a p a e o e o s a o e e o x o s = u o 476 p l m - - t d m n s b d = t n e l c t v l e r n b c a t c p s r d n b o q g s t m n r o c n s i l n 477 o - p q q . c p d h = i u d v n i h e s - n g d i h t h h o u g a i u k u t u c m a g l h v u s l v 478 r a l d q . g e = = h t n a = d n a n e u d e l t e u c a r e e t f g m i o e h i m e s a e e s - e 479 t d e i u . i x d r g - i t r - k n = t = - - e r - s o n = 6 f e e e a r p 1 . t e - . n r 1 u h r 480 - d - f e . . p i e w s f a e s . g r - s s r - a a - n g l 6 i - s = r e r 3 . t - c . g t 1 e t t 481 e . u f u . . - r p e u i . b u . e e o y u e v r b t f e o 0 = n t m k s o 0 . e a l . e - 7 5 t - 482 o = p . e . . b s o b b e . a b . - b u m b m s y u e l - c . u a = e s = c 6 . = f o . - c 5 8 p t 483 l s d . . . . r t - - r d . s r . o a t l r o - f s r i o a . r m m r - v e . = m t s . o l . 6 . a 484 . e a . . . = a a c r e - . = e = b s = i e v = i e s c b t . l e e g r = s = d q e e . b o . . . g 485 . r t . . . b n t o a p t . m p s s e t n p e m l . e t s e . - s r e e c s r o - r d . s n . . . = 486 . v e . . . a c e m w o e . q o p m - e k o . e = . . = m . . d . g 6 = o . e u q - h . m e . . . m 487 = e . = . . s h . p = . s . - . a = i m - . . r p . . n a . . o . e . i = . b b r m e . = b . . . a 488 u . . h . . i . . = h = t . s . r c s p p . . g u . = e = . . w . - . s i . a l e e a . p r . . n 489 p . . g . . c . . m i s . . y . s o s = l . . e s . a w b . . n . r . s s . s e n r d . a a . . = i 490 d . . w . . . = . e s p . . m . e n u c a . = 9 h . d c r . . l . e . u s . e = a g s = = n . . i f 491 a . = e . . . s . r t a . = l . - t e u = . l . v . d g a . . o . v . e u = - d m = . e r = = . s e 492 t . s b . . . t = g e r . m i . v e - s n . o . a . r i n . . a . e = 1 e i p i e g . o e u u = s s 493 e . p d . . . r e e d s = q n . e x n t e . g . r . e . c . = = . r r 8 5 m = f . l . l v n r s = t 494 - . a i = = . i o - i e r - k . = t o o w . - . s . m = h . m e . t e 0 2 p m f . o = f l b = c c . 495 = . r r s p . c l = = - e q s = n = = m e . = . = . o u = . e d = 2 b 2 = o e d . g k i o u c h a . 496 c . s s = e . = - c s = v g . d o r i = r . s = s . v p r . r i c . a . i r r i . - n l g n o e s . 497 h = e y g r . r c o = i = o . e - e s e c . p m u . e d e = g t l . s . s t g r . = o e = d n m e 498 a m - m p m . e = n s s d t . b s b s m = . a e b . . a v m e = o . e = s - e . . h w n e l v e c = 499 n a m = g i . v d f p s o o . i = a u p l . r r r . . t l a 1 c n . - d u u - . . g n = n = e s o b 500 g n e c . s . = i u a u c . . a a s e t o . s g = . . = o c 0 o e = = i e n r . . k . u c w = . l o 501 e i r o . s = e f s r e k . . = n e 1 y = . e e m . = p g t = n - u r f = k e = . . . n o e d = l o 502 l f = n . i m m f e s 1 e . . r c - = - j . = 2 e . m a - e c v c p e f t n v d . . . r d b i h i k 503 o e i v . o q p - d = 8 = . . e e = m f o . l . r . a m = o = = d v - r = e i . . . e e s f g s m 504 g s s = . n - t = - m 7 a . = b = p e = u . i . g . n = m i n p r a s = = p r f = = . l . u f w i a 505 = = s e . = q n = e = r . m a c a r b r = = . e = i f a s v r e t e e i u t f r b . = b - e o r 506 i d u x . a = = e u r d c = i = o t g d n d u . 5 e f i p s = o v e t o s l . - e = = d = . = b = = 507 s i = e . t i e s s g i h h = b = = e = a i i = = x = l i u r = = - - l s l . c v d i e d = i - r a 508 s f w c . = s m t e e f i g e a d x = w = r = l d t m = n = e s r i d - u - = o = e s b e b s b e n 509 u = i u . s s p e = = f v = x d i d f a m s c r o q f d l v e = = = p u s s u b a s = v 510 e m t s u h e e d - g i o c - u e f e v d u h i y u c s e 511 4 - p . x u m e r 512 . 513 . 514 . 515 . 516 . 0 1 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 2 c s s o s o r l l m c g l i o r s b r h u c s k r m l m b c m m g m c p m m t c l c r c o a b r s t 3 o u h b u b e a o q h l a m b e u u e g p o t e e e a q o o e e r q l u q v r o f o e o b n i u u a 4 m b e s b s v r g . e o r p s b b n n h d m r y v r r - o p r r a - o s - - a n s n v n s n s n b g 5 m r l o r o s g . . c g g o m a r d a a a m i w s g g s k y g g f h n h h c n v . v e v o o e - r . 6 a e v l e l e e . . k . e r a s e l m v t i p o e e e u m t e e t e e - e p s e . e r e l t c t e . 7 n p e e p e t f . . - . f t r e p e e e e t . r t - f b a r - - . a . w a - p r . r t r e a t e p . 8 d o . t o t . i . . p . i . k - o 2 - . - - . d 2 t i r r a c f . d . a d s l t . t . t t t . s o . 9 - - . e . e . l . . y . l . e o - - m . b a . . . o l e k c h o . e . r e t a - . - . - e e . t - . 10 t g . - . . . e . . l . e . r b s e e . r m . . . o e p s e a r . r . n r - n f . s . g - . . s d . 11 e i . b . . . s . . i . s . - s v x r . a e . . . l s o . - n c . - . . - d t i . v . i d . . . e . 12 m t . u . . . . . . n . - . t o n c g . n n . . . s - . . h g e . d . . f i . l . n . t i . . . e . 13 p . . n . . . . . . t . m . e l . h e . c d . . . . u . . e e . . a . . r f . e . - . . v . . . p . 14 l . . d . . . . . . . . i . m e . a 2 . h . . . . . p . . u d . . t . . o f . m . s . . e . . . - . 15 a . . l . . . . . . . . s . p t . n . . e . . . . . d . . r e . . e . . m . . a . i . . r . . . n . 16 t . . e . . . . . . . . c . l e . g . . s . . . . . a . . i l . . . . . . . . p . n . . g . . . e . 17 e . . - . . . . . . . . . . a . . e . . . . . . . . t . . s e . . . . . . . . . . k . . e . . . s . 18 . . . s . . . . . . . . . . t . . . . . . . . . . . e . . t t . . . . . . . . . . . . . n . . . t . 19 . . . t . . . . . . . . . . e . . . . . . . . . . . . . . i e . . . . . . . . . . . . . t . . . e . 20 . . . r . . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . . . . . . . d . 21 . . . i . . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . . . . . . . - . 22 . . . p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c . 23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h . 24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a . 25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n . 26 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g . 27 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . 28 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = 114 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r 115 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 116 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b 117 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 118 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . = s 119 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r . f e 120 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . i - 121 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b . l c 122 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a . e o 123 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = s . s l 124 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . t e . e l 125 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a - . t a 126 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . . . . g s . . p 127 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b . . . . s c . . s 128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . . a . . . . . e . . e 129 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c . . c . . . . . n . . . 130 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . k . . . = . a . . . 131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n . . o = . . m . r . . . 132 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = s . = u h . . q . i . . . 133 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p o . t t o = . - . o . . . 134 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h r . r . o c . g . - . . . 135 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . . . a . . e . k h . u . g . . . 136 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . c . . s . . e . . e . a . l . . . 137 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r . o = . = e . . m . . c . r . o . . . 138 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . m a . e s . . a . . k . d . b . . . 139 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n = m u . x - . . n . . - . s . a . . . 140 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a b i t . t e . . i . . c = . . l . . . 141 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m i t o . e x . f . . o m . . . . . . 142 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e s - m . n c . = e . . d q . . . . . . 143 . . . . . . . . . . . . . . . . . . . . . . . . . . . = . . . e i v . s h . c s . . e - . . . . . . 144 . . . . . . . . . . . . . . . . . . . . . . . . . . . b . . . c n . . i a . o t . . . q . . . . . . 145 . . . . . . . . . . . . . . . . . . . . . . . . . . . u . . . t t . . o n . m . . . . p . . . . . . 146 . . . . . . . . . . . . . . . . . . . . . . . . . . . n . . . 2 e . . n g . m . . . . u . . . . . . 147 . . . . . . . . . . . . . . . . . . . . . . . . . . . d . . . . r . = . e . i . . . . s . . . . . . 148 . . . . . . . . . . . . . . . . . . . . . . . . . . . l = . . . a . n . . . t . . . . h . . . . . . 149 . . . . . . . . . . . . . . . . . . . . . . . . . . . e h = . . c . e . . . . . . . . - . . . . . . 150 . . . . . . . . . . . . . . . . . . . . . . . . . . . . i b . . t . w . . . . . . . . f . . . . . . 151 . . . . . . . . . . . . . . . . . . . . . . . . . . . . s r . . i . b . . . . . . . . a . . . . . . 152 . . . . . . . . . . . . . . . . . . . . . . . . . . . . t a . . v . r . . . . . . . . i . . . . . . 153 . . . . . . . . . . . . . . . . . . . . . . . . . . . . e n . . e . a . . . . . . . . l . . . . . . 154 . . . . . . . . . . . . . . . . . . . . . . . . . . . . d c . . . . n . . . . . . . . . . . . . . . 155 . . . . . . . . . . . . . . . . . . . . . . . . . . . . i h . . . . c . . . . . . . . . . . . . . . 156 . . . . . . . . . . . . . . . . . . . . . . . . . . = . t e . . . . h . . . . . . . . . . . . . . . 157 . . . . . . . . . . . . . . . . . . . . . . . . . . h . - s . . . . . . . . . . . . . . . . . . . . 158 . . . . . . . . . . . . . . . . . . . . . . . . . . i . f . . . . . . . . . . . . . . . . . . . . . 159 . . . . . . . . . . . . . . . . . . . . . . . . = . s . o . . . . . . . . . . . . . . . . . . = . . 160 . . . . . . . . . . . . . . . . . . . . . . . . i . t . l . . . . . . . . . . . . . . . . . . s . . 161 . . . . . . . . . . . . . . . . . . . . . . . . s . e . d . . . . . . . . . . . . . . . . . . t . . 162 . . . . . . . . . . . . . . . . . . . . . . . . s . d . . . . . . . . . . . . . . . . . . . . a . . 163 . . . . . . . . . . . . . . . . . . . . . . . . u . i . . . . . . . . . . . . . . . . . . . . t . . 164 . . . . . . . . . . . . . . . . . . . . . . . . e . t . . . . . . . . . . . . . . . . . . . . u . . 165 . . . . . . . . . . . . . . . . . . . . . . . . 3 = - . . . . . . . . . . . . . . . . . . . . s . . 166 . . . . . . . . . . . . . . . . . . . . . . . . 0 s o . . . . . . . . . . . . . . . . . . . . . . . 167 . . . . . . . . . . . . . . . . . . . . = . . . 8 s b . . . . . . . . . . . . . . . . . . . . . . . 168 . . . . . . . . . . . . . . . . . . . . r . . = 4 h s . . . . . . . . . . . . . . . . . . . . . . . 169 . . . . . . . . . . . . . . . . . . . . e . . t . . o . . . . . . . . . . . . . . . . . . . . . . . 170 . . . . . . . . . . . . . . . . . . . . b . . r . . l . . . . . . . . . . . . . . . . . . . . . . . 171 . . . . . . . . . . . . . . . . . . . . a . . e . . e . . . . . . . . . . . . . . . . . . . . . . . 172 . . . . . . . . . . . . . . . . . . . . s . . e . . t . . . . . . . . . . . . . . . . . . . . . . . 173 . . . . . . . . . . . . . . . . . . . . e . . d . . e . . . . . . . . . . . . . . . . . . . . . . . 174 . . . . . . . . . . . . . . . . . . . . - . = i . . . . . . . . . . . . . . . . . . . . . . . . . . 175 . . . . . . . . . . . . . . . . . . . . a . h s . . . . . . . . . . . . . . . . . . . . . . . . . . 176 . . . . . . . . . . . . . . . . . . = . b g c . . . . . . . . . . . . . . . . . . . . . . . . . . 177 . . . . . . . . . . . . . . . . . . s . o = w o . . . . . . . . . . . . . . . . . . . . . . . . . . 178 . . . . . . . . . . . . . . . . . . s . r f e v . . . . . . . . . . . . . . . . . . . . . . . . . . 179 . . . . . . . . . . . . . . . . . . h . t e b e . . . . . . . . . . . . . . . . . . . . . . . . . . 180 . . . . . . . . . . . . . . . . . . - . . t d r . . . . . . . . . . . . . . . . . . . . . . . . . . 181 . . . . . . . . . . . . . . . . . . b . . c i y . . . . . . . . . . . . . . . . . . . . . . . . . . 182 . . . . . . . . . . . . . . . . . . u . . h r . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 . . . . . . . . . . . . . . . . . . n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 . . . . . . . . . . . . . . . . . . d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 . . . . . . . . . . . . . . . . = . l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 . . . . . . . . . . . . . . . . e . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 . . . . . . . . . . . . . . . . o = 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 . . . . . . . . . . . . . . . . l s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 . . . . . . . . . . . . . . . = . t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 . . . . . . . . . . . . . . . l . d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 . . . . . . . . . . . . . . . a . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 . . . . . . . . . . . . . . . r . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 . . . . . . . . . . . . . . . g . c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 . . . . . . . . . . . . . . . e . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 . . . . . . . . . . . . . . . f . v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 . . . . . . . . . . . . . . . i . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 . . . . . . . . . . . . . . . l . r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 . . . . . . . . . . . . . . . e . y . = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 . . . . . . . . . . . . . . . s . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 . . . . . . . . . . . . . . = - . . . b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 . . . . . . . . . . . . . . m w . . . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 . . . . . . . . . . . . . . q i . . . h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 . . . . . . . . . . . . . . - r . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 . . . . . . . . . . . . . . q e . . . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 . . . . . . . . . . . . . . p p . . . t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 . . . . . . . . . . . . . . u r . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 . . . . . . . . . . . . . . s o . . . r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 . . . . . . . . . . . . . . h t . . . y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 . . . . . . . . . . . . . = - o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 . . . . . . . . . . . . . h e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 . . . . . . . . . . . . . e x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 . . . . . . . . . . . . . l a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 . . . . . . . . . . . . . p c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 . . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . . = . . . . . . . . . . . . . . 216 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . . . 217 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . . . . . 218 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . n . . . . . . . . . . . . . . 219 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r . v . . . . . . . . . . . . . . 220 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . e . . . . . . . . . . . . . . 221 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b . r . . . . . . . . . . . . . . 222 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a . t . . . . . . . . . . . . . . 223 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s . - . . . . . . . = . . . . . . 224 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . . e . s . . . . . . . b = . . . . . 225 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m . . - . v . . . . . . . h p . . . . . 226 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . q . = c . n . . . . . . . e h . . . = . 227 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - . e a = - . . . . . . . a a . . . h . 228 . . . . . . . . . . . = . . . . . . . . . . . . . . . . . . q = x c a s . . . . . . . d s . . . i . 229 . . . . . . . . . . . h . . . . . . . . . . . . . . . . = . n u t h r o . = . . . . . s e . . . s . 230 . . . . . . . . . . . t . . . . . . . . . . . . . . . = p . e n d e c u . c = . = . . . s . . . t = 231 . . . . . . . . . . . t . . . . . . . . . . . . . . . s a . w c i . h r . h a . s . . . . = . . e r 232 . . . . . . . . . . . p . . . . . . . . . . . . . . . p t . . o f . i c . e l . h = . . . a . . d e 233 . . . . . . . . . . . s . . . . . . . . . . . . . . . a c . . m f . v e . c i = o i . . . c . . i b 234 . . . . . . . . . . . . . . . . . . . . . . . . . . . r h . . m . . e . = k a m w m . . . l . . t a 235 . . . . . . . . . . . . . . . . . . . . . . . . . . . s b = . i . . . . g - s e - p . . . . = . - s 236 . . . . . . . . . . . . = . . . . . . . . . . . . . . e o h . t . . . . i p . r w o . . . . r . a e 237 . . . . . . . . . . . . c . . . . . . . . . . . . . . . m t . . . . . . t y . g o r . . . . e . r - 238 . . . . . . . . . . . . o . . . . . . . . . . . = . . . b t . . . . . . - f . e r t . . . . b . g d 239 . . . . . . . . . . . . n . . . . . . . . . . . c . . . . p . . . . . . e l . 1 k - . . . . a . u e 240 . . . . . . . . . . . . v . . . . . . . . . . . h . = . . - . . . . . . x a . . . g . . . . s . m s 241 . . . . . . . . . . . . e . . . . . . . . . . . e . r . . b . . . . . . p k . . . i . . . . e = e t 242 . . . . . . . . . . . . r . . . . . . . . . . . c . e . . a . . . . . . o e . . . t . . . . - b n . 243 . . . . . . . . . . . . t . . . . . . . . . . . k . b . . d . . . . . . r s . . . . . . . . p u t . 244 . . . . . . . . . . . . - . . . . . . . . . . . - . a . . - . . . . . . t . . . . . . . . . a n s . 245 . . . . . . . . . . . . h . . . . . . . . . . . m . s . . s . . . . . . . . . . . . . . . . r d . . 246 . . . . . . . . . . . . g . . . . . . . . . . . o . e . . e . . . . . . . . . . . . . . . . a l . . 247 . . . . . . . . . = . . - . . . . . . . . . . . d . - . . r . . . . . . . . . . . . = . . . m e . . 248 . . . . . . . . . o . . s . . . . . . . = . . = u = n . . v . . . . . . . . . . . . m . . . e - . . 249 . . . . . . . . . b . . i . . . . . . . w . = m l c e . . e . . . . . . . . . . . . q . . . t r . . 250 . . . . . . . . . s . . n . . . . . . . a . t q e o w . . r . . . . . . . . . . . . - . . . e . . . 251 . . . . . . . . = o . . k . . . . . . . l . r - - m a . . . . . . . . . . . . . . . q . . . r . . . 252 . . . . . . . . h l . . . . . . . . . . k . e q i m n . . . . . . . . . . . . . . . i . . . s . . . 253 . . . . . . . . g e . . . . . . . . = . . . e r m a c . . . . . . . . . . . . . . . m . . . . . . . 254 . . . . . . . . w t . . . . . . . . r . . . d e p n e . . . . . . . . . . . . . . . p . . . . . . . 255 . . . . . . . . e e . . . . . . . . e . . = i f o d s . . . . . . . . . . . . . . . o . . . . . . . 256 . . . . . . . . b - . . . . . . . . m . . r s r r s t . . . . . . . . . . . . . . . r . . . . . . . 257 . . . . . . . . - d . . . . . . . . o . . o c e t e o . . . . . . . . . . . . . . . t . . . . . . . 258 . . . . . . . . c i . . . . . . . . v . . l o s s r r . . . . . . . . . . . . . . . . . . . . . . . 259 . . . . . . . . o s . . . . . . . . e . . l v h . v . . . . . . . . . . . . . . . . . . . . . . . . 260 . . . . . . . . m t . . . . . . . . . . . b e . . e . . . . . . . . . . . . . . . . . . . . . . . . 261 . . . . . . . . m r . . . . . . . . . . . a r . . r . . . . . . . . . . . . . . . . . . . . . . . . 262 . . . . . . . . a i = . . . . . = . . . . c y . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 . . . . . . . . n b e . . . . . r . . . . k - . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 . . . . . . . . d u x . . . . . e . . . . . l . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 . . . . . . . . s t c . . . . . b . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 . . . . . . . = . e h . . . . . a = . . . . g . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 . . . . . . . r . d a . . . = . s u . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 . . . . . . . e . . n . . . r = e n . . . . c . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 . . . . . . . b . . g . . . e r - a . . . . y . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 . . . . . . . a . . e . . . b e n m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 . . . . . . . s . . - . . . a b a e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 . . . . . = . e . . o . . . s a m n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 . . . . . c . - . . b . . . e s e d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 . . . . . o . i . . s . . . - e d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 . . . . . n . n . . m . . . p - - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 . . . . . v . t . . a . . . u m b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 . . . . . e . e . . r . . . l q r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 . . . . . r . r . . k . . . l . a . . = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 . . . . . t . r . . e . . . . . n . . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 . . . . = - . u . . r . . . . . c . . h . . . . . . . . . . . . . . . = . . . . . . . . . . . . . . 281 . . . . i s . p . . s . . . . . h . . a . . . . . . . . . . . . . . . d . . . . . . . . . . . . . . 282 . . . . m v . t . . - . . . . . e . . r . . . . . . . . . . . . . . . i . . . . . . . . . . . . . . 283 . . . . p n . i . . c . . . . . s . . e . . . . . . . . . . . . . . . r . . . . . . . . . . . . . . 284 . . . . o - . o . . a . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . . . 285 . . . . r m = n . . s . . . . . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . 286 . . . . t o p s . . e . . . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . 287 . . . . - v u . . . - . . = . . . . . . . . . . . . . . . . . . . = . t . . . . . . . . . . . . . . 288 . . . . b e s . . . A . . i . . . . . . . . . . . . . . . . . . . b . e . . . . . . . . . . . . . . 289 . . . . y . h . . . 3 . . m . . . . . . . . . . . . . . . . = . . u . - . . . . . . . . . . . . . . 290 . . . . p . . . . . . . . p . . . . . . . . . . . . . . . = r . . n . r . . . . = . . . . . . . . . 291 . . . . a . . . . . . . . o . . . . . . . . . . . . . . . r e . . d . a . . . . p . . . . . . . . . 292 . . . . s . . . . . . . . r . . . . . . . . . . . . . . . e n . . l . c . . . . a . . . . . . . . . 293 . . . . s . . . . . . . . t . . . . . . . . . . . . . . . b a . . e . e . . . . r . . = . . . . . . 294 . . . . . . . . . . . . . - . . . . . . . . . . . . . . . a m . = 2 . . . . . . s . . s . . . . . . 295 . . . = . . . . . . . . . m . . . . . . . . . . . . . = . s e . r - . . . . . . e . . h = . . . . . 296 . . . l . . . . . . . . . e . . . . . . . . . . . . . h . e - = e r . . . . . . - . . o h . . . . . 297 . . . f . . . . . . . . . r . . . . . . . . . . . . . t . - m o b e . . . . . . d . . w g . . . = = 298 . . . c . . . . . . . . . g . . . . . . . . . . . . . t . r e b a m . . . . . . a = . - w . . . r s 299 . . . o . . . . . . . . = e . . . . . . . . . . . . . p . e r s s o . . . . = . t b . s e . . . e t 300 . . . n . . . . . . . . h . . . . . . . . . . . = . . . . n g m e t . . . . h . e u . t b . = . b a 301 . . . v . . . . . . . = i . . . . . . . . . = = h . . . . a e a - e . . = . a = . n . a - . h = a t 302 . . . e . . . . . . . e s . . . . . . . . . b s i . = . . m 1 r b - = . r . r b . d . c s . i d s u 303 . . . r . . . . . . . x t . . . . . . . . . o u s . a . . e . k a c h . e . d r . l = k y = s e e s 304 . . . t . . . . . . . c e . . . . . . . . . o b t . d . = . . e s h t . s . l a . e c . m f t b - - 305 . . . . . . . . . . . h d . . . . . . . = . k r e . d . m . . r e a t . o . i n . - o . r l e u b c 306 . . . . . . . . . . . a i . . . . . . . h . m e d . . . q . . s - n p . l = n c . p n . e a d g o o 307 . . . . . . . . . = . n t . . . . . . . i . a p i = . . - . . - f g - . v c k h . h v . v g i c o l 308 . . . . . . . . . l . g - . . . . . . . s . r o t m . . s . . e l e b . e l s - . a e . . p t o k o 309 . . . . . . . . . a . e n . . . . . = . t . k - - q . . a . . f a g u . . o . c . s r . . r - m m r 310 . . . . . . . . = r . - o . . . . . r . e . s r f - . . f . . f g r n . . n . h . e t . . o e m a . 311 . . = . . . . . d g . o n . . . . . e . d . - e o q . . e . . e . o d . . e . a . s - . . c d a r . 312 . . b . . . . . i e . b - . . . . . b . i = m c l r . . t . . c . u l . . b . n . . s . . e i n k . 313 . . u . . . . . f f = s c . . . = . a . t b e u d e . . y . . t . p e . . u . g . . v . . s t d s . 314 . . n . . . . . f i g m o . . . r . s . - o r r - f . . . . . f . . 1 . . n . e . . n . . s . s . . 315 . . d . . . . . - l i a m . . . e . e . c o g s n r . . . . . l . . . . . d . . . . - . . o . . . . 316 . . l . . . . . i e t r m . . . n = - . o k e i o e . . . . . a . . . . . l . . . . b . . r . . . . 317 . . e . . . . . g s h k u . . . a c d . m m . o n s . . . . . g . . . . . e . . . . r . . . . . . . 318 . . - . . . . = n - e e t . . . m o e . m a . n - h . . . . . . . . . . . s . . . . a . . . . . . . 319 . . t . . . . a o c l r e . . = e p t . u r . . c - . . . . . . . . . . . . . . . . n . . . . . . . 320 . . y . . . . u r a p s . . . g - y a . t k . . o r . . . . . . . . . . . . . . . . c . . . . . . . 321 . . p . . = . d e c . - . . = e d . c . e s . . m e . . . . . . . . . . . . . . . . h . . . . . . . 322 . . e . . m . i - h . c . . c n i . h . . - . . m p . . . . . . . . . . . . . . . . e . . . . . . . 323 . . . . . e . t w e . a . = o e r . . . . c . . u l . . . . . . . . . . . . . . . . s . . . . . . . 324 . . . . . r . - h . . s . o m r - . . . . u . . t a . . . . . . . . . . . . . . . . . . . . . . . . 325 . . . . . g . p i . . e . b m a m . . . . r . . e c . . . . . . . . . . . . . . . . . . . . . . . . 326 . . . . . e . a t . . - . s i l e . . . . r . . . e . . . . . . . . . . . . . . . . . . . . . . . . 327 . . . . = - . t e . . A . o t d r . . . . e . . . - . . . . . . . . . . . . . . . . . . . . . . . . 328 . = . . c t . h s . . 1 . l - e g . . . . n . . . l . . . . . . . . . = . . . . . . . . . . . . . . 329 . c . . o y . . p . . . . e i l e . . . . t . . . o . . . . = . . . . g . . . . . . . . . . . . . . 330 . h . . n p . . a . . . . t n t . . . = . . . . . g . . . . u . . . . r . . . . . . . . . . . . . . 331 . e . . t e . . c . . . . e t a . . . m . . = . . - . . . . r . . . . e . . . . . . . = . . . . . . 332 . c . . r s = . e . . . . - e . . . . e . . h . . m . . . . l . . . . p . . . . . . . l . . . . . . 333 . k . . i . i . . . . . . c r . . . . r . . g . . e . . . . - . . . . . . . . . . . . f . . . . . . 334 . - . . b . n . . . . . . h a . . . . g . . w . . s . . . . r = . . . . . . . . . . . s . . . . . . 335 . p . . - . c . . . . . . e c . . . . e . . e . . s . . . . e m . . . . . . . . . . . - . . . . . . 336 . y . . p . o . . . . . . c t . . . . - . . b . . a . . . . v e . . . . . . . . = . . l . . . . . . 337 . 3 . . e . m . . . . . . k i . . . . d . . - . . g . . . . . r . . . . . . . . r . . a . . . . . . 338 . - . . r . i . . . . . . h v . . . . e . . j . . e . . . = . g . . . . . . . . e . . r . . . . . . 339 . c . . f . n . . . . . . e e . . . . f . . s . . . . . . h . e . . . . . . . . b . . g . . . . . . 340 . o . . . . g . . . . . . a - . . . . a . . o . . . = . . i . - . . . . . . . . a . . e . . . . . . 341 . m . . . . - . . . . . . d c . . . . u . . n . . . p . . s . c . = . . . . = . s . . f . . . . . . 342 . p . . . . o . . . . . . s u . . . . l . . . . . . u . . t . r . p . . . . r . e . . i . . . . . . 343 . a . . . . u . . . . . . . r . . . . t . . . . . . l . = e . i = a . . . . e . - . = l . . . = . . 344 . t . . . . t . . . . . = . s . . . . . . . . . . . l . s d . s u g . . . . b = c . p e . = . s . . 345 . . . . . . g . . . . . p . e . . . . . . . . . . . - . y i . s p e . . . . a p o = u s . c . s = . 346 . . . = . . o . = . . = u . s . . . . . . . . . = . u = m t . - - r = . = . s a n s s . . l . h p = 347 . . . p . . i . i . . u s . . . . . = . . . . . c = p a l - . c l . c . s . e t f u h . . o . - u r 348 . . . r . . n . n = . p h . . . . . s . . . . . o e d d i n . r o . o . t . - h l b - . . n . c l e 349 . . = o . . g . i c = g - . . . . . t . = . . . n x a d n o . o c . n . r . m c i r h . = e . l l b 350 . . p f . . . . t h p r h . . . = . a . w . = v c t r k - . s a . v . i = q o c e t . b - = o - a 351 . . u i . . . . . e a a t . . . s . t . i = . u e h e e s c . s l . e . p h - n t p t . u r e n b s 352 . . l l . . . . . c t d t . . . p . i = n m . n r a . m . h . . - . r . - g s f s o p . n . x e r e 353 . . l e . . . . . k h e p . . . a . c c 3 q . i t n . o . a . . c . t . c w k l . - . . d . c - a - 354 . . . . . . . = . - c - - . . . r = - h 2 - . o - g . v . n . . h . - . r e i i . m . . l . h r n e 355 . . . . . . . c . h o r b . . . s e h e t q . n s e . e . g . . a . h . o b p c . i . . e . a . c m 356 . . . . . . . a . e n e u . . . e x t c e f . r p - . - . e . . n . g . s - . t . s . . 2 . n . h p 357 . . . . . . . c . l f p n . = . - c t k x o . e l o . s . . . . g . - . s d . s . s . . - . g . . t 358 . . . . . . . h . p l o d . e = p h p - t l . p i b . i . . . . e . s . . i . - . i . . f . e . . y 359 . . . . . . . e . . i . l . x d r a . c . d . o c s . m . . . . . . o . . f . u . n . . o . - . . c 360 . . . . . . . - . . c . e . c i o n . o . . . . e m . i . . . . . . u . . f . p . g . . r . o . . o 361 . = . . . = . a . . t . 1 . h f f g . n . . . . m a . l . . . . . . r . . s . d . . . . m . b . . m 362 . b . . . t . b . . s . . . a f i e . f . . . . a r . a . . . . . . c . . . . a . . . . a . s . . m 363 . l . . . o . u . . - . . . n s l - . i . . . . p k . r . . . . . . e . . . . t . . . . t . m . . i 364 . a . . . o . s . . m . . . g t e o . g . . = . . e . . . . . . . . . . . . . e . . . . . . a . . t 365 . c . . . l . e . . e . . . e a s b . . . . h . . r . . . . . . . . . = . . . . . . . . . . r . . . 366 . k . . . s . . . . r . . . - t . s . . . . t . . s . . . . . . . . . d . . . . . . . . . . k . . . 367 . b . . . . . . . . g . . . o . . m . . . . t . . - . . . . . . . . . e . . . . . . . . . . e . . . 368 = o = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 369 c x h c b p e h m m g g i c e r e f e c e p c m m o l d e m h p c s m c d e c e h p c n p g v h e m 370 o . g o i u x g e q l e 1 l x e o n x o x a o e e r o i x q g u o i q o r x o x i e h o a e e i x q 371 n . i n s r c w r - o n 8 o p v l c c n c t n r r i g s c - w l p n - m a c n c g n u t g n r s c - 372 v . g v e g h e g q b d n n o e - a h v h h v g g g - p h m e l y g q m w h v h h d r i e d i t h m 373 e . n e c e a b e d a o . e r r h c a e a s e e e b l a a e b - - l c i d a e a l i n f r o f e a i 374 r . o r t . n - - e l c . - t t o h n r n . r - - a i t n r . r m e l t a n r n i n . y - c y d n s 375 t . r t 3 . g f h l o - . u . - o e g t g . t s l c n c g g . . o - o - g g t g g g . . l - . i g s 376 - e - . . e i a e p r . p . i k . e - e . - u o k e h e e . . v h n u . e . e h . . . e z . t e i 377 s = . h . . - l l t t u . d . n . . - d - . s b c u r . - . . . e e e n . - . - t . . . g h . - - n 378 v e . g . . o e t e s . . a . t . . o a o . v r a p a . o . . . - a - r . o . o . . . . a _ . o o g 379 n x . - . . b l . . . . . t . e . . b t b . n e l - n . b . . . m d h e . b . b . . . . c T . u b f 380 - c . s . . s o . . . . . e . r . . s e s . - p . c g . s . . . e . t s . s . s . = . . y W . t s i 381 s h . t . . m g . . . . . - . a . . m s m . e o . o e . m . . . r . t o . m . m . g . . . . . g m l 382 t a . a . . a . . . . . . o . c . . a o a . n s . n . . a . . . g . p l . a . a . e . . . . . o a e 383 a n . r . . r . . . . . . = . t . . r r r . c . . f . . r . . . e . . v . r . r . n . . . . . i r s 384 r g . t . . k . . . . . . e . i . . k = k . o . . l . . k . . . . . . e . k . k . d . . . . . n k . 385 t e . r . . e . . . . . . x . v . . e o e . d . . i . . e . . . . . . d . e . e . o . . . . . g e . 386 r - . e . . r . . . . . . c . e . . r b r . i . . c . . r . . . . . . . . r . r . c . . . . . . r . 387 e o . v . . s . . . . . . h . . . . s s s . n . = t . . s . . = . . . . . s . s . - = . . . . . s . 388 v b . . . . - . . . . . . a . . . . - o - . g . h . . . - . . g . . . . . - . - . p g . . . . . = . 389 . s . . . . c . . . . . . n . . . . c l c . . . i . . . c . . e . . . . . . = . t e . . . . . g . 390 . m . = . . a . = . . . . g . = = . a e a . . . s . = . a . . n . = . . . = . w . _ n . . . . . e . 391 . a . g = . s = d . . . . e . i e . s t = . . . t = c . = = . d . p . . . e . i . B d . . . . . n . 392 . r . e b = = h i . . . . - . d x . e e h = . = e c o . d g . o . u . . . o . r . R o . = . . . d = 393 . k . n u e c i f . . = . o = e c . - - t b = f d o n . i e . c = l . . . l . e . . c . g . . . o e 394 . e . d n x o s f . . r . b p n h . A c t r g i i n v . r n . - u l . = = - . p . . - = e = . . c m 395 . r . o d c n t - . . e . s a t a . 5 h p a e l t v e . e d . d p - . m m p . r . . e g n m = = - p 396 . s . c l h f e u . . v . m r i n . = a - n n e - e r . c o = a d p . q q a . o . . l e d e m e s t 397 . = . - e a l d n . . l . a e f g = m n p c d s b r t . t c m . a u = - - t . t . . . n o r q x v y 398 . m . j 2 n i i i . . o . r n y e c q g r h o e a t - . a - q . t l h g q c = o . . . d c g - c . - 399 . e = a - g c t f = . g . k t . - a - e o - c t s - h = c f - . e l i i r h e . = . . o - e e h . g 400 = r h . m e t - i d = - . e s . o t q s t o - - e s g s c r s . - - s t e . x . s = . c i - o a . r 401 g g i . u - . b e i i m . r . . b . q e o p r g . v - u e . y . n c t . n . c . t d . . t c l n . o 402 e e s . l o . o d f s m . s . . s . u t c t o e . n s b s . m . a o e . a . e . a i . . . o . g . u 403 n - t . t b . o . f s a = - . . m . e - o i . n . - v r s . l . m r d . m . s . t f . . . m . e . p 404 d c e . i s . k . - u p r c . . a . u = l o . e . t n e . . i . e r i . e . s . u f . . . m . - . . 405 o l d . p m . m . b e i e = . . r . e i . n . r . a . p . . n . s u t . . . i . s - . . . i . o . = 406 c o i . l a . a . i 6 n p h . . k . . n . . . a . g . o . . k = . p - . . . v . - c . . . t . b . j 407 - s t . e r . r . n 6 d a t . . e . . s . . . t . s . - . . s e . t d . . . e . r o . . . . . s = o 408 z e - . - k . k . a 0 e i t . . r . . t . . . e = . . r . . . n . i r . . . - . e l = . . . . m s u 409 h d n . c e . - . r . x r p . . s . . a . . . d j . . e . . . c . o o . . . m . v o b . . . . a h r 410 _ h o . h r . m . y . . - - = . = . . l . . . . o . . l . . . o . n p . . = e . . r u . . . . r o n 411 C e n = a s . o = - . . s b f . l . . l . . . . u . . a . . . d . . . . . i r . . . g . . . . k w a 412 N a - d n - . = c f . . t r l . o . . . . . . = r = . t = . . i . = . . . s = = . . z . . . . e . l 413 . d c i = = . l o i . . r a a . c . . . = . . c n s . i m = . n . i . = . s r r . . i . . . . r . - 414 . s o f b i = o m l . . i n g . a . . . e . . o a i = v e s . g . s . c . u e e . . l . . . . s . s 415 . . m f a s u g p e . . p c s . t . . . x . = n l m m = r p . . = s = h . e b n . . = = . . = = . h 416 . . m - s s n t l . . . . = . . e . . . t . e v . p e e g a . . d u l e . 6 a a = . c r = = g c . a 417 . . = c i u i o e = = . . h . . . . . . d = x e . l r n e r . . e e o c . 7 s m l . o e c i e h . r 418 . . c h c e f p t m c . = g . . . = . . a m c r . e g c - s . . b 1 c k . 2 e e o . n b h m n e . e 419 . = o a . 5 i r i e o . r w . . . g . . t q h t . - e o r e . . u 1 k - . . - - g = t u e p d c . . 420 . r n n . 8 e o o r m . e e . = . e . . a - a - . u - d e - . . g 7 - s . = i a e a r i c e o k . . 421 . = f g . 6 d c n g m . b b . p . t . = . p n c . p r i v i . . b 5 b h = r n f x u i l k x c - . = 422 = q i e . . - = . e i . a - . u . b . m . u g l . d e n e m = . u . a b o e m t c d b d - p - e = h 423 d r g . . . t m . - t . s c . l . u = q . l e o . a m g r p c = i . d a b b e e h i . s c - d x n g 424 e e . . . . e e . i - . e s . l . n d - . l - n = = o - t o h s l . n n s a m r a t . t o b e e o r 425 v c . . . . = r = n m . - p = - . d i q . - o e p p v a 2 r i t d . e g o s o - n - . a m r . c t c 426 e o . . . . e g e t u . i . p h . l f g . f b b a u e l . t l a d . s . l e r m g s . t m a . u i . 427 l r . . = . x e x e l . s . u t . e f o . r s r t s . i . . d t a . s . e - y e e u . e i n . t f . 428 - d . . s = c - c r t . s . s t . . - t . o m = c h . g . . r u g = . . t c . r . b . . t c . e y . 429 w . . . e m h r h n i . u . h p = . u o . m a p h - . n . = e s . g . . e h . = . r = . . h . . - . 430 a . . = r q a e a a p . e . - . a . p . = - r u b c . = . p n - . p . = - e . f . e i . . = . . c . 431 r . . p v - n v n l l . - . c . d . g . e b k s o h = p . u . t . g = h t c . i = p m . . m . = h . 432 n . = a e q g e g = = . n = h = d . r . x u e h m e d r = s . e = . h g a k . l p o p = . q . p a . 433 i . c t . d e r e m p . o b e a r . a . c n r - b c i o m h . r p . t w g - . e u . o i . - . u n . 434 n . a h . i - t - e u . = o c r e . d . h d = c - k r g a - . s u . t e - r = b s = r m = q . s g = 435 g = s c . f o . o r s . p o k b m = e . a l p h t h s r n c . e s . p b = e u r h p t p p r . h e p 436 s c e o . f b . b g h . u k h i o i = . n e a e l e t e i h . . h . - - p s r a - u - o u e . - = u 437 = h c n . . s . s e - . s m e t v m m . g . t c s a a s f e . . - = p a u t l n c s e r s f . c k s 438 p e o f . . m . m 7 c . h a a r e p e . e = c k = = t s e c = . c m r n s o - c h h o t h r = h n h 439 u c l l = . a . a . h . - r d a . o r . - i h h p h e . s k p = h e o n h r d h e - l s - e p e o - 440 s k l i p . = . r . e . c k s r . r g = o s b e u g . . t h e c e r x o - = o . c c . - c s u c w c 441 h - i c u . m . k . c . h s - = . t e p b s o a s w . . . e r o c g y t c p w = k h . c h s k n h 442 - c s t s . e . e . k . e - p p . - 6 u s u m d h e . . . a m n k e . a h u n s h e . h e = h h . e 443 c l i s h . r . r = h . c r r a . u . s m e b s - b = = . d i v h 2 . t e s l y e c . e c p - = . c 444 h a o - - . g = = d e . k e u r = n . h a 1 - - c d c p . s s e e . = = c h o m a k . = k u c o . k 445 e n n b c . e r i i a . h b n s b k . - r 8 = u h i l u . = s r a . r p k - a l d h . s h s h l . h 446 c g . a h = 9 e s f d . e a = e u n . c k 0 s = e r o s . p = t d . e u h c d i s e . p e h e d . e 447 k = . s e m . l s f s . a s h i n o . h e 2 p c c s n h . y p = s . v s e h = n - a = a = - c c . = 448 h i = = c q . i u d - . d = g n d w . e r . a o k = e - . 3 a u - . s h a e p k s d p r r c k = = c 449 e s e c = - . n e i u . s p w d l n = c = = r n h p - c = - t p u . e - d c u - u = u s e h h e r h 450 a s o o m s . k 1 r n . = u e e e . r k m r s f e u p h s c c d n . t c s k s p = u s e p e e o e a 451 d u l m a u . . 3 . p . e s b x - = e h a e e u a s u e c o h a = . - h - h h = a p h - o c a l b n 452 s e - m n b = = 0 . u . n h = = v p v e n q - s = h l = h m . t u = o e s e - m r d - m - = d f a g 453 - 1 a i i r e r = . = . c - b d s u s a i u v e b - l c e = . e n d u c u a c e c a c e c i s i s e 454 u 8 d t f e m e r . c . o c r i - s e d f i = d o c - o m p . - b e t k = d h r h t h r = s - l e l 455 n 7 d t e p p b e . l . d h a f o h t = e r e - o h = n e u = i u b g = h = e g i e e g l s = e - o 456 = 7 . e s = t a b = o . e e n f u v - s s e n r k e h t s s s s n u = w i n c e v - c = a u i n p g 457 n = . r t c y s a m n . . c c - = a d p t s c e m c g e . h p = d g h e s e k 1 = r k i r e s a a = 458 e m . . . o - e s e = . . k h c i r i a = = o = a k w x . - a j = b g b t w h 0 e e h n g 1 s = = d 459 w e = . = n f - e r d . = h = o s = r r p u d e r = e t = c r o c u w s e = e . x = e h = 5 u h d o 460 e r i = r t = = - g e . u = h p s r s s u p = o = e b = i h s u u = e = = e = = e s = e d = e g i u 461 = s b e r i w = e = . n t g y u e = = l d b l i o = d s e = r s r b m m x e g c p s r i i = k f = 462 e = s a b = s o s = m = r e w = e v o n l a u - m l c i s c h n = e = a a t d l u a t i f s l = f m 463 m x u d = a s r u m e i e m e b 4 = b e - = n = = - o f = g = d v p n c e i o = r t f s o r = e 464 p d e - i n u k b q r s = p b a = d s s = r d r e u n = = d w r e e u i n t = = d = = u g e a r 465 = g 1 p s c = e - g s e = - d i e = t e e l e o = v h r i e e b r s = = s = f h i r = i = - b b g 466 p . = = s e s r = = e u m p d - s b d e x v e v l u = g e f b v u t h u d = m i g r e b s h = a o e 467 a . p l = = y . l p = = p a = = s u i = t e 2 l - r r w v f - l = = - s o d q l w s v a s y a = = = 468 t = r i b d m = o a t f t t b c = f w r r = = = l e e = e = a m c e c e - = = t l c u = n u u h 469 = m = = = = = s = = = i = = = = = d = = = = d l h = = = w = = s t = g = = = = e h = = = = l = i = = 470 c = c c m c c = c a = c l c r = = c c l = = = = = d = = = s = = c = c a c c = = = c c = = f l 471 h p o a o o a a m n f o e s a l o f c s p c r o c c r r b a b l m o o c c d c u f 472 u m e s p m o s p u o o o e 473 s e n - l e n - l s o o n n 474 h n d s i n e s i h k k e d 475 - . e t d - e t - m m - . 476 r . r . u r . r a a u . 477 a . . n v . a r r n . 478 c . . c e . c k k c . 479 e . . o . . e s s o . 480 . m . . . - - m . 481 . p . . p p p 482 . r . . u u r 483 . e . . s s e 484 . s . . h h s 485 . s . p p s 486 . e . u u e 487 . d . l l d 488 . . . l l 489 . . . . . 490 . . . . 491 . . . . 492 . . . . 493 . . . . 494 . . . . 495 . . . . 496 . . . . 497 . . . . 498 . . . . 499 . . 500 . . 501 . . 502 . . 503 . . 504 . . 505 . . 506 . . 507 . . 508 . . 509 . . 510 . . 511 . . 512 . . 513 . . 514 . . 515 . Differential Revision: https://phab.mercurial-scm.org/D2615
Sat, 03 Mar 2018 17:53:32 -0500 py3: whitelist another 15 passing tests
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 17:53:32 -0500] rev 36693
py3: whitelist another 15 passing tests Differential Revision: https://phab.mercurial-scm.org/D2614
Sat, 03 Mar 2018 17:09:26 -0500 cmdutil: ensure PatchError messages are coerded to bytes, not str
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 17:09:26 -0500] rev 36692
cmdutil: ensure PatchError messages are coerded to bytes, not str Differential Revision: https://phab.mercurial-scm.org/D2613
Sat, 03 Mar 2018 17:08:41 -0500 tests: fix bytes literals in test-fncache.t
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 17:08:41 -0500] rev 36691
tests: fix bytes literals in test-fncache.t # skip-blame just b prefixes Differential Revision: https://phab.mercurial-scm.org/D2612
Sat, 03 Mar 2018 17:08:05 -0500 scmutil: avoid using basestring and add explicit handling of unicodes
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 17:08:05 -0500] rev 36690
scmutil: avoid using basestring and add explicit handling of unicodes This resolves some Python 3 defects, and I don't think it is a meaningful behavior change in Python 2. Differential Revision: https://phab.mercurial-scm.org/D2611
Sat, 03 Mar 2018 17:07:18 -0500 tests: fix inline extension bytes in test-ssh-proto-unbundle.t
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 17:07:18 -0500] rev 36689
tests: fix inline extension bytes in test-ssh-proto-unbundle.t # skip-blame just b prefixes Differential Revision: https://phab.mercurial-scm.org/D2610
Sat, 03 Mar 2018 16:38:17 -0500 hghave: fix up clang-libfuzzer regex to be bytes
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 16:38:17 -0500] rev 36688
hghave: fix up clang-libfuzzer regex to be bytes Fixes this check on Python 3. # skip-blame just a b prefix Differential Revision: https://phab.mercurial-scm.org/D2607
Sat, 03 Mar 2018 15:41:12 -0500 py3: accept both unicode and byte strings as filename carried by IOError
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 15:41:12 -0500] rev 36687
py3: accept both unicode and byte strings as filename carried by IOError Follows up 77f98867538f. We could assume there's no bytes filename in our codebase, but it's probably better to not raise UnicodeError because of a unicode filename.
Sat, 03 Mar 2018 15:33:52 -0500 py3: back out c77c925987d7 to store bytes filename in IOError
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 15:33:52 -0500] rev 36686
py3: back out c77c925987d7 to store bytes filename in IOError Appears that this is how Python 3 works.
Sat, 03 Mar 2018 14:57:23 -0500 largefiles: headers and values need to be sysstrs, add r prefixes
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 14:57:23 -0500] rev 36685
largefiles: headers and values need to be sysstrs, add r prefixes # skip-blame just some r prefixes Differential Revision: https://phab.mercurial-scm.org/D2606
Sat, 03 Mar 2018 11:26:30 -0500 cext: accept arguments as Py_buffer
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 11:26:30 -0500] rev 36684
cext: accept arguments as Py_buffer The s*/y* value formatters receive a Py_buffer instead of a char *. This value format is more flexible in the types that it allows. We change bdiff() to accept any object that conforms to the buffer protocol. We validate the buffers are contiguous and have a single dimension. This allows memoryview instances to be handled by the function, so we revert a recent change to cast arguments to bytes before calling this function. Differential Revision: https://phab.mercurial-scm.org/D2587
Sat, 03 Mar 2018 11:19:43 -0500 cext: refactor cleanup code in bdiff()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 11:19:43 -0500] rev 36683
cext: refactor cleanup code in bdiff() A future commit will need to introduce additional cleanup code. We refactor the cleanup code to check NULL before calling free(). We also initialize these variables as NULL. We set the out of memory exception explicitly, so we can just return result. Differential Revision: https://phab.mercurial-scm.org/D2586
Fri, 02 Mar 2018 07:13:33 +0530 py3: use pycompat.bytestr() to convert error messages to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 07:13:33 +0530] rev 36682
py3: use pycompat.bytestr() to convert error messages to bytes Differential Revision: https://phab.mercurial-scm.org/D2535
Sat, 03 Mar 2018 14:28:51 -0500 url: more bytes/unicodes fussing in url.py around auth handling
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 14:28:51 -0500] rev 36681
url: more bytes/unicodes fussing in url.py around auth handling Once again, these methods are a little annoying to handle because they can get unicodes or bytes depending on who's calling. I think we can probably clean this up a TON once we can run something like pytype and do typechecking of our Python, but until then this is going to be the easy way out. This fixes test-http-bundle1.t. Differential Revision: https://phab.mercurial-scm.org/D2599
Sat, 03 Mar 2018 14:24:21 -0500 httpconnection: convert url to bytes in readauthforuri
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 14:24:21 -0500] rev 36680
httpconnection: convert url to bytes in readauthforuri This method is sometimes called by the stdlib, so we just need to accept both bytes and unicodes here. Awesome. Differential Revision: https://phab.mercurial-scm.org/D2598
Sat, 03 Mar 2018 14:44:41 -0500 tests: prevent enormous output spew in test-lfs-largefiles.t
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 14:44:41 -0500] rev 36679
tests: prevent enormous output spew in test-lfs-largefiles.t This test currently fails on Python 3, but in a super-slow way. Adding this `head` invocation costs us nothing, but will prevent failures in this area from being super expensive. Differential Revision: https://phab.mercurial-scm.org/D2600
Sat, 03 Mar 2018 12:23:03 -0500 py3: fix formatting of path-auditing errors
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 12:23:03 -0500] rev 36678
py3: fix formatting of path-auditing errors
Sat, 03 Mar 2018 12:36:05 -0500 py3: make os.curdir a bytes
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 12:36:05 -0500] rev 36677
py3: make os.curdir a bytes
Sat, 03 Mar 2018 12:34:35 -0500 py3: make os.pardir a bytes
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 12:34:35 -0500] rev 36676
py3: make os.pardir a bytes
Sat, 03 Mar 2018 14:21:47 -0500 py3: fix slicing of bytes in patch.iterhunks()
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 14:21:47 -0500] rev 36675
py3: fix slicing of bytes in patch.iterhunks()
Sat, 03 Mar 2018 09:35:59 -0500 tests: fix various test-check-module-imports.t violations
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 09:35:59 -0500] rev 36674
tests: fix various test-check-module-imports.t violations Somehow these are only caught when running the test under Python 3. Differential Revision: https://phab.mercurial-scm.org/D2580
Tue, 27 Feb 2018 00:33:46 +0530 pycompat: prevent encoding or decoding values if not required
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 00:33:46 +0530] rev 36673
pycompat: prevent encoding or decoding values if not required pycompat.py has functions strurl and bytesurl which decodes and encodes the url passed on Python 3 respectively. In some cases, strurl gets a url which is already str and bytesurl gets a url which is already bytes. Let's prevent encoding or decoding the values again if not required. Differential Revision: https://phab.mercurial-scm.org/D2472
Sat, 03 Mar 2018 10:39:48 -0500 py3: add some b'' to make test-lock-badness.t happy
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 10:39:48 -0500] rev 36672
py3: add some b'' to make test-lock-badness.t happy
Sat, 03 Mar 2018 10:32:06 -0500 py3: fix formatting of lock error message
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 10:32:06 -0500] rev 36671
py3: fix formatting of lock error message
Sat, 03 Mar 2018 10:02:36 -0500 py3: fix some unicode madness in global exception catcher
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 10:02:36 -0500] rev 36670
py3: fix some unicode madness in global exception catcher
Sat, 03 Mar 2018 10:08:13 -0500 py3: pass a system-string filename to sub-classes of IOError
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 10:08:13 -0500] rev 36669
py3: pass a system-string filename to sub-classes of IOError
Sat, 03 Mar 2018 09:19:34 -0500 py3: fix some membership tests on linkrev adjustment
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 09:19:34 -0500] rev 36668
py3: fix some membership tests on linkrev adjustment
Fri, 02 Mar 2018 22:38:09 -0500 py3: make test-basic.t pass on Python 3
Yuya Nishihara <yuya@tcha.org> [Fri, 02 Mar 2018 22:38:09 -0500] rev 36667
py3: make test-basic.t pass on Python 3
Fri, 02 Mar 2018 22:35:20 -0500 py3: silence the final IOError by closing stdout/err slightly early
Yuya Nishihara <yuya@tcha.org> [Fri, 02 Mar 2018 22:35:20 -0500] rev 36666
py3: silence the final IOError by closing stdout/err slightly early Fixes the following test failure: $ hg status >/dev/full abort: No space left on device Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' ... OSError: [Errno 28] No space left on device [120]
Fri, 02 Mar 2018 22:10:36 -0500 py3: conditionalize initialization of stdio flags
Yuya Nishihara <yuya@tcha.org> [Fri, 02 Mar 2018 22:10:36 -0500] rev 36665
py3: conditionalize initialization of stdio flags Since Python 3 doesn't depend on the stdio of libc, there should be no need to set O_BINARY flag on Windows.
Thu, 01 Mar 2018 18:25:19 -0500 test-command-template: glob out detailed "invalid escape" message
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 18:25:19 -0500] rev 36664
test-command-template: glob out detailed "invalid escape" message Python 3 also reports the position where an invalid escape found.
Thu, 01 Mar 2018 08:14:54 -0500 templater: byte-stringify dict/list values before passing to default format
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:14:54 -0500] rev 36663
templater: byte-stringify dict/list values before passing to default format bytestr() is applied only when no custom format string like '%d' is specified.
Thu, 01 Mar 2018 08:07:22 -0500 templater: allow dynamically switching the default dict/list formatting
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:07:22 -0500] rev 36662
templater: allow dynamically switching the default dict/list formatting '%s' doesn't work nicely on Python 3 because many Python types don't implement __bytes__().
Sat, 03 Mar 2018 21:01:07 +0530 py3: use util.forcevytestr to convert error to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 03 Mar 2018 21:01:07 +0530] rev 36661
py3: use util.forcevytestr to convert error to bytes Differential Revision: https://phab.mercurial-scm.org/D2585
Sat, 03 Mar 2018 09:50:07 -0500 util: report integer result from write()
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 09:50:07 -0500] rev 36660
util: report integer result from write() Python 2 sometimes returns None from write() calls. Python 3 doesn't. This will make test output inconsistent between Python 2 and 3. So let's paper over the differences by converting None to the length of the result string. Differential Revision: https://phab.mercurial-scm.org/D2584
Sat, 03 Mar 2018 09:34:06 -0500 util: log readinto() I/O
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 09:34:06 -0500] rev 36659
util: log readinto() I/O Differential Revision: https://phab.mercurial-scm.org/D2583
Fri, 02 Mar 2018 22:47:18 -0500 util: teach escapedata() about bytearray
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 22:47:18 -0500] rev 36658
util: teach escapedata() about bytearray re.map doesn't seem to know about bytearray (at least in Python 2). Cast bytearray to a bytes to work around this inconvenience. Differential Revision: https://phab.mercurial-scm.org/D2582
Fri, 02 Mar 2018 22:59:12 -0500 sshpeer: don't read(0)
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 22:59:12 -0500] rev 36657
sshpeer: don't read(0) read(0) is essentially a no-op. Let's avoid the function call, overhead, and extra test output by not performing it. Differential Revision: https://phab.mercurial-scm.org/D2581
Sat, 03 Mar 2018 05:51:34 -0500 py3: unblock C extensions on Python 3
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 05:51:34 -0500] rev 36656
py3: unblock C extensions on Python 3 Please make sure to build C extensions before running tests with -l: $ make local PYTHON=python3
Sat, 03 Mar 2018 07:59:20 -0500 py3: make test-ancestors.py pass on Python 3 with C extensions
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 07:59:20 -0500] rev 36655
py3: make test-ancestors.py pass on Python 3 with C extensions # skip-blame just some b prefixes
Sat, 03 Mar 2018 07:24:25 -0500 py3: do not pass a memoryview to bdiff.bdiff()
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 07:24:25 -0500] rev 36654
py3: do not pass a memoryview to bdiff.bdiff() This doesn't look nice, but I don't know how to make a zero-copy slice of bytes which is compatible with the buffer protocol.
Sat, 03 Mar 2018 07:00:37 -0500 py3: do not pass a list of iterators to computephasesmapsets()
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 07:00:37 -0500] rev 36653
py3: do not pass a list of iterators to computephasesmapsets()
Sat, 03 Mar 2018 06:57:02 -0500 cext: fix computephasesmapsets() not to return without setting an exception
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:57:02 -0500] rev 36652
cext: fix computephasesmapsets() not to return without setting an exception Spotted by map() of Python 3.
Sat, 03 Mar 2018 06:44:47 -0500 py3: do not pass a float to dict_new_presized()
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:44:47 -0500] rev 36651
py3: do not pass a float to dict_new_presized() I really don't like the division operator of Python 3 since I'm not doing a math.
Sat, 03 Mar 2018 06:41:52 -0500 cext: mark tuple_format as a constant
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:41:52 -0500] rev 36650
cext: mark tuple_format as a constant Just for clarity.
Sat, 03 Mar 2018 06:18:47 -0500 py3: bulk-replace 'const char*' format specifier passed to PyArg_ParseTuple*()
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:18:47 -0500] rev 36649
py3: bulk-replace 'const char*' format specifier passed to PyArg_ParseTuple*() Perhaps we need this because 's' accepts a unicode string. https://docs.python.org/3/c-api/arg.html#strings-and-buffers Substituted using the following pattern with some manual fixes: '\b(PyArg_ParseTuple)\((\s*\w+,\s*)"([^"]+)"' '\b(PyArg_ParseTupleAndKeywords)\((\s*\w+,\s*\w+,\s*)"([^"]+)"'
Sat, 03 Mar 2018 06:08:22 -0500 py3: bulk-replace bytes format specifier passed to Py_BuildValue()
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:08:22 -0500] rev 36648
py3: bulk-replace bytes format specifier passed to Py_BuildValue() On Python 3, "s" means a utf-8 string. We have to use "y" for bytes, sigh. https://docs.python.org/3/c-api/arg.html#c.Py_BuildValue Substituted using the following pattern with some manual fixes: '\b(Py_BuildValue)\((\s*)"([^"]+)"'
Sat, 03 Mar 2018 05:58:41 -0500 py3: add PY23() macro to switch string literal depending on python version
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 05:58:41 -0500] rev 36647
py3: add PY23() macro to switch string literal depending on python version I have no better idea to work around the bytes-unicode divergence of Py_BuildValue(). Maybe we can write a code transformer for C extensions? :)
Sat, 03 Mar 2018 05:50:45 -0500 py3: don't try to mangle C extension blob by code transformer
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 05:50:45 -0500] rev 36646
py3: don't try to mangle C extension blob by code transformer
Fri, 02 Mar 2018 18:47:27 -0500 tests: add missing b prefixes in test-atomictempfile.py
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 18:47:27 -0500] rev 36645
tests: add missing b prefixes in test-atomictempfile.py # skip-blame just some b prefixes Differential Revision: https://phab.mercurial-scm.org/D2570
Tue, 27 Feb 2018 16:31:44 -0800 wireproto: only expose "between" to version 1 of wire protocols
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 16:31:44 -0800] rev 36644
wireproto: only expose "between" to version 1 of wire protocols We recently marked other legacy commands as only available to version 1 of the wire protocols. We held off marking "between" because it is used as part of the SSH handshake. Since SSH servers assume they are version 1 by default and the "between" request that is issued as part of the version 2 handshake is swallowed and not operated on, everything should "just work" if "between" is not available to version 2. Differential Revision: https://phab.mercurial-scm.org/D2513
Fri, 02 Mar 2018 18:55:18 -0500 tests: add more tests around hook output and getbundle
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 18:55:18 -0500] rev 36643
tests: add more tests around hook output and getbundle The previous tests around hook output only tested Python hooks. Let's add some shell hooks in for additional test coverage. Differential Revision: https://phab.mercurial-scm.org/D2550
Tue, 27 Feb 2018 16:24:02 -0800 wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 16:24:02 -0800] rev 36642
wireproto: add transport specific capabilities in the transport We add a method to the protocol handler interface that allows specific implementations to add their own capabilities. The SSH implementation is a no-op. The HTTP implementation adds the HTTP-specific capabilities. The end result is transport specific capabilities now live in the transport code instead of in some generic function in the wireproto module. Differential Revision: https://phab.mercurial-scm.org/D2512
Tue, 27 Feb 2018 15:23:04 -0800 wireproto: don't expose changegroupsubset capability if not available
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 15:23:04 -0800] rev 36641
wireproto: don't expose changegroupsubset capability if not available We just marked the changegroupsubset command as only available to version 1 of the wire transports. There is a capability of the same name of the command that indicates if the command is supported. This commit teaches the capabilities code to conditionally emit that capability depending on whether the command is available for the current transport. Most test output is reordering of capabilities. But the limited tests for version 2 of the SSH protocol do show the capability disappearing. Differential Revision: https://phab.mercurial-scm.org/D2486
Tue, 27 Feb 2018 15:06:10 -0800 wireproto: don't expose legacy commands to version 2 of wire protocol
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 15:06:10 -0800] rev 36640
wireproto: don't expose legacy commands to version 2 of wire protocol Now that we have the ability to control which transports a wire protocol command is exposed on, let's put it to use. We flag the "branches," "changegroup," and "changegroupsubset" commands as only available on version 1. "branches" was used by the legacy discovery mechanism and was replaced by the "known" and "heads" commands. "changegroup" and "changegroupsubset" were replaced by "getbundle." "between" is also legacy. However, since it is used by the SSH handshake protocol, marking it as legacy is a bit more complicated and will be done in a later commit. Another nuanced issue with this change is that the server-advertised capabilities still list "changegroupsubset" despite the command not being available. This will be addressed in a subsequent commit. Differential Revision: https://phab.mercurial-scm.org/D2485
Tue, 27 Feb 2018 14:56:03 -0800 wireprotoserver: identify requests via version 2 of SSH protocol as such
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 14:56:03 -0800] rev 36639
wireprotoserver: identify requests via version 2 of SSH protocol as such The protocol handler needs to advertise itself as version 2 in order for a future feature to work. Differential Revision: https://phab.mercurial-scm.org/D2484
Fri, 02 Mar 2018 09:47:37 -0500 wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 09:47:37 -0500] rev 36638
wireproto: allow wire protocol commands to declare transport support Currently, wire protocol commands are exposed on all transports. Some wire protocol commands are only supported or sensical on some transports. In the future, new wire protocol commands may only be available on new transports and legacy wire protocol commands may not be available to newer transports. This commit introduces a mechanism to allow @wireprotocommand to declare transports for which they should not be available. The mechanism for determining if a wire protocol command is available for a given transport instance has been taught to take this knowledge into account. To help implement this feature, we add a dict to wireprototypes declaring all wire transports and their metadata. There's probably room to refactor the constants used to identify the wire protocols. But that can be in another commit. Differential Revision: https://phab.mercurial-scm.org/D2483
Fri, 02 Mar 2018 18:50:49 -0500 sshpeer: don't read from stderr when that behavior is disabled
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 18:50:49 -0500] rev 36637
sshpeer: don't read from stderr when that behavior is disabled We previously prevented the creation of doublepipe instances when we're not supposed to automatically read from stderr. However, there were other automatic calls to read from stderr that were undermining this effort. This commit prevents all automatic reads from stderr from occurring when they are supposed to be disabled. Because stderr is no longer being read, we need to call "readavailable" from tests so stderr is read from. Test output changes because stderr is now always (manually) read after stdout. And, since sshpeer no longer automatically tends to stderr, no "remote: " messages are printed. This should fix non-deterministic test output. FWIW, doublepipe automatically reads from stderr when reading from stdout, so I'm not sure some of these calls to self._readerr() are even needed. Differential Revision: https://phab.mercurial-scm.org/D2571
Thu, 15 Feb 2018 17:18:26 +0100 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net> [Thu, 15 Feb 2018 17:18:26 +0100] rev 36636
util: extract all date-related utils in utils/dateutil module With this commit, util.py lose 262 lines Note for extensions author, if this commit breaks your extension, you can pull the step-by-step split here to help you more easily pinpoint the renaming that broke your extension: hg pull https://bitbucket.org/octobus/mercurial-devel/ -r ac1f6453010d Differential Revision: https://phab.mercurial-scm.org/D2282
Thu, 08 Feb 2018 23:27:24 +0530 clone: updates the help text for hg clone -{r,b} (issue5654)
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com> [Thu, 08 Feb 2018 23:27:24 +0530] rev 36635
clone: updates the help text for hg clone -{r,b} (issue5654) Differential Revision: https://phab.mercurial-scm.org/D2095
Fri, 02 Mar 2018 15:48:31 -0500 py3: whitelist more passing tests
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 15:48:31 -0500] rev 36634
py3: whitelist more passing tests Differential Revision: https://phab.mercurial-scm.org/D2569
Fri, 02 Mar 2018 11:07:42 -0500 lfs: convert hexdigest to bytes using sysbytes
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:07:42 -0500] rev 36633
lfs: convert hexdigest to bytes using sysbytes Differential Revision: https://phab.mercurial-scm.org/D2568
Fri, 02 Mar 2018 11:07:25 -0500 lfs: use %d to encode int, not str()
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:07:25 -0500] rev 36632
lfs: use %d to encode int, not str() Differential Revision: https://phab.mercurial-scm.org/D2567
Fri, 02 Mar 2018 11:07:07 -0500 lfs: use byteskwargs() on some **kwargs for python 3 compat
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:07:07 -0500] rev 36631
lfs: use byteskwargs() on some **kwargs for python 3 compat Differential Revision: https://phab.mercurial-scm.org/D2566
Fri, 02 Mar 2018 11:06:37 -0500 lfs: add some bytestring wrappers in blobstore.py
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:06:37 -0500] rev 36630
lfs: add some bytestring wrappers in blobstore.py Differential Revision: https://phab.mercurial-scm.org/D2565
Fri, 02 Mar 2018 11:05:53 -0500 lfs: add missing b prefixes on some regular expressions
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:05:53 -0500] rev 36629
lfs: add missing b prefixes on some regular expressions # skip-blame just some b prefixes Differential Revision: https://phab.mercurial-scm.org/D2564
Sun, 25 Feb 2018 19:34:35 +0900 templatekw: deprecate showdict() and showlist() (API)
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 19:34:35 +0900] rev 36628
templatekw: deprecate showdict() and showlist() (API) .. api:: templatekw.showdict() and showlist() are deprecated in favor of new (context, mapping) API. Switch the keyword function to new API and use templatekw.compatdict() and compatlist() instead.
Sun, 25 Feb 2018 19:25:14 +0900 templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 19:25:14 +0900] rev 36627
templatekw: switch remainder of _showlist template keywords to new API
Sun, 25 Feb 2018 20:55:53 +0900 templatekw: switch manifest template keyword to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 20:55:53 +0900] rev 36626
templatekw: switch manifest template keyword to new API
Sun, 25 Feb 2018 19:23:06 +0900 templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 19:23:06 +0900] rev 36625
templatekw: switch latesttags template keywords to new API
Sun, 25 Feb 2018 19:08:02 +0900 templatekw: switch revset() to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 19:08:02 +0900] rev 36624
templatekw: switch revset() to new API
Sun, 25 Feb 2018 19:05:57 +0900 templatekw: switch obsfate-related template keywords to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 19:05:57 +0900] rev 36623
templatekw: switch obsfate-related template keywords to new API
Sun, 25 Feb 2018 18:52:51 +0900 templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 18:52:51 +0900] rev 36622
templatekw: switch namespace template keywords to new API
Sun, 25 Feb 2018 18:56:06 +0900 namespace: use registrar to add template keyword
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 18:56:06 +0900] rev 36621
namespace: use registrar to add template keyword Prepares for switching to the new API.
Sun, 25 Feb 2018 16:45:44 +0900 templatekw: switch most of showlist template keywords to new API (issue5779)
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:45:44 +0900] rev 36620
templatekw: switch most of showlist template keywords to new API (issue5779) Non-trivial changes will follow.
Sun, 25 Feb 2018 16:22:55 +0900 templatekw: switch showdict template keywords to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:22:55 +0900] rev 36619
templatekw: switch showdict template keywords to new API
Fri, 02 Mar 2018 15:37:57 -0500 py3: bail on ratcheting tests forward on 3.6.0 and 3.6.1
Kevin Bullock <kbullock+mercurial@ringworld.org> [Fri, 02 Mar 2018 15:37:57 -0500] rev 36618
py3: bail on ratcheting tests forward on 3.6.0 and 3.6.1
Thu, 01 Mar 2018 18:22:36 -0500 py3: silence "bad escape" warning emitted by re.sub()
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 18:22:36 -0500] rev 36617
py3: silence "bad escape" warning emitted by re.sub() Since we pass user strings directly to re.sub(), we can't avoid this warning without a BC.
Fri, 02 Mar 2018 14:12:17 -0500 debugcommands: add some strkwargs love to some **args calls
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 14:12:17 -0500] rev 36616
debugcommands: add some strkwargs love to some **args calls Differential Revision: https://phab.mercurial-scm.org/D2563
Fri, 02 Mar 2018 14:10:34 -0500 debugcommands: add an r prefix to make file mode for fdopen a sysstr
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 14:10:34 -0500] rev 36615
debugcommands: add an r prefix to make file mode for fdopen a sysstr # skip-blame just an r prefix Differential Revision: https://phab.mercurial-scm.org/D2562
Fri, 02 Mar 2018 14:09:50 -0500 util: work around Python 3 returning None at EOF instead of ''
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 14:09:50 -0500] rev 36614
util: work around Python 3 returning None at EOF instead of '' Differential Revision: https://phab.mercurial-scm.org/D2561
Fri, 02 Mar 2018 14:09:20 -0500 util: add missing r prefix on some __setattr__ calls
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 14:09:20 -0500] rev 36613
util: add missing r prefix on some __setattr__ calls # skip-blame just a pair of r prefixes Differential Revision: https://phab.mercurial-scm.org/D2560
Fri, 02 Mar 2018 13:47:49 -0500 tests: add some re and globs for test-revset on python3
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 13:47:49 -0500] rev 36612
tests: add some re and globs for test-revset on python3 At this point we're down to two deprecation warnings (which I suspect are showing a bug in the test?) and one weird-looking failure. Progress! Differential Revision: https://phab.mercurial-scm.org/D2559
Fri, 02 Mar 2018 11:38:16 -0500 tests: add missing b prefixes and fix a %s to %d in test-revset.t
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:38:16 -0500] rev 36611
tests: add missing b prefixes and fix a %s to %d in test-revset.t # skip-blame just b prefixes and a %d instead of %s Differential Revision: https://phab.mercurial-scm.org/D2558
Fri, 02 Mar 2018 11:37:41 -0500 revset: use %d to turn an int into a bytestr
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:37:41 -0500] rev 36610
revset: use %d to turn an int into a bytestr Differential Revision: https://phab.mercurial-scm.org/D2557
Fri, 02 Mar 2018 11:37:21 -0500 revset: use {force,}bytestr to fix some %r formatting issues
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:37:21 -0500] rev 36609
revset: use {force,}bytestr to fix some %r formatting issues Differential Revision: https://phab.mercurial-scm.org/D2556
Fri, 02 Mar 2018 01:17:42 -0500 py3: sixteen more passing tests
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 01:17:42 -0500] rev 36608
py3: sixteen more passing tests Differential Revision: https://phab.mercurial-scm.org/D2552
Fri, 02 Mar 2018 00:37:33 -0500 debugcommands: fix repr in debugignore print with pycompat.bytestr
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:37:33 -0500] rev 36607
debugcommands: fix repr in debugignore print with pycompat.bytestr Differential Revision: https://phab.mercurial-scm.org/D2549
Thu, 01 Mar 2018 23:58:28 -0500 verify: fix exception formatting bug in Python 3
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 23:58:28 -0500] rev 36606
verify: fix exception formatting bug in Python 3 Differential Revision: https://phab.mercurial-scm.org/D2541
Fri, 02 Mar 2018 13:50:31 -0500 get-with-headers: use bytes stdout thoroughly
Yuya Nishihara <yuya@tcha.org> [Fri, 02 Mar 2018 13:50:31 -0500] rev 36605
get-with-headers: use bytes stdout thoroughly On Python 3, sys.stdout.buffer is backed by a separate buffer from sys.stdout. We should choose one.
Thu, 01 Mar 2018 17:16:36 -0800 exchange: remove dead assignment or forcebundle1
Martin von Zweigbergk <martinvonz@google.com> [Thu, 01 Mar 2018 17:16:36 -0800] rev 36604
exchange: remove dead assignment or forcebundle1 Differential Revision: https://phab.mercurial-scm.org/D2548
Fri, 02 Mar 2018 09:09:38 -0500 templatekw: fix dict construction in _showlist to not mix bytes and strs
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 09:09:38 -0500] rev 36603
templatekw: fix dict construction in _showlist to not mix bytes and strs What we had was fine on Python 2, but was slightly wrong on Python 3. This works on both. Differential Revision: https://phab.mercurial-scm.org/D2554
Fri, 02 Mar 2018 09:08:11 -0500 templatefilters: avoid infinite recursion bug in stringify
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 09:08:11 -0500] rev 36602
templatefilters: avoid infinite recursion bug in stringify This doesn't ever happen on Python 2, but it's been a persistent pain on Python 3. Adding this helped produce some of my upcoming Python 3 fixes. Differential Revision: https://phab.mercurial-scm.org/D2553
Fri, 02 Mar 2018 00:37:55 -0500 match: some minimal pycompat fixes guided by test-hgignore.t
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:37:55 -0500] rev 36601
match: some minimal pycompat fixes guided by test-hgignore.t Differential Revision: https://phab.mercurial-scm.org/D2551
Fri, 02 Mar 2018 00:37:07 -0500 purge: apply byteskwargs to opts, fixing all python3 issues here
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:37:07 -0500] rev 36600
purge: apply byteskwargs to opts, fixing all python3 issues here Differential Revision: https://phab.mercurial-scm.org/D2547
Fri, 02 Mar 2018 00:19:51 -0500 tests: port test-bookmarks.t extension to Python 3
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:19:51 -0500] rev 36599
tests: port test-bookmarks.t extension to Python 3 # skip-blame it's just b prefixes Differential Revision: https://phab.mercurial-scm.org/D2546
Fri, 02 Mar 2018 00:19:30 -0500 scmutil: fix a repr in an error message on Python 3
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:19:30 -0500] rev 36598
scmutil: fix a repr in an error message on Python 3 Differential Revision: https://phab.mercurial-scm.org/D2545
Fri, 02 Mar 2018 00:19:16 -0500 bookmarks: fix a repr in a message on Python 3
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:19:16 -0500] rev 36597
bookmarks: fix a repr in a message on Python 3 Differential Revision: https://phab.mercurial-scm.org/D2544
Fri, 02 Mar 2018 00:11:19 -0500 py3: add missing b prefixes in test-debugextensions.t
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:11:19 -0500] rev 36596
py3: add missing b prefixes in test-debugextensions.t # skip-blame just some b prefixes Differential Revision: https://phab.mercurial-scm.org/D2543
Thu, 01 Mar 2018 23:59:44 -0500 tests: help dummysmtpd work on python 3
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 23:59:44 -0500] rev 36595
tests: help dummysmtpd work on python 3 Differential Revision: https://phab.mercurial-scm.org/D2542
Thu, 01 Mar 2018 23:58:04 -0500 tests: port helper script revlog-formatv0.py to python 3
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 23:58:04 -0500] rev 36594
tests: port helper script revlog-formatv0.py to python 3 Differential Revision: https://phab.mercurial-scm.org/D2540
Thu, 01 Mar 2018 21:17:58 -0500 tests: add missing b prefix in test python in test-issue2137.t
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 21:17:58 -0500] rev 36593
tests: add missing b prefix in test python in test-issue2137.t # skip-blame just a b prefix Differential Revision: https://phab.mercurial-scm.org/D2539
Thu, 01 Mar 2018 20:44:38 -0500 templatefilters: convert arguments to sysstrs for unicode() ctor
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 20:44:38 -0500] rev 36592
templatefilters: convert arguments to sysstrs for unicode() ctor Differential Revision: https://phab.mercurial-scm.org/D2538
Fri, 02 Mar 2018 07:14:59 +0530 py3: use util.forcebytestr() to convert IOErrors to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 07:14:59 +0530] rev 36591
py3: use util.forcebytestr() to convert IOErrors to bytes Differential Revision: https://phab.mercurial-scm.org/D2536
Thu, 01 Mar 2018 18:20:49 -0500 py3: whitelist three more passing tests
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 18:20:49 -0500] rev 36590
py3: whitelist three more passing tests Differential Revision: https://phab.mercurial-scm.org/D2530
Thu, 01 Mar 2018 18:13:50 -0500 convert: fix two %r output formats with pycompat.bytestr() wrapping
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 18:13:50 -0500] rev 36589
convert: fix two %r output formats with pycompat.bytestr() wrapping Differential Revision: https://phab.mercurial-scm.org/D2529
Thu, 01 Mar 2018 17:48:06 -0500 convert: use our shlex wrapper in filemap to avoid Python 3 tracebacks
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 17:48:06 -0500] rev 36588
convert: use our shlex wrapper in filemap to avoid Python 3 tracebacks Differential Revision: https://phab.mercurial-scm.org/D2527
Thu, 01 Mar 2018 17:47:49 -0500 convcmd: use our shlex wrapper to avoid Python 3 tracebacks
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 17:47:49 -0500] rev 36587
convcmd: use our shlex wrapper to avoid Python 3 tracebacks Differential Revision: https://phab.mercurial-scm.org/D2526
Thu, 01 Mar 2018 17:47:35 -0500 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 17:47:35 -0500] rev 36586
convert: add some utility code for working with shlex on Python 3 This could have gone in pycompat, but it's only needed in convert, so I figured it made more sense here. It's got py3 in the name and checks pycompat.ispy3, so we'll find it whenever we decide to drop Python 2 support in 20x6. # no-check-commit because of required foo_bar naming on the proxy class Differential Revision: https://phab.mercurial-scm.org/D2525
Thu, 01 Mar 2018 17:46:34 -0500 pycompat: add support for encoding argument to our wrapper
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 17:46:34 -0500] rev 36585
pycompat: add support for encoding argument to our wrapper This only works on Python 3, but I'm about to need it for a regrettable hack in the convert code. Differential Revision: https://phab.mercurial-scm.org/D2524
Fri, 02 Mar 2018 04:49:08 +0530 py3: port tests/test-wireproto.py to Python 3
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 04:49:08 +0530] rev 36584
py3: port tests/test-wireproto.py to Python 3 Differential Revision: https://phab.mercurial-scm.org/D2534
Fri, 02 Mar 2018 04:47:56 +0530 py3: use pycompat.bytestr() to convert None to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 04:47:56 +0530] rev 36583
py3: use pycompat.bytestr() to convert None to bytes Differential Revision: https://phab.mercurial-scm.org/D2533
Thu, 01 Mar 2018 18:39:21 -0500 webcommands: use explicit integer division for Python 3 compat
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 18:39:21 -0500] rev 36582
webcommands: use explicit integer division for Python 3 compat Differential Revision: https://phab.mercurial-scm.org/D2532
Fri, 02 Mar 2018 04:59:27 +0530 templatefilters: stop using str as a variable name
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 04:59:27 +0530] rev 36581
templatefilters: stop using str as a variable name str() is an inbuilt function. Differential Revision: https://phab.mercurial-scm.org/D2531
Thu, 01 Mar 2018 18:15:58 -0500 py3: fix string slicing in util.parsetimezone()
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 18:15:58 -0500] rev 36580
py3: fix string slicing in util.parsetimezone()
Thu, 01 Mar 2018 18:06:25 -0500 py3: replace type 'str' by 'bytes' in templater.py
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 18:06:25 -0500] rev 36579
py3: replace type 'str' by 'bytes' in templater.py
Thu, 01 Mar 2018 17:56:32 -0500 py3: don't crash when re-raising encoding error
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 17:56:32 -0500] rev 36578
py3: don't crash when re-raising encoding error
Thu, 01 Mar 2018 17:43:25 -0500 py3: mark all string literals in test-command-template.t as bytes
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 17:43:25 -0500] rev 36577
py3: mark all string literals in test-command-template.t as bytes # skip-blame because just b'' prefixes
Thu, 01 Mar 2018 17:03:40 -0500 py3: byte-stringify ValueError of unescapestr() to reraise as ParseError
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 17:03:40 -0500] rev 36576
py3: byte-stringify ValueError of unescapestr() to reraise as ParseError
Thu, 01 Mar 2018 16:56:38 -0500 py3: fix type of string literals in templater.tokenize()
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 16:56:38 -0500] rev 36575
py3: fix type of string literals in templater.tokenize() # skip-blame because just b'' prefixes
Thu, 01 Mar 2018 16:52:17 -0500 py3: drop b'' from error message generated by templater.runmember()
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 16:52:17 -0500] rev 36574
py3: drop b'' from error message generated by templater.runmember()
Thu, 01 Mar 2018 16:42:24 -0500 py3: fix join(), min(), and max() template functions over string
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 16:42:24 -0500] rev 36573
py3: fix join(), min(), and max() template functions over string It's silly to split a string into characters and concatenate them, but that should work and test-command-template.t has one. min() and max() had the same issue on Python 3, so fixed too.
Thu, 01 Mar 2018 16:32:45 -0500 py3: use startswith() to check existence of trailing '\n' in .hgtags file
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 16:32:45 -0500] rev 36572
py3: use startswith() to check existence of trailing '\n' in .hgtags file
Thu, 01 Mar 2018 15:57:27 -0500 py3: silence return value of file.write() in test-command-template.t
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 15:57:27 -0500] rev 36571
py3: silence return value of file.write() in test-command-template.t
Thu, 01 Mar 2018 18:05:47 -0500 error: fix isinstnace check to use bytes instead of str
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 18:05:47 -0500] rev 36570
error: fix isinstnace check to use bytes instead of str Differential Revision: https://phab.mercurial-scm.org/D2528
Sun, 25 Feb 2018 22:43:50 -0500 py3: whitelist another nine passing tests
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 22:43:50 -0500] rev 36569
py3: whitelist another nine passing tests I now see 347 tests passing[0] and 336 failing, so we're past halfway there. Hooray! 0: A few tests appear to regress in small ways (doctest output changes, for example) on Python 3.7.0a1, which is what I'm now using to test. That said, I'm pleased to report no major regressions. Differential Revision: https://phab.mercurial-scm.org/D2439
Sun, 25 Feb 2018 22:31:13 -0500 util: use pycompat.bytestr() on repr() in date parse abort
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 22:31:13 -0500] rev 36568
util: use pycompat.bytestr() on repr() in date parse abort Avoids the b'' prefix. Differential Revision: https://phab.mercurial-scm.org/D2438
Fri, 02 Mar 2018 03:06:43 +0530 py3: whitelist 14 new tests passing
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 03:06:43 +0530] rev 36567
py3: whitelist 14 new tests passing 12 new tests passed because of parent changeset and 2 were passing before that too. Differential Revision: https://phab.mercurial-scm.org/D2523
Fri, 02 Mar 2018 02:44:49 +0530 py3: slice over bytes to prevent getting ascii values
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 02:44:49 +0530] rev 36566
py3: slice over bytes to prevent getting ascii values This fixed reading of mergestate files and fixes 14 tests on Python 3. Differential Revision: https://phab.mercurial-scm.org/D2522
Tue, 27 Feb 2018 14:26:00 -0800 wireprotoserver: move SSHV1 and SSHV2 constants to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 14:26:00 -0800] rev 36565
wireprotoserver: move SSHV1 and SSHV2 constants to wireprototypes To avoid a cycle between modules in an upcoming commit. Differential Revision: https://phab.mercurial-scm.org/D2482
Tue, 27 Feb 2018 14:21:29 -0800 wireproto: use named arguments for commandentry
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 14:21:29 -0800] rev 36564
wireproto: use named arguments for commandentry We'll be adding more arguments in upcoming commits. Using named arguments will make the code easier to read. Differential Revision: https://phab.mercurial-scm.org/D2481
Mon, 26 Feb 2018 18:01:13 -0800 debugcommands: support for triggering push protocol
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 26 Feb 2018 18:01:13 -0800] rev 36563
debugcommands: support for triggering push protocol The mechanism for pushing to a remote is a bit more complicated than other commands. On SSH, we wait for a positive reply from the server before we start sending the bundle payload. This commit adds a mechanism to the "command" action in `hg debugwireproto` to trigger the "push protocol" and to specify a file whose contents should be submitted as the command payload. With this new feature, we implement a handful of tests for the "unbundle" command. We try to cover various server failures and hook/output scenarios so protocol behavior is as comprehensively tested as possible. Even with so much test output, we only cover bundle1 with Python hooks. There's still a lot of test coverage that needs to be implemented. But this is certainly a good start. Because there are so many new tests, we split these tests into their own test file. In order to make output deterministic, we need to disable the doublepipe primitive. We add an option to `hg debugwireproto` to do that. Because something in the bowels of the peer does a read of stderr, we still capture read I/O from stderr. So there is test coverage of what the server emits. The tests around I/O capture some wonkiness. For example, interleaved ui.write() and ui.write_err() calls are emitted in order. However, (presumably due to buffering), print() to sys.stdout and sys.stderr aren't in order. We currently only test bundle1 because bundle2 is substantially harder to test because it is more complicated (the server responds with a stream containing a bundle2 instead of a frame). Differential Revision: https://phab.mercurial-scm.org/D2471
Mon, 26 Feb 2018 13:12:03 -0800 sshpeer: support not reading and forwarding stderr
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 26 Feb 2018 13:12:03 -0800] rev 36562
sshpeer: support not reading and forwarding stderr The "doublepipe" primitive as used by sshpeer will automatically read from stderr and forward output to the local ui. This poses problems for deterministic testing because reads may not be consistent. For example, the server may not be done sending all output to stderr and the client will perform different numbers of read operations or will read from stderr and stdout at different times. To make tests deterministic, we'll need to disable the "doublepipe" primitive and perform stderr I/O explicitly. We add an argument to the sshpeer constructor to disable the use of the doublepipe. Differential Revision: https://phab.mercurial-scm.org/D2467
Fri, 23 Feb 2018 16:03:27 -0800 tests: add wire protocol tests for pushkey
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 23 Feb 2018 16:03:27 -0800] rev 36561
tests: add wire protocol tests for pushkey Let's get the wire format of some pushkey requests in test-ssh-proto.t. Differential Revision: https://phab.mercurial-scm.org/D2466
Fri, 23 Feb 2018 12:50:59 -0800 debugcommands: support for sending "batch" requests
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 23 Feb 2018 12:50:59 -0800] rev 36560
debugcommands: support for sending "batch" requests Let's teach `hg debugwireproto` to send "batch" requests. The easiest way to implement this was as a pair of instructions to begin and end a batched operation. Otherwise, we would have to reinvent the parsing wheel or factor out the parsing code. To prove it works, we add a batched request to test-ssh-proto.t. Differential Revision: https://phab.mercurial-scm.org/D2408
Thu, 01 Mar 2018 08:27:30 -0800 debugcommands: allow sending of simple commands with debugwireproto
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 01 Mar 2018 08:27:30 -0800] rev 36559
debugcommands: allow sending of simple commands with debugwireproto Previously, we only had support for low-level "raw" operations. A goal of `hg debugwireproto` is to allow easily performing higher-level primitives, such as sending a wire protocol command and reading its response. We implement a "command" action that does just this. Currently, we only support simple commands (those without payloads). We have basic support for sending command arguments. We don't yet support sending dictionary arguments. This will be implemented later. To prove it works, we add tests to test-ssh-proto.t that send some "listkeys" commands. Note: we don't observe/report os.read() events because these may not be deterministic. We instead observe/report the read() and readline() operations on the bufferedinputpipe. These *should* be deterministic. Differential Revision: https://phab.mercurial-scm.org/D2406
Fri, 23 Feb 2018 09:40:12 -0800 wireproto: sort response to listkeys
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 23 Feb 2018 09:40:12 -0800] rev 36558
wireproto: sort response to listkeys The listkeys protocol is defined to produce a dictionary. pushkey.decodekeys() uses a plain dict to hold the decoded results of the wire protocol response. So order should not matter. Upcoming tests will verify low-level output of wire protocol commands and the non-deterministic emitting of listkeys was causing intermittent failures. So we make the output of listkeys deterministic. Differential Revision: https://phab.mercurial-scm.org/D2405
Thu, 01 Mar 2018 08:24:54 -0800 debugcommands: add debugwireproto command
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 01 Mar 2018 08:24:54 -0800] rev 36557
debugcommands: add debugwireproto command We currently don't have a low-level mechanism for sending arbitrary wire protocol commands. Having a generic and robust mechanism for sending wire protocol commands, examining wire data, etc would make it vastly easier to test the wire protocol and debug server operation. This is a problem I've wanted a solution for numerous times, especially recently as I've been hacking on a new version of the wire protocol. This commit establishes a `hg debugwireproto` command for sending data to a peer. The command invents a mini language for specifying actions to take. This will enable a lot of flexibility for issuing commands and testing variations for how commands are sent. Right now, we only support low-level raw sends and receives. These are probably the least valuable commands to intended users of this command. But they are the most useful commands to implement to bootstrap the feature (I've chosen to reimplement test-ssh-proto.t using this command to prove its usefulness). My eventual goal of `hg debugwireproto` is to allow calling wire protocol commands with a human-friendly interface. Essentially, people can type in a command name and arguments and `hg debugwireproto` will figure out how to send that on the wire. I'd love to eventually be able to save the server's raw response to a file. This would allow us to e.g. call "getbundle" wire protocol commands easily. test-ssh-proto.t has been updated to use the new command in lieu of piping directly to a server process. As part of the transition, test behavior improved. Before, we piped all request data to the server at once. Now, we have explicit control over the ordering of operations. e.g. we can send one command, receive its response, then send another command. This will allow us to more robustly test race conditions, buffering behavior, etc. There were some subtle changes in test behavior. For example, previous behavior would often send trailing newlines to the server. The new mechanism doesn't treat literal newlines specially and requires newlines be escaped in the payload. Because the new logging code is very low level, it is easy to introduce race conditions in tests. For example, the number of bytes returned by a read() may vary depending on load. This is why tests make heavy use of "readline" for consuming data: the result of that operation should be deterministic and not subject to race conditions. There are still some uses of "readavailable." However, those are only for reading from stderr. I was able to reproduce timing issues with my system under load when using "readavailable" globally. But if I "readline" to grab stdout, "readavailable" appears to work deterministically for stderr. I think this is because the server writes to stderr first. As long as the OS delivers writes to pipes in the same order they were made, this should work. If there are timing issues, we can introduce a mechanism to readline from stderr. Differential Revision: https://phab.mercurial-scm.org/D2392
Tue, 27 Feb 2018 15:47:44 -0800 debugcommands: add debugserve command
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 15:47:44 -0800] rev 36556
debugcommands: add debugserve command `hg serve --stdio` requires the exact command argument form `hg -R <path> serve --stdio` for security reasons. An upcoming commit will need to start an SSH protocol server process with custom settings. This commit creates a `hg debugserve` command for starting servers with custom options. There are no security restrictions and we can add options here that aren't appropriate for built-in commands. We currently only support starting an SSH protocol server using the process's stdio file descriptors. The server supports logging its I/O activity to a file descriptor number passed as a command argument. Differential Revision: https://phab.mercurial-scm.org/D2464
Sun, 25 Feb 2018 11:16:09 -0800 wireprotoserver: support logging SSH server I/O to a file descriptor
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 25 Feb 2018 11:16:09 -0800] rev 36555
wireprotoserver: support logging SSH server I/O to a file descriptor We will soon introduce a debug command and tests for low-level I/O behavior of the SSH wire protocol. To facilitate this, we need to instrument the SSH server so it can log its I/O as events occur. We teach the SSH server to convert its stdout and stderr file objects into file object proxies. We configure these proxies to log to a file descriptor whose file number is specified via a config option. The idea is to have a future debug command start the SSH server process with access to an extra file descriptor that can be used by the server process to log I/O. Monitoring only the write I/O will be more robust than monitoring both writes and reads from the client process because read operations are not deterministic. This will matter for tests that capture raw I/O activity. Differential Revision: https://phab.mercurial-scm.org/D2463
Sat, 24 Feb 2018 12:24:03 -0800 util: enable observing of util.bufferedinputpipe
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 12:24:03 -0800] rev 36554
util: enable observing of util.bufferedinputpipe Our file object proxy is useful. But it doesn't capture all I/O. The "os" module offers low-level interfaces to various system calls. For example, os.read() exposes read(2) to read from a file descriptor. bufferedinputpipe is special in a few ways. First, it acts as a proxy of sorts around our [potentially proxied] file object. In addition, it uses os.read() to satisfy all I/O. This means that our observer doesn't see notifications for reads on this type. This is preventing us from properly instrumenting reads on ssh peers. This commit teaches bufferedinputpipe to be aware of our observed file objects. We do this by introducing a class variation that notifies our observer of os.read() events. Since read() and readline() bypass os.read(), we also teach this instance to notify the observer for buffered variations of these reads as well. We don't report them as actual read() and readline() calls because these methods are never called on the actual file object but rather a buffered version of it. We introduce bufferedinputpipe.__new__ to swap in the new class if the passed file object is a fileobjectproxy. This makes hooking up the observer automatic. And it is a zero cost abstraction for I/O operations on non-proxied file objects. Differential Revision: https://phab.mercurial-scm.org/D2404
Sat, 24 Feb 2018 12:22:20 -0800 util: add a file object proxy that can notify observers
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 12:22:20 -0800] rev 36553
util: add a file object proxy that can notify observers There are various places in Mercurial where we may want to instrument low-level I/O. The use cases I can think of all involve development-type activities like monitoring the raw bytes passing through a file (for testing and debugging), counting the number of I/O function calls (for performance monitoring), and changing the behavior of I/O function calls (e.g. simulating a failure) (to facilitate testing). This commit invents a mechanism to wrap a file object so we can observe activity on it. We have similar functionality in badserverext.py. But that's a test-only extension and is pretty specific to the HTTP server. I would like a mechanism in core that is sufficiently generic so it can be used by multiple consumers, including `hg debug*` commands. The added code consists of a proxy type for file objects. It is bound to an "observer," which receives callbacks whenever I/O methods are called. We also add an implementation of an observer that logs specific I/O events. This observer will be used in an upcoming commit to record low-level wire protocol activity. A helper function to convert a file object into an observed file object has also been implemented. I don't anticipate any critical functionality in core using these types. So I don't think explicit test coverage is worth implementing. Differential Revision: https://phab.mercurial-scm.org/D2462
Sat, 24 Feb 2018 12:07:21 -0800 wireprotoserver: ability to run an SSH server until an event is set
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 12:07:21 -0800] rev 36552
wireprotoserver: ability to run an SSH server until an event is set It seems useful to be able to start an SSH protocol server that won't run forever and won't call sys.exit() when it stops. This could be used to facilitate intra-process testing of the SSH protocol, for example. We teach the server function to loop until a threading.Event is set and invent a new API to run the server until an event is set. It also won't sys.exit() afterwards. There aren't many callers of serve_forever(). So we could refactor them relatively easily. But I was lazy. threading.Event might be a bit heavyweight. An alternative would be a list whose only elements is changed. We can't use a simple scalar value like a bool or int because those types are immutable. Events are what you use in systems programming for this use case, so the use of threading.Event seems justified. Differential Revision: https://phab.mercurial-scm.org/D2461
Thu, 01 Mar 2018 15:46:21 -0500 tests: fix run-tests environment cleanup on Python 3
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 15:46:21 -0500] rev 36551
tests: fix run-tests environment cleanup on Python 3 Differential Revision: https://phab.mercurial-scm.org/D2521
Sun, 25 Feb 2018 16:14:37 +0900 templatekw: add compatlist() as a replacement for showlist()
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:14:37 +0900] rev 36550
templatekw: add compatlist() as a replacement for showlist() Just like compatdict(), this is mostly a copy of showlist(). showchildren() is ported to the new API as an example.
Sun, 25 Feb 2018 16:03:19 +0900 templatekw: add compatdict() as a replacement for showdict()
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:03:19 +0900] rev 36549
templatekw: add compatdict() as a replacement for showdict() This is mostly a copy of showdict(), which will be deprecated later. See the docstring for why it's called a "compat" dict. showenvvars() is ported to the new API as an example.
Sun, 25 Feb 2018 15:43:35 +0900 templatekw: pass templater to _showlist() by an explicit argument
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 15:43:35 +0900] rev 36548
templatekw: pass templater to _showlist() by an explicit argument Prepares for switching to the (context, mapping) API.
Fri, 22 Dec 2017 21:59:38 +0900 hgweb: make templater mostly compatible with log templates
Yuya Nishihara <yuya@tcha.org> [Fri, 22 Dec 2017 21:59:38 +0900] rev 36547
hgweb: make templater mostly compatible with log templates Prepares for gradually switching templatekw.showsuccsandmarkers() to new API. This was a PoC showing how to reuse templatekw functions in hgweb. We could remove rev, node, author, etc. from the commonentry() table, but we'll have to carefully remove all corresponding symbols from webcommands.*(). Otherwise, we would face the issue5612. Still templatekw.keywords aren't exported. Otherwise some tests would fail because the atom template expects {files} to be empty in filelog, but templatekw.showfiles() provides the {files} implementation.
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
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 36450
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 36449
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
(0) -30000 -10000 -3000 -1000 -384 +384 +1000 +3000 +10000 tip