Mercurial > public > mercurial-scm > hg-stable
diff mercurial/sshrepo.py @ 11586:ddaaaa23bb8f
protocol: move basic ssh client commands to wirerepository
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 14 Jul 2010 16:34:57 -0500 |
parents | 02a4373ca5cd |
children | 8a1f625e971d |
line wrap: on
line diff
--- a/mercurial/sshrepo.py Wed Jul 14 16:19:27 2010 -0500 +++ b/mercurial/sshrepo.py Wed Jul 14 16:34:57 2010 -0500 @@ -7,7 +7,7 @@ from node import bin, hex from i18n import _ -import repo, util, error, encoding +import repo, util, error, encoding, wireproto import re, urllib class remotelock(object): @@ -20,7 +20,7 @@ if self.repo: self.release() -class sshrepository(repo.repository): +class sshrepository(wireproto.wirerepository): def __init__(self, ui, path, create=0): self._url = path self.ui = ui @@ -101,6 +101,10 @@ self.cleanup() raise exception + def _abort(self, exception): + self.cleanup() + raise exception + def cleanup(self): try: self.pipeo.close() @@ -128,6 +132,10 @@ self.do_cmd(cmd, **args) return self._recv() + def _call(self, cmd, **args): + self.do_cmd(cmd, **args) + return self._recv() + def _recv(self): l = self.pipei.readline() self.readerr() @@ -152,60 +160,6 @@ def unlock(self): self.call("unlock") - def lookup(self, key): - self.requirecap('lookup', _('look up remote revision')) - d = self.call("lookup", key=key) - success, data = d[:-1].split(" ", 1) - if int(success): - return bin(data) - else: - self.abort(error.RepoError(data)) - - def heads(self): - d = self.call("heads") - try: - return map(bin, d[:-1].split(" ")) - except: - self.abort(error.ResponseError(_("unexpected response:"), d)) - - def branchmap(self): - d = self.call("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.call("branches", nodes=n) - try: - br = [tuple(map(bin, b.split(" "))) for b in d.splitlines()] - return br - except: - 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)) - def changegroup(self, nodes, kind): n = " ".join(map(hex, nodes)) return self.do_cmd("changegroup", roots=n) @@ -273,21 +227,4 @@ 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.call("pushkey", - namespace=namespace, key=key, old=old, new=new) - return bool(int(d)) - - def listkeys(self, namespace): - if not self.capable('pushkey'): - return {} - d = self.call("listkeys", namespace=namespace) - r = {} - for l in d.splitlines(): - k, v = l.split('\t') - r[k.decode('string-escape')] = v.decode('string-escape') - return r - instance = sshrepository