Mercurial > public > mercurial-scm > hg
comparison mercurial/hgweb/protocol.py @ 11370:db3f6f0e4e7d
pushkey: add http support
pushkey requires the same permissions as push
listitems requires the same permissions as pull
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 16 Jun 2010 16:05:19 -0500 |
parents | 5dc09507b90e |
children | ee1ed6afac21 |
comparison
equal
deleted
inserted
replaced
11369:02a4373ca5cd | 11370:db3f6f0e4e7d |
---|---|
4 # | 4 # |
5 # This software may be used and distributed according to the terms of the | 5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2 or any later version. | 6 # GNU General Public License version 2 or any later version. |
7 | 7 |
8 import cStringIO, zlib, tempfile, errno, os, sys, urllib, copy | 8 import cStringIO, zlib, tempfile, errno, os, sys, urllib, copy |
9 from mercurial import util, streamclone | 9 from mercurial import util, streamclone, pushkey |
10 from mercurial.node import bin, hex | 10 from mercurial.node import bin, hex |
11 from mercurial import changegroup as changegroupmod | 11 from mercurial import changegroup as changegroupmod |
12 from common import ErrorResponse, HTTP_OK, HTTP_NOT_FOUND, HTTP_SERVER_ERROR | 12 from common import ErrorResponse, HTTP_OK, HTTP_NOT_FOUND, HTTP_SERVER_ERROR |
13 | 13 |
14 # __all__ is populated with the allowed commands. Be sure to add to it if | 14 # __all__ is populated with the allowed commands. Be sure to add to it if |
15 # you're adding a new command, or the new command won't work. | 15 # you're adding a new command, or the new command won't work. |
16 | 16 |
17 __all__ = [ | 17 __all__ = [ |
18 'lookup', 'heads', 'branches', 'between', 'changegroup', | 18 'lookup', 'heads', 'branches', 'between', 'changegroup', |
19 'changegroupsubset', 'capabilities', 'unbundle', 'stream_out', | 19 'changegroupsubset', 'capabilities', 'unbundle', 'stream_out', |
20 'branchmap', | 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'.split() | 24 basecaps = 'lookup changegroupsubset branchmap pushkey'.split() |
25 | 25 |
26 def lookup(repo, req): | 26 def lookup(repo, req): |
27 try: | 27 try: |
28 r = hex(repo.lookup(req.form['key'][0])) | 28 r = hex(repo.lookup(req.form['key'][0])) |
29 success = 1 | 29 success = 1 |
202 try: | 202 try: |
203 for chunk in streamclone.stream_out(repo): | 203 for chunk in streamclone.stream_out(repo): |
204 yield chunk | 204 yield chunk |
205 except streamclone.StreamException, inst: | 205 except streamclone.StreamException, inst: |
206 yield str(inst) | 206 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 |