Mercurial > hg
changeset 42549:fa2071753dc2
zeroconf: port to Python 3
Since we're using the source transformer on Python 3, calls into
Zeroconf and return values from it are generally bytes.
But various socket functions require str on Python 3.
This commit contains enough changes to coerce test-paths.t into
passing on Python 3. I suspect there are still a handful of bugs
on Python 3. But the tests do pass.
Differential Revision: https://phab.mercurial-scm.org/D5805
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 02 Feb 2019 12:07:31 -0800 |
parents | 4ebbd7c4a3c5 |
children | 683aeef12830 |
files | hgext/zeroconf/__init__.py |
diffstat | 1 files changed, 18 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/zeroconf/__init__.py Fri Jun 28 16:40:36 2019 -0700 +++ b/hgext/zeroconf/__init__.py Sat Feb 02 12:07:31 2019 -0800 @@ -34,6 +34,7 @@ encoding, extensions, hg, + pycompat, ui as uimod, ) from mercurial.hgweb import ( @@ -55,7 +56,7 @@ # finds external-facing interface without sending any packets (Linux) try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - s.connect(('1.0.0.1', 0)) + s.connect((r'1.0.0.1', 0)) ip = s.getsockname()[0] return ip except socket.error: @@ -64,17 +65,17 @@ # Generic method, sometimes gives useless results try: dumbip = socket.gethostbyaddr(socket.gethostname())[2][0] - if ':' in dumbip: - dumbip = '127.0.0.1' - if not dumbip.startswith('127.'): + if r':' in dumbip: + dumbip = r'127.0.0.1' + if not dumbip.startswith(r'127.'): return dumbip except (socket.gaierror, socket.herror): - dumbip = '127.0.0.1' + dumbip = r'127.0.0.1' # works elsewhere, but actually sends a packet try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - s.connect(('1.0.0.1', 1)) + s.connect((r'1.0.0.1', 1)) ip = s.getsockname()[0] return ip except socket.error: @@ -86,19 +87,19 @@ global server, localip if not server: ip = getip() - if ip.startswith('127.'): + if ip.startswith(r'127.'): # if we have no internet connection, this can happen. return localip = socket.inet_aton(ip) server = Zeroconf.Zeroconf(ip) - hostname = socket.gethostname().split('.')[0] - host = hostname + ".local" - name = "%s-%s" % (hostname, name) + hostname = socket.gethostname().split(r'.')[0] + host = hostname + r".local" + name = r"%s-%s" % (hostname, name) # advertise to browsers svc = Zeroconf.ServiceInfo('_http._tcp.local.', - name + '._http._tcp.local.', + pycompat.bytestr(name + r'._http._tcp.local.'), server = host, port = port, properties = {'description': desc, @@ -108,7 +109,7 @@ # advertise to Mercurial clients svc = Zeroconf.ServiceInfo('_hg._tcp.local.', - name + '._hg._tcp.local.', + pycompat.bytestr(name + r'._hg._tcp.local.'), server = host, port = port, properties = {'description': desc, @@ -158,7 +159,7 @@ def getzcpaths(): ip = getip() - if ip.startswith('127.'): + if ip.startswith(r'127.'): return server = Zeroconf.Zeroconf(ip) l = listener() @@ -166,10 +167,10 @@ time.sleep(1) server.close() for value in l.found.values(): - name = value.name[:value.name.index('.')] - url = "http://%s:%s%s" % (socket.inet_ntoa(value.address), value.port, - value.properties.get("path", "/")) - yield "zc-" + name, url + name = value.name[:value.name.index(b'.')] + url = r"http://%s:%s%s" % (socket.inet_ntoa(value.address), value.port, + value.properties.get(r"path", r"/")) + yield b"zc-" + name, pycompat.bytestr(url) def config(orig, self, section, key, *args, **kwargs): if section == "paths" and key.startswith("zc-"):