D5805: zeroconf: port to Python 3
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Sat Feb 2 20:08:59 UTC 2019
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
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.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5805
AFFECTED FILES
hgext/zeroconf/__init__.py
CHANGE DETAILS
diff --git a/hgext/zeroconf/__init__.py b/hgext/zeroconf/__init__.py
--- a/hgext/zeroconf/__init__.py
+++ b/hgext/zeroconf/__init__.py
@@ -34,6 +34,7 @@
encoding,
extensions,
hg,
+ pycompat,
ui as uimod,
)
from mercurial.hgweb import (
@@ -55,26 +56,26 @@
# 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:
pass
# 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,33 +87,35 @@
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,
- 'path': "/" + path},
+ properties = {
+ 'description': pycompat.bytestr(desc),
+ 'path': pycompat.bytestr(r"/" + path)},
address = localip, weight = 0, priority = 0)
server.registerService(svc)
# 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,
- 'path': "/" + path},
+ properties = {
+ 'description': pycompat.bytestr(desc),
+ 'path': pycompat.bytestr(r"/" + path)},
address = localip, weight = 0, priority = 0)
server.registerService(svc)
@@ -158,18 +161,18 @@
def getzcpaths():
ip = getip()
- if ip.startswith('127.'):
+ if ip.startswith(r'127.'):
return
server = Zeroconf.Zeroconf(ip)
l = listener()
Zeroconf.ServiceBrowser(server, "_hg._tcp.local.", l)
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-"):
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list