Mercurial > hg
annotate hgext/zeroconf/__init__.py @ 9622:9d1a480ca6ea
gendoc: fix synopsis
The synopsis is used as an inline literal when generating the manpage.
There should not be any whitespace on the inside of the quotation
marks in inline literals.
Commands with an empty synopsis (such as tags) produces ``tags `` as
synopsis, which triggers a warning.
author | Martin Geisler <mg@lazybytes.net> |
---|---|
date | Tue, 20 Oct 2009 22:42:49 +0200 |
parents | cec4b0d3fb02 |
children | 25e572394f5c |
rev | line source |
---|---|
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 # zeroconf.py - zeroconf support for Mercurial |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 # |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8191
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8191
diff
changeset
|
6 # GNU General Public License version 2, incorporated herein by reference. |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 |
8894
868670dbc237
extensions: improve the consistency of synopses
Cédric Duval <cedricduval@free.fr>
parents:
8866
diff
changeset
|
8 '''discover and advertise repositories on the local network |
7606
e86ca711544d
zeroconf: add extension documentation
David Soria Parra <dsp@php.net>
parents:
7295
diff
changeset
|
9 |
8003
14f27921932a
zeroconf: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
10 Zeroconf enabled repositories will be announced in a network without |
14f27921932a
zeroconf: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
11 the need to configure a server or a service. They can be discovered |
14f27921932a
zeroconf: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
12 without knowing their actual IP address. |
7606
e86ca711544d
zeroconf: add extension documentation
David Soria Parra <dsp@php.net>
parents:
7295
diff
changeset
|
13 |
8003
14f27921932a
zeroconf: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7874
diff
changeset
|
14 To allow other people to discover your repository using run "hg serve" |
9276
51e85071caf0
zeroconf: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9218
diff
changeset
|
15 in your repository:: |
7606
e86ca711544d
zeroconf: add extension documentation
David Soria Parra <dsp@php.net>
parents:
7295
diff
changeset
|
16 |
9218
d3db87d68337
zeroconf: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
9078
diff
changeset
|
17 $ cd test |
d3db87d68337
zeroconf: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
9078
diff
changeset
|
18 $ hg serve |
7606
e86ca711544d
zeroconf: add extension documentation
David Soria Parra <dsp@php.net>
parents:
7295
diff
changeset
|
19 |
9218
d3db87d68337
zeroconf: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
9078
diff
changeset
|
20 You can discover zeroconf enabled repositories by running "hg paths":: |
7606
e86ca711544d
zeroconf: add extension documentation
David Soria Parra <dsp@php.net>
parents:
7295
diff
changeset
|
21 |
9218
d3db87d68337
zeroconf: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
9078
diff
changeset
|
22 $ hg paths |
d3db87d68337
zeroconf: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
9078
diff
changeset
|
23 zc-test = http://example.com:8000/test |
7606
e86ca711544d
zeroconf: add extension documentation
David Soria Parra <dsp@php.net>
parents:
7295
diff
changeset
|
24 ''' |
e86ca711544d
zeroconf: add extension documentation
David Soria Parra <dsp@php.net>
parents:
7295
diff
changeset
|
25 |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
26 import Zeroconf, socket, time, os |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
27 from mercurial import ui |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7088
diff
changeset
|
28 from mercurial import extensions |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
29 from mercurial.hgweb import hgweb_mod |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
30 from mercurial.hgweb import hgwebdir_mod |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
31 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
32 # publish |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
33 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
34 server = None |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
35 localip = None |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
36 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
37 def getip(): |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
38 # finds external-facing interface without sending any packets (Linux) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
39 try: |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
40 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
41 s.connect(('1.0.0.1', 0)) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
42 ip = s.getsockname()[0] |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
43 return ip |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
44 except: |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
45 pass |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
46 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
47 # Generic method, sometimes gives useless results |
8264
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
48 try: |
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
49 dumbip = socket.gethostbyaddr(socket.gethostname())[2][0] |
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
50 if not dumbip.startswith('127.') and ':' not in dumbip: |
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
51 return dumbip |
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
52 except socket.gaierror: |
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
53 dumbip = '127.0.0.1' |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
54 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
55 # works elsewhere, but actually sends a packet |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
56 try: |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
57 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
58 s.connect(('1.0.0.1', 1)) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
59 ip = s.getsockname()[0] |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
60 return ip |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
61 except: |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
62 pass |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
63 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
64 return dumbip |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
65 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
66 def publish(name, desc, path, port): |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
67 global server, localip |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
68 if not server: |
8264
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
69 ip = getip() |
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
70 if ip.startswith('127.'): |
7295
66d0fc108044
zeroconf: Don't break serve if no internet connection is present.
Augie Fackler <durin42@gmail.com>
parents:
7282
diff
changeset
|
71 # if we have no internet connection, this can happen. |
66d0fc108044
zeroconf: Don't break serve if no internet connection is present.
Augie Fackler <durin42@gmail.com>
parents:
7282
diff
changeset
|
72 return |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
73 localip = socket.inet_aton(ip) |
8264
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
74 server = Zeroconf.Zeroconf(ip) |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
75 |
7845
c2cd8d772805
zeroconf: advertise repositories with hostname
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7777
diff
changeset
|
76 hostname = socket.gethostname().split('.')[0] |
c2cd8d772805
zeroconf: advertise repositories with hostname
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7777
diff
changeset
|
77 host = hostname + ".local" |
c2cd8d772805
zeroconf: advertise repositories with hostname
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7777
diff
changeset
|
78 name = "%s-%s" % (hostname, name) |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
79 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
80 # advertise to browsers |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
81 svc = Zeroconf.ServiceInfo('_http._tcp.local.', |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
82 name + '._http._tcp.local.', |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
83 server = host, |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
84 port = port, |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
85 properties = {'description': desc, |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
86 'path': "/" + path}, |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
87 address = localip, weight = 0, priority = 0) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
88 server.registerService(svc) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
89 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
90 # advertise to Mercurial clients |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
91 svc = Zeroconf.ServiceInfo('_hg._tcp.local.', |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
92 name + '._hg._tcp.local.', |
7088
58b7b5ef6cd0
zeroconf: advertise a proper hostname for _hg services
Matt Mackall <mpm@selenic.com>
parents:
7087
diff
changeset
|
93 server = host, |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
94 port = port, |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
95 properties = {'description': desc, |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
96 'path': "/" + path}, |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
97 address = localip, weight = 0, priority = 0) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
98 server.registerService(svc) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
99 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
100 class hgwebzc(hgweb_mod.hgweb): |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
101 def __init__(self, repo, name=None): |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
102 super(hgwebzc, self).__init__(repo, name) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
103 name = self.reponame or os.path.basename(repo.root) |
9442
080227f584a1
zeroconf: fix hgweb published URLs (issue1819)
Patrick Mezard <pmezard@gmail.com>
parents:
8894
diff
changeset
|
104 path = self.repo.ui.config("web", "prefix", "").strip('/') |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
105 desc = self.repo.ui.config("web", "description", name) |
9442
080227f584a1
zeroconf: fix hgweb published URLs (issue1819)
Patrick Mezard <pmezard@gmail.com>
parents:
8894
diff
changeset
|
106 publish(name, desc, path, int(repo.ui.config("web", "port", 8000))) |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
107 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
108 class hgwebdirzc(hgwebdir_mod.hgwebdir): |
9442
080227f584a1
zeroconf: fix hgweb published URLs (issue1819)
Patrick Mezard <pmezard@gmail.com>
parents:
8894
diff
changeset
|
109 def __init__(self, conf, baseui=None): |
080227f584a1
zeroconf: fix hgweb published URLs (issue1819)
Patrick Mezard <pmezard@gmail.com>
parents:
8894
diff
changeset
|
110 super(hgwebdirzc, self).__init__(conf, baseui) |
080227f584a1
zeroconf: fix hgweb published URLs (issue1819)
Patrick Mezard <pmezard@gmail.com>
parents:
8894
diff
changeset
|
111 prefix = self.ui.config("web", "prefix", "").strip('/') + '/' |
9488
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
112 for repo, path in self.repos: |
8191
35604226d712
hgweb: kill parentui references
Matt Mackall <mpm@selenic.com>
parents:
8190
diff
changeset
|
113 u = self.ui.copy() |
9488
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
114 u.readconfig(os.path.join(path, '.hg', 'hgrc')) |
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
115 name = os.path.basename(repo) |
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
116 path = (prefix + repo).strip('/') |
9489
cec4b0d3fb02
zeroconf: read actual description for repos in hgwebdir
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9488
diff
changeset
|
117 desc = u.config('web', 'description', name) |
cec4b0d3fb02
zeroconf: read actual description for repos in hgwebdir
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9488
diff
changeset
|
118 publish(name, desc, path, int(u.config("web", "port", 8000))) |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
119 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
120 # listen |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
121 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
122 class listener(object): |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
123 def __init__(self): |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
124 self.found = {} |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
125 def removeService(self, server, type, name): |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
126 if repr(name) in self.found: |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
127 del self.found[repr(name)] |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
128 def addService(self, server, type, name): |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
129 self.found[repr(name)] = server.getServiceInfo(type, name) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
130 |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
131 def getzcpaths(): |
8264
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
132 ip = getip() |
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
133 if ip.startswith('127.'): |
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
134 return |
63ea850b3312
zeroconf: guess ip for Zeroconf
Alexander Solovyov <piranha@piranha.org.ua>
parents:
8225
diff
changeset
|
135 server = Zeroconf.Zeroconf(ip) |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
136 l = listener() |
7874
d812029cda85
cleanup: drop variables for unused return values
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
7845
diff
changeset
|
137 Zeroconf.ServiceBrowser(server, "_hg._tcp.local.", l) |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
138 time.sleep(1) |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
139 server.close() |
9488
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
140 for value in l.found.values(): |
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
141 name = value.name[:value.name.index('.')] |
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
142 url = "http://%s:%s%s" % (socket.inet_ntoa(value.address), value.port, |
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
143 value.properties.get("path", "/")) |
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
144 yield "zc-" + name, url |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
145 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7088
diff
changeset
|
146 def config(orig, self, section, key, default=None, untrusted=False): |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
147 if section == "paths" and key.startswith("zc-"): |
9488
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
148 for name, path in getzcpaths(): |
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
149 if name == key: |
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
150 return path |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7088
diff
changeset
|
151 return orig(self, section, key, default, untrusted) |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
152 |
7238
b1a9ad7b464e
zeroconf: don't break on hg showconfig
Matt Mackall <mpm@selenic.com>
parents:
7216
diff
changeset
|
153 def configitems(orig, self, section, untrusted=False): |
9488
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
154 repos = orig(self, section, untrusted) |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
155 if section == "paths": |
9488
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
156 repos += getzcpaths() |
33a6213a974e
zeroconf: code cleanup, fixing variable names to be meaningful
Alexander Solovyov <piranha@piranha.org.ua>
parents:
9443
diff
changeset
|
157 return repos |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
158 |
7216
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7088
diff
changeset
|
159 extensions.wrapfunction(ui.ui, 'config', config) |
292fb2ad2846
extensions: use new wrapper functions
Matt Mackall <mpm@selenic.com>
parents:
7088
diff
changeset
|
160 extensions.wrapfunction(ui.ui, 'configitems', configitems) |
7071
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
161 hgweb_mod.hgweb = hgwebzc |
643c751e60b2
zeroconf: initial implementation
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
162 hgwebdir_mod.hgwebdir = hgwebdirzc |