Gregory Szorc <gregory.szorc@gmail.com> [Sun, 11 Feb 2018 16:29:35 -0800] rev 36150
py3: use hex(hasher.digest())
.hexdigest() returns a system str. .digest() consistently returns
bytes.
Differential Revision: https://phab.mercurial-scm.org/D2159
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 11 Feb 2018 16:21:30 -0800] rev 36149
py3: use string for "close" value in commit extras
The extras dict on commits has string keys and values. Before this
commit, we passed "close" as an integer, which Python 2 gladly
coerced to a string during a %s formatting in the bowels of
changelog.py.
Differential Revision: https://phab.mercurial-scm.org/D2157
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 11 Feb 2018 16:16:43 -0800] rev 36148
py3: catch TypeError during template operations
Two places in this code Python 3 changed from raising ValueError
to TypeError. So catch the addition exceptions.
IMO this code might be better off performing type sniffing. But
I'm not sure the implications of changing that.
Differential Revision: https://phab.mercurial-scm.org/D2156
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 11 Feb 2018 16:08:11 -0800] rev 36147
py3: use bytes literals for test extension
These extensions don't get run through our custom module importer.
It's easy enough to make them dual compatible with Python 2 and 3.
# skip-blame b prefixes
Differential Revision: https://phab.mercurial-scm.org/D2155
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 11 Feb 2018 16:02:32 -0800] rev 36146
py3: use system strings when calling __import__
We must pass the native str type when importing.
Differential Revision: https://phab.mercurial-scm.org/D2154
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 11 Feb 2018 15:58:31 -0800] rev 36145
py3: open patches.queue in binary mode
And switch to using the context manager form of open() while we're
here.
Differential Revision: https://phab.mercurial-scm.org/D2153
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 11 Feb 2018 15:55:47 -0800] rev 36144
py3: compare against bytes instead of str
Differential Revision: https://phab.mercurial-scm.org/D2152
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 11 Feb 2018 19:39:15 -0800] rev 36143
py3: use b'' in mockblackbox.py
This unmasks a ton of other TypeError in blackbox code.
# skip-blame since it's just a b prefix
Differential Revision: https://phab.mercurial-scm.org/D2175
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 15:08:15 -0500] rev 36142
narrow: add a TODO document
These are things that are bigger than we want to handle right now, but
are pretty important to get narrowing to be non-experimental.
Differential Revision: https://phab.mercurial-scm.org/D2196
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 15:00:18 -0500] rev 36141
tests: use `hello` not `capabilities` over ssh
Differential Revision: https://phab.mercurial-scm.org/D2195
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 14:58:32 -0500] rev 36140
narrowwirepeer: add TODO about how we add wireproto args to unbundle :(
Differential Revision: https://phab.mercurial-scm.org/D2194
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 14:49:38 -0500] rev 36139
narrowwirepeer: rename expandnarrow capability to exp-expandnarrow
The expandnarrow functionality lets a client have a shorthand (for
Google it's a reference to a checked-in file) for a set of includes
and excludes. For testing we should probably implement a simple
version of that functionality here. For now, rename the capability so
we don't burn the good name in the future if we need to change
behavior.
It's plausible that this functionality should be dropped from the
narrowhg we ship long-term, but I'm dubious as it seems pretty likely
other organizations will want similar shorthands for commonly-used
subsets of their trees.
Differential Revision: https://phab.mercurial-scm.org/D2193
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 14:42:47 -0500] rev 36138
narrow: make restrictpatterns a little more idiomatic
I'm not sure why invalid_includes was an out-param, but it doesn't
look like there's any reason for it to be now.
Differential Revision: https://phab.mercurial-scm.org/D2192
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 14:37:10 -0500] rev 36137
narrowspec: consistently use set() to copy sets
Differential Revision: https://phab.mercurial-scm.org/D2191
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 14:27:32 -0500] rev 36136
narrowspec: document constraints when validating patterns
Differential Revision: https://phab.mercurial-scm.org/D2190
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 14:15:52 -0500] rev 36135
narrowrevlog: add a TODO around remotefilelog moving to core
We should clean this up considerably when remotefilelog lands, which
we expect to try and accomplish in the near-ish future.
Differential Revision: https://phab.mercurial-scm.org/D2189
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 14:12:28 -0500] rev 36134
narrowrevlog: add what little I can remember about rename filtering
Differential Revision: https://phab.mercurial-scm.org/D2188
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 14:01:44 -0500] rev 36133
manifest: clean up dirlog() to take a d parameter to avoid shadowing dir()
Differential Revision: https://phab.mercurial-scm.org/D2187
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 14:00:02 -0500] rev 36132
narrowrevlog: replace AssertionError with ProgrammingError
Differential Revision: https://phab.mercurial-scm.org/D2186
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 13:54:41 -0500] rev 36131
narrowrevlog: document excludeddir class and friends
Differential Revision: https://phab.mercurial-scm.org/D2185
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 13:51:29 -0500] rev 36130
narrowrepo: add docstring for narrowpats
Differential Revision: https://phab.mercurial-scm.org/D2184
Augie Fackler <augie@google.com> [Fri, 02 Feb 2018 10:51:47 -0500] rev 36129
narrowtemplates: update to use registrar mechanism
It's worth considering at this point if we should just move the two
ellipsis functions to core tagged experimental or something, since
they're not really narrowing-specific...
Differential Revision: https://phab.mercurial-scm.org/D2009
Augie Fackler <augie@google.com> [Fri, 02 Feb 2018 10:37:29 -0500] rev 36128
narrow: move from ELLIPSIS_NODE_FLAG to revlog.REVIDX_ELLIPSIS
We should have been using this value all along. Sigh.
Differential Revision: https://phab.mercurial-scm.org/D2008
Augie Fackler <augie@google.com> [Fri, 02 Feb 2018 10:28:57 -0500] rev 36127
narrowrepo: make repo requirement include the string 'experimental'
We can just move to "narrow" or similar when we finalize the
format. I'm not sure what the migration process from one requirement
to another should look like, but we're about to cross that bridge at
Google once this change lands, so hopefully we'll know soon.
Differential Revision: https://phab.mercurial-scm.org/D2007
Augie Fackler <augie@google.com> [Fri, 02 Feb 2018 10:27:08 -0500] rev 36126
narrow: mark requirement as a constant
Differential Revision: https://phab.mercurial-scm.org/D2006
Augie Fackler <augie@google.com> [Fri, 02 Feb 2018 10:23:23 -0500] rev 36125
narrowbundle2: mark most constants as module-private
This became obvious when preparing the previous change, so there's no
reason to not just do it now while it's easy.
Differential Revision: https://phab.mercurial-scm.org/D2005
Augie Fackler <augie@google.com> [Fri, 02 Feb 2018 10:18:11 -0500] rev 36124
narrowbundle2: make constants ALLCAPS to be a bit more readable
Differential Revision: https://phab.mercurial-scm.org/D2004
Augie Fackler <augie@google.com> [Thu, 01 Feb 2018 18:02:32 -0500] rev 36123
narrow: remove old version-checking logic and declare internal
Differential Revision: https://phab.mercurial-scm.org/D1980
Augie Fackler <augie@google.com> [Thu, 01 Feb 2018 17:19:41 -0500] rev 36122
tests: fold narrow treemanifest tests into main test file using testcases
These tests predate the testcases functionality in run-tests.py, so it
was never done in narrowhg.
Differential Revision: https://phab.mercurial-scm.org/D1979
Augie Fackler <augie@google.com> [Mon, 29 Jan 2018 18:16:23 -0500] rev 36121
narrow: assume addflagprocessor will always exist on revlog module
Differential Revision: https://phab.mercurial-scm.org/D1978
Augie Fackler <augie@google.com> [Mon, 29 Jan 2018 18:13:56 -0500] rev 36120
narrow: this code should assume REVIDX_FLAGS_ORDER exists
Differential Revision: https://phab.mercurial-scm.org/D1977
Augie Fackler <augie@google.com> [Mon, 29 Jan 2018 18:12:17 -0500] rev 36119
narrow: drop legacy support for getsubsetraw
Differential Revision: https://phab.mercurial-scm.org/D1976
Augie Fackler <augie@google.com> [Mon, 29 Jan 2018 18:08:56 -0500] rev 36118
narrow: remove support for old match modules
Differential Revision: https://phab.mercurial-scm.org/D1975
Augie Fackler <augie@google.com> [Mon, 29 Jan 2018 16:19:33 -0500] rev 36117
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Adjustments:
* renamed src to hgext/narrow
* marked extension experimental
* added correct copyright header where it was missing
* updated hgrc extension enable line in library.sh
* renamed library.sh to narrow-library.sh
* dropped all files from repo root as they're not interesting
* dropped test-pyflakes.t, test-check-code.t and test-check-py3-compat.t
* renamed remaining tests to all be test-narrow-* when they didn't already
* fixed test-narrow-expanddirstate.t to refer to narrow and not narrowhg
* fixed tests that wanted `update -C .` instead of `merge --abort`
* corrected a two-space indent in narrowspec.py
* added a missing _() in narrowcommands.py
* fixed imports to pass the import checker
* narrow only adds its --include and --exclude to clone if sparse isn't
enabled to avoid breaking test-duplicateoptions.py. This is a kludge,
and we'll need to come up with a better solution in the future.
These were more or less the minimum to import something that would
pass tests and not create a bunch of files we'll never use.
Changes I intend to make as followups:
* rework the test-narrow-*-tree.t tests to use the new testcases
functionality in run-tests.py
* remove lots of monkeypatches of core things
Differential Revision: https://phab.mercurial-scm.org/D1974
Augie Fackler <augie@google.com> [Mon, 12 Feb 2018 16:51:30 -0500] rev 36116
python3: whitelist another four passing tests
Differential Revision: https://phab.mercurial-scm.org/D2197
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 06 Feb 2018 18:13:15 -0800] rev 36115
wireprotoserver: define and use parse_qs from urllib
The cgi module is deprecated since Python 2.6. Let's replace uses
of it in wireprotoserver with a similar function from urllib.
Differential Revision: https://phab.mercurial-scm.org/D2094
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Feb 2018 17:18:27 -0800] rev 36114
tests: add tests for sending recognized command before handshake
Rounding out our test coverage for the SSH server.
Differential Revision: https://phab.mercurial-scm.org/D2093
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Feb 2018 20:37:51 -0800] rev 36113
wireprotoserver: add version to SSH protocol names (API)
We recently introduced version 2 of the SSH protocol. Like we
did for the peer, we will need to differentiate version 1 and 2
of the server. So, we add version components to the advertised
name of the protocol handler.
Nothing in core looks for the old value. But an extension may.
.. api::
SSH protocol handler now advertises its name internally as
"ssh-v1" instead of "ssh."
Differential Revision: https://phab.mercurial-scm.org/D2092
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Feb 2018 20:27:36 -0800] rev 36112
wireproto: introduce type for raw byte responses (API)
Right now we simply return a str/bytes instance for simple
responses. I want all wire protocol response types to be strongly
typed. So let's invent and use a type for raw bytes responses.
.. api::
Wire protocol command handlers now return a
wireprototypes.bytesresponse instead of a raw bytes instance.
Protocol handlers will continue handling bytes instances. However,
any extensions wrapping wire protocol commands will need to handle
the new type.
Differential Revision: https://phab.mercurial-scm.org/D2089
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Feb 2018 16:29:05 -0800] rev 36111
wireprototypes: move wire protocol response types to new module
We'll be introducing more types as part of wire protocol version 2.
These types are shared between the command handling code (in
wireproto.py) and the protocol/transport code in wireprotoserver.py.
So they need to go in a new module to prevent a cycle.
The types are aliased into the wireproto module, so API compatibility
is preserved.
Differential Revision: https://phab.mercurial-scm.org/D2088
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 01 Feb 2018 16:59:18 -0800] rev 36110
wireprotoserver: move responsetype() out of http handler
This is our last public attribute not part of the protocol
interface!
Differential Revision: https://phab.mercurial-scm.org/D2087
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Feb 2018 20:22:44 -0800] rev 36109
wireproto: remove unused proto argument from supportedcompengines (API)
In theory, the protocol should be passed to this function. But the
argument isn't being used and it is getting in the way of refactoring.
So let's remove it. We can always add it back later if we need it
again.
Differential Revision: https://phab.mercurial-scm.org/D2086
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 01 Feb 2018 17:12:07 -0800] rev 36108
wireprotoserver: rename getfile() to forwardpayload() (API)
"file" can mean a lot of things. Let's rename the interface
method to something more descriptive.
While I was here, I moved the docs about the payload format to
the implementation of the SSH protocol, because it was lying
about what the HTTP payload looked like.
Differential Revision: https://phab.mercurial-scm.org/D2085
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Feb 2018 20:24:22 -0800] rev 36107
wireprotoserver: rename _client to client (API)
This method is called in wireproto.py. It should be part of the public
API/interface.
.. api::
The ``_client()`` method of the wire protocol handler interface has
been renamed to ``client()``.
Differential Revision: https://phab.mercurial-scm.org/D2084
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Feb 2018 20:20:11 -0800] rev 36106
wireprotoserver: remove redirect() and restore() (API)
These methods on the protocol handler interface are no longer used in
core.
.. api::
redirect() and restore() have been removed from the wire protocol
handler interface. Use mayberedirectstdio() instead.
Differential Revision: https://phab.mercurial-scm.org/D2083
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Feb 2018 20:19:06 -0800] rev 36105
wireproto: use maybecapturestdio() for push responses (API)
The "pushres" and "pusherr" response types currently call
proto.restore() in the HTTP protocol. This completes the pairing
with proto.redirect() that occurs in the @wireprotocommand
functions. (But since the SSH protocol has a no-op redirect(),
it doesn't bother calling restore() because it would also be
a no-op.)
Having the disconnect between these paired calls is very confusing.
Knowing that you must use proto.redirect() if returning a "pushres"
or a "pusherr" is even wonkier.
We replace this confusing code with our new context manager for
[maybe] capturing output.
The "pushres" and "pusherr" types have gained an "output" argument
to their constructor and an attribute to hold captured data. The
HTTP protocol now retrieves output from these objects.
.. api::
``wireproto.pushres`` and ``wireproto.pusherr`` now explicitly
track stdio output.
Differential Revision: https://phab.mercurial-scm.org/D2082
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Feb 2018 20:17:47 -0800] rev 36104
wireprotoserver: add context manager mechanism for redirecting stdio
Today, proto.redirect() sets up redirecting stdio and proto.restore()
undoes that. The API is a bit wonky because restore() is only
implemented on the HTTP protocol. Furthermore, not all calls to
redirect() are obviously paired with calls to restore(). For
example, the call to restore() for "unbundle" requests is handled
by the response handler for the HTTP protocol.
This commit introduces a new method on the protocol handler interface
to maybe capture stdio. It emits a file object or None depending on
whether stdio capture is used by the transport.
To prove it works, the "pushkey" wire protocol command has been
updated to use the new API.
I'm not convinced this is the best mechanism to capture stdio. I may
need to come up with something better once the new wire protocol
emerges into existence. But it is strictly better than before because
it removes variance in the wire protocol handler interface. It
therefore gets us closer to a unified interface between the SSH and
HTTP transports.
Differential Revision: https://phab.mercurial-scm.org/D2081
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Feb 2018 20:17:05 -0800] rev 36103
wireprotoserver: split ssh protocol handler and server
We want to formalize the interface for protocol handlers. Today,
server functionality (which is domain specific) is interleaved
with protocol handling functionality (which conforms to a generic
interface) in the sshserver class.
This commit splits the ssh protocol handling code out of the
sshserver class.
Differential Revision: https://phab.mercurial-scm.org/D2080