--- a/mercurial/httprepo.py Wed Jul 14 16:34:57 2010 -0500
+++ b/mercurial/httprepo.py Wed Jul 14 16:35:51 2010 -0500
@@ -8,7 +8,7 @@
from node import bin, hex, nullid
from i18n import _
-import repo, changegroup, statichttprepo, error, url, util, pushkey
+import repo, changegroup, statichttprepo, error, url, util, wireproto
import os, urllib, urllib2, urlparse, zlib, httplib
import errno, socket
import encoding
@@ -22,7 +22,7 @@
raise IOError(None, _('connection ended unexpectedly'))
yield zd.flush()
-class httprepository(repo.repository):
+class httprepository(wireproto.wirerepository):
def __init__(self, ui, path):
self.path = path
self.caps = None
@@ -138,62 +138,11 @@
# if using keepalive, allow connection to be reused
fp.close()
- def lookup(self, key):
- self.requirecap('lookup', _('look up remote revision'))
- d = self.do_cmd("lookup", key = key).read()
- success, data = d[:-1].split(' ', 1)
- if int(success):
- return bin(data)
- raise error.RepoError(data)
-
- def heads(self):
- d = self.do_read("heads")
- try:
- return map(bin, d[:-1].split(" "))
- except:
- raise error.ResponseError(_("unexpected response:"), d)
+ def _call(self, cmd, **args):
+ return self.do_read(cmd, **args)
- def branchmap(self):
- d = self.do_read("branchmap")
- try:
- branchmap = {}
- for branchpart in d.splitlines():
- branchheads = branchpart.split(' ')
- branchname = urllib.unquote(branchheads[0])
- # Earlier servers (1.3.x) send branch names in (their) local
- # charset. The best we can do is assume it's identical to our
- # own local charset, in case it's not utf-8.
- try:
- branchname.decode('utf-8')
- except UnicodeDecodeError:
- branchname = encoding.fromlocal(branchname)
- branchheads = [bin(x) for x in branchheads[1:]]
- branchmap[branchname] = branchheads
- return branchmap
- except:
- raise error.ResponseError(_("unexpected response:"), d)
-
- def branches(self, nodes):
- n = " ".join(map(hex, nodes))
- d = self.do_read("branches", nodes=n)
- try:
- br = [tuple(map(bin, b.split(" "))) for b in d.splitlines()]
- return br
- except:
- raise error.ResponseError(_("unexpected response:"), d)
-
- def between(self, pairs):
- batch = 8 # avoid giant requests
- r = []
- for i in xrange(0, len(pairs), batch):
- n = " ".join(["-".join(map(hex, p)) for p in pairs[i:i + batch]])
- d = self.do_read("between", pairs=n)
- try:
- r += [l and map(bin, l.split(" ")) or []
- for l in d.splitlines()]
- except:
- raise error.ResponseError(_("unexpected response:"), d)
- return r
+ def _abort(self, exception):
+ raise exception
def changegroup(self, nodes, kind):
n = " ".join(map(hex, nodes))
@@ -259,31 +208,6 @@
def stream_out(self):
return self.do_cmd('stream_out')
- def pushkey(self, namespace, key, old, new):
- if not self.capable('pushkey'):
- return False
- d = self.do_cmd("pushkey", data="", # force a POST
- namespace=namespace, key=key, old=old, new=new).read()
- code, output = d.split('\n', 1)
- try:
- ret = bool(int(code))
- except ValueError, err:
- raise error.ResponseError(
- _('push failed (unexpected response):'), d)
- for l in output.splitlines(True):
- self.ui.status(_('remote: '), l)
- return ret
-
- def listkeys(self, namespace):
- if not self.capable('pushkey'):
- return {}
- d = self.do_cmd("listkeys", namespace=namespace).read()
- r = {}
- for l in d.splitlines():
- k, v = l.split('\t')
- r[k.decode('string-escape')] = v.decode('string-escape')
- return r
-
class httpsrepository(httprepository):
def __init__(self, ui, path):
if not url.has_https:
--- a/mercurial/wireproto.py Wed Jul 14 16:34:57 2010 -0500
+++ b/mercurial/wireproto.py Wed Jul 14 16:35:51 2010 -0500
@@ -59,13 +59,17 @@
self._abort(error.ResponseError(_("unexpected response:"), d))
def between(self, pairs):
- n = " ".join(["-".join(map(hex, p)) for p in pairs])
- d = self._call("between", pairs=n)
- try:
- p = [l and map(bin, l.split(" ")) or [] for l in d.splitlines()]
- return p
- except:
- self._abort(error.ResponseError(_("unexpected response:"), d))
+ batch = 8 # avoid giant requests
+ r = []
+ for i in xrange(0, len(pairs), batch):
+ n = " ".join(["-".join(map(hex, p)) for p in pairs[i:i + batch]])
+ d = self._call("between", pairs=n)
+ try:
+ r += [l and map(bin, l.split(" ")) or []
+ for l in d.splitlines()]
+ except:
+ self._abort(error.ResponseError(_("unexpected response:"), d))
+ return r
def pushkey(self, namespace, key, old, new):
if not self.capable('pushkey'):