Skip to content
Snippets Groups Projects
Commit fa207175 authored by Gregory Szorc's avatar Gregory Szorc
Browse files

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
parent 4ebbd7c4
No related branches found
No related tags found
No related merge requests found
......@@ -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,8 +65,8 @@
# 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):
......@@ -70,7 +71,7 @@
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)
......@@ -73,8 +74,8 @@
# 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,9 +87,9 @@
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)
......@@ -90,11 +91,11 @@
# 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.',
......@@ -98,7 +99,7 @@
# 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-"):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment