Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/sshrepo.py @ 7637:1d54e2f6c0b7
error: move repo errors
rename NoCapability to CapabilityError
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 12 Jan 2009 10:42:31 -0600 |
parents | 4dd7b28003d2 |
children | d2f753830f80 |
comparison
equal
deleted
inserted
replaced
7636:e3f8c6d6b72e | 7637:1d54e2f6c0b7 |
---|---|
5 # This software may be used and distributed according to the terms | 5 # This software may be used and distributed according to the terms |
6 # of the GNU General Public License, incorporated herein by reference. | 6 # of the GNU General Public License, incorporated herein by reference. |
7 | 7 |
8 from node import bin, hex | 8 from node import bin, hex |
9 from i18n import _ | 9 from i18n import _ |
10 import repo, os, re, util | 10 import repo, os, re, util, error |
11 | 11 |
12 class remotelock(object): | 12 class remotelock(object): |
13 def __init__(self, repo): | 13 def __init__(self, repo): |
14 self.repo = repo | 14 self.repo = repo |
15 def release(self): | 15 def release(self): |
24 self._url = path | 24 self._url = path |
25 self.ui = ui | 25 self.ui = ui |
26 | 26 |
27 m = re.match(r'^ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))?$', path) | 27 m = re.match(r'^ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))?$', path) |
28 if not m: | 28 if not m: |
29 self.raise_(repo.RepoError(_("couldn't parse location %s") % path)) | 29 self.raise_(error.RepoError(_("couldn't parse location %s") % path)) |
30 | 30 |
31 self.user = m.group(2) | 31 self.user = m.group(2) |
32 self.host = m.group(3) | 32 self.host = m.group(3) |
33 self.port = m.group(5) | 33 self.port = m.group(5) |
34 self.path = m.group(7) or "." | 34 self.path = m.group(7) or "." |
43 cmd = cmd % (sshcmd, args, remotecmd, self.path) | 43 cmd = cmd % (sshcmd, args, remotecmd, self.path) |
44 | 44 |
45 ui.note(_('running %s\n') % cmd) | 45 ui.note(_('running %s\n') % cmd) |
46 res = util.system(cmd) | 46 res = util.system(cmd) |
47 if res != 0: | 47 if res != 0: |
48 self.raise_(repo.RepoError(_("could not create remote repo"))) | 48 self.raise_(error.RepoError(_("could not create remote repo"))) |
49 | 49 |
50 self.validate_repo(ui, sshcmd, args, remotecmd) | 50 self.validate_repo(ui, sshcmd, args, remotecmd) |
51 | 51 |
52 def url(self): | 52 def url(self): |
53 return self._url | 53 return self._url |
76 if l: | 76 if l: |
77 ui.debug(_("remote: "), l) | 77 ui.debug(_("remote: "), l) |
78 lines.append(l) | 78 lines.append(l) |
79 max_noise -= 1 | 79 max_noise -= 1 |
80 else: | 80 else: |
81 self.raise_(repo.RepoError(_("no suitable response from remote hg"))) | 81 self.raise_(error.RepoError(_("no suitable response from remote hg"))) |
82 | 82 |
83 self.capabilities = util.set() | 83 self.capabilities = util.set() |
84 lines.reverse() | 84 lines.reverse() |
85 for l in lines: | 85 for l in lines: |
86 if l.startswith("capabilities:"): | 86 if l.startswith("capabilities:"): |
155 d = self.call("lookup", key=key) | 155 d = self.call("lookup", key=key) |
156 success, data = d[:-1].split(" ", 1) | 156 success, data = d[:-1].split(" ", 1) |
157 if int(success): | 157 if int(success): |
158 return bin(data) | 158 return bin(data) |
159 else: | 159 else: |
160 self.raise_(repo.RepoError(data)) | 160 self.raise_(error.RepoError(data)) |
161 | 161 |
162 def heads(self): | 162 def heads(self): |
163 d = self.call("heads") | 163 d = self.call("heads") |
164 try: | 164 try: |
165 return map(bin, d[:-1].split(" ")) | 165 return map(bin, d[:-1].split(" ")) |
196 | 196 |
197 def unbundle(self, cg, heads, source): | 197 def unbundle(self, cg, heads, source): |
198 d = self.call("unbundle", heads=' '.join(map(hex, heads))) | 198 d = self.call("unbundle", heads=' '.join(map(hex, heads))) |
199 if d: | 199 if d: |
200 # remote may send "unsynced changes" | 200 # remote may send "unsynced changes" |
201 self.raise_(repo.RepoError(_("push refused: %s") % d)) | 201 self.raise_(error.RepoError(_("push refused: %s") % d)) |
202 | 202 |
203 while 1: | 203 while 1: |
204 d = cg.read(4096) | 204 d = cg.read(4096) |
205 if not d: | 205 if not d: |
206 break | 206 break |
209 self._send("", flush=True) | 209 self._send("", flush=True) |
210 | 210 |
211 r = self._recv() | 211 r = self._recv() |
212 if r: | 212 if r: |
213 # remote may send "unsynced changes" | 213 # remote may send "unsynced changes" |
214 self.raise_(repo.RepoError(_("push failed: %s") % r)) | 214 self.raise_(error.RepoError(_("push failed: %s") % r)) |
215 | 215 |
216 r = self._recv() | 216 r = self._recv() |
217 try: | 217 try: |
218 return int(r) | 218 return int(r) |
219 except: | 219 except: |
220 self.raise_(util.UnexpectedOutput(_("unexpected response:"), r)) | 220 self.raise_(util.UnexpectedOutput(_("unexpected response:"), r)) |
221 | 221 |
222 def addchangegroup(self, cg, source, url): | 222 def addchangegroup(self, cg, source, url): |
223 d = self.call("addchangegroup") | 223 d = self.call("addchangegroup") |
224 if d: | 224 if d: |
225 self.raise_(repo.RepoError(_("push refused: %s") % d)) | 225 self.raise_(error.RepoError(_("push refused: %s") % d)) |
226 while 1: | 226 while 1: |
227 d = cg.read(4096) | 227 d = cg.read(4096) |
228 if not d: | 228 if not d: |
229 break | 229 break |
230 self.pipeo.write(d) | 230 self.pipeo.write(d) |