comparison mercurial/hgweb/protocol.py @ 11582:26c7d4fc31bf

protocol: use new wireproto infrastructure in ssh - add protocol helper - insert wireproto into dispatcher - drop duplicate functions from hgweb implementation
author Matt Mackall <mpm@selenic.com>
date Wed, 14 Jul 2010 15:25:15 -0500
parents ee1ed6afac21
children 1af96b090116
comparison
equal deleted inserted replaced
11581:4530b3307fb9 11582:26c7d4fc31bf
20 'branchmap', 'pushkey', 'listkeys' 20 'branchmap', 'pushkey', 'listkeys'
21 ] 21 ]
22 22
23 HGTYPE = 'application/mercurial-0.1' 23 HGTYPE = 'application/mercurial-0.1'
24 basecaps = 'lookup changegroupsubset branchmap pushkey'.split() 24 basecaps = 'lookup changegroupsubset branchmap pushkey'.split()
25
26 def lookup(repo, req):
27 try:
28 r = hex(repo.lookup(req.form['key'][0]))
29 success = 1
30 except Exception, inst:
31 r = str(inst)
32 success = 0
33 resp = "%s %s\n" % (success, r)
34 req.respond(HTTP_OK, HGTYPE, length=len(resp))
35 yield resp
36
37 def heads(repo, req):
38 resp = " ".join(map(hex, repo.heads())) + "\n"
39 req.respond(HTTP_OK, HGTYPE, length=len(resp))
40 yield resp
41
42 def branchmap(repo, req):
43 branches = repo.branchmap()
44 heads = []
45 for branch, nodes in branches.iteritems():
46 branchname = urllib.quote(branch)
47 branchnodes = [hex(node) for node in nodes]
48 heads.append('%s %s' % (branchname, ' '.join(branchnodes)))
49 resp = '\n'.join(heads)
50 req.respond(HTTP_OK, HGTYPE, length=len(resp))
51 yield resp
52
53 def branches(repo, req):
54 nodes = []
55 if 'nodes' in req.form:
56 nodes = map(bin, req.form['nodes'][0].split(" "))
57 resp = cStringIO.StringIO()
58 for b in repo.branches(nodes):
59 resp.write(" ".join(map(hex, b)) + "\n")
60 resp = resp.getvalue()
61 req.respond(HTTP_OK, HGTYPE, length=len(resp))
62 yield resp
63
64 def between(repo, req):
65 pairs = [map(bin, p.split("-"))
66 for p in req.form['pairs'][0].split(" ")]
67 resp = ''.join(" ".join(map(hex, b)) + "\n" for b in repo.between(pairs))
68 req.respond(HTTP_OK, HGTYPE, length=len(resp))
69 yield resp
70 25
71 def changegroup(repo, req): 26 def changegroup(repo, req):
72 req.respond(HTTP_OK, HGTYPE) 27 req.respond(HTTP_OK, HGTYPE)
73 nodes = [] 28 nodes = []
74 29
202 try: 157 try:
203 for chunk in streamclone.stream_out(repo): 158 for chunk in streamclone.stream_out(repo):
204 yield chunk 159 yield chunk
205 except streamclone.StreamException, inst: 160 except streamclone.StreamException, inst:
206 yield str(inst) 161 yield str(inst)
207
208 def pushkey(repo, req):
209 namespace = req.form['namespace'][0]
210 key = req.form['key'][0]
211 old = req.form['old'][0]
212 new = req.form['new'][0]
213
214 r = repo.pushkey(namespace, key, old, new)
215 r = '%d\n' % int(r)
216 req.respond(HTTP_OK, HGTYPE, length=len(r))
217 yield r
218
219 def listkeys(repo, req):
220 namespace = req.form['namespace'][0]
221 d = repo.listkeys(namespace).items()
222 t = '\n'.join(['%s\t%s' % (k.encode('string-escape'),
223 v.encode('string-escape')) for k, v in d])
224 req.respond(HTTP_OK, HGTYPE, length=len(t))
225 yield t