Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/sshrepo.py @ 11590:0b15aee0a306
protocol: convert some ssh abort calls
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 14 Jul 2010 17:07:13 -0500 |
parents | e8d22fe2ddab |
children | 0d9cb3f3b0a1 |
comparison
equal
deleted
inserted
replaced
11589:e8d22fe2ddab | 11590:0b15aee0a306 |
---|---|
25 self._url = path | 25 self._url = path |
26 self.ui = ui | 26 self.ui = ui |
27 | 27 |
28 m = re.match(r'^ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))?$', path) | 28 m = re.match(r'^ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))?$', path) |
29 if not m: | 29 if not m: |
30 self.abort(error.RepoError(_("couldn't parse location %s") % path)) | 30 self._abort(error.RepoError(_("couldn't parse location %s") % path)) |
31 | 31 |
32 self.user = m.group(2) | 32 self.user = m.group(2) |
33 self.host = m.group(3) | 33 self.host = m.group(3) |
34 self.port = m.group(5) | 34 self.port = m.group(5) |
35 self.path = m.group(7) or "." | 35 self.path = m.group(7) or "." |
44 cmd = cmd % (sshcmd, args, remotecmd, self.path) | 44 cmd = cmd % (sshcmd, args, remotecmd, self.path) |
45 | 45 |
46 ui.note(_('running %s\n') % cmd) | 46 ui.note(_('running %s\n') % cmd) |
47 res = util.system(cmd) | 47 res = util.system(cmd) |
48 if res != 0: | 48 if res != 0: |
49 self.abort(error.RepoError(_("could not create remote repo"))) | 49 self._abort(error.RepoError(_("could not create remote repo"))) |
50 | 50 |
51 self.validate_repo(ui, sshcmd, args, remotecmd) | 51 self.validate_repo(ui, sshcmd, args, remotecmd) |
52 | 52 |
53 def url(self): | 53 def url(self): |
54 return self._url | 54 return self._url |
77 if l: | 77 if l: |
78 ui.debug("remote: ", l) | 78 ui.debug("remote: ", l) |
79 lines.append(l) | 79 lines.append(l) |
80 max_noise -= 1 | 80 max_noise -= 1 |
81 else: | 81 else: |
82 self.abort(error.RepoError(_("no suitable response from remote hg"))) | 82 self._abort(error.RepoError(_("no suitable response from remote hg"))) |
83 | 83 |
84 self.capabilities = set() | 84 self.capabilities = set() |
85 for l in reversed(lines): | 85 for l in reversed(lines): |
86 if l.startswith("capabilities:"): | 86 if l.startswith("capabilities:"): |
87 self.capabilities.update(l[:-1].split(":")[1].split()) | 87 self.capabilities.update(l[:-1].split(":")[1].split()) |
94 break | 94 break |
95 l = self.pipee.readline() | 95 l = self.pipee.readline() |
96 if not l: | 96 if not l: |
97 break | 97 break |
98 self.ui.status(_("remote: "), l) | 98 self.ui.status(_("remote: "), l) |
99 | |
100 def abort(self, exception): | |
101 self.cleanup() | |
102 raise exception | |
103 | 99 |
104 def _abort(self, exception): | 100 def _abort(self, exception): |
105 self.cleanup() | 101 self.cleanup() |
106 raise exception | 102 raise exception |
107 | 103 |
136 l = self.pipei.readline() | 132 l = self.pipei.readline() |
137 self.readerr() | 133 self.readerr() |
138 try: | 134 try: |
139 l = int(l) | 135 l = int(l) |
140 except: | 136 except: |
141 self.abort(error.ResponseError(_("unexpected response:"), l)) | 137 self._abort(error.ResponseError(_("unexpected response:"), l)) |
142 return self.pipei.read(l) | 138 return self.pipei.read(l) |
143 | 139 |
144 def _send(self, data, flush=False): | 140 def _send(self, data, flush=False): |
145 self.pipeo.write("%d\n" % len(data)) | 141 self.pipeo.write("%d\n" % len(data)) |
146 if data: | 142 if data: |
172 remote server as a bundle. Return an integer indicating the | 168 remote server as a bundle. Return an integer indicating the |
173 result of the push (see localrepository.addchangegroup()).''' | 169 result of the push (see localrepository.addchangegroup()).''' |
174 d = self._call("unbundle", heads=' '.join(map(hex, heads))) | 170 d = self._call("unbundle", heads=' '.join(map(hex, heads))) |
175 if d: | 171 if d: |
176 # remote may send "unsynced changes" | 172 # remote may send "unsynced changes" |
177 self.abort(error.RepoError(_("push refused: %s") % d)) | 173 self._abort(error.RepoError(_("push refused: %s") % d)) |
178 | 174 |
179 while 1: | 175 while 1: |
180 d = cg.read(4096) | 176 d = cg.read(4096) |
181 if not d: | 177 if not d: |
182 break | 178 break |
185 self._send("", flush=True) | 181 self._send("", flush=True) |
186 | 182 |
187 r = self._recv() | 183 r = self._recv() |
188 if r: | 184 if r: |
189 # remote may send "unsynced changes" | 185 # remote may send "unsynced changes" |
190 self.abort(error.RepoError(_("push failed: %s") % r)) | 186 self._abort(error.RepoError(_("push failed: %s") % r)) |
191 | 187 |
192 r = self._recv() | 188 r = self._recv() |
193 try: | 189 try: |
194 return int(r) | 190 return int(r) |
195 except: | 191 except: |
196 self.abort(error.ResponseError(_("unexpected response:"), r)) | 192 self._abort(error.ResponseError(_("unexpected response:"), r)) |
197 | 193 |
198 def addchangegroup(self, cg, source, url): | 194 def addchangegroup(self, cg, source, url): |
199 '''Send a changegroup to the remote server. Return an integer | 195 '''Send a changegroup to the remote server. Return an integer |
200 similar to unbundle(). DEPRECATED, since it requires locking the | 196 similar to unbundle(). DEPRECATED, since it requires locking the |
201 remote.''' | 197 remote.''' |
202 d = self._call("addchangegroup") | 198 d = self._call("addchangegroup") |
203 if d: | 199 if d: |
204 self.abort(error.RepoError(_("push refused: %s") % d)) | 200 self._abort(error.RepoError(_("push refused: %s") % d)) |
205 while 1: | 201 while 1: |
206 d = cg.read(4096) | 202 d = cg.read(4096) |
207 if not d: | 203 if not d: |
208 break | 204 break |
209 self.pipeo.write(d) | 205 self.pipeo.write(d) |
216 if not r: | 212 if not r: |
217 return 1 | 213 return 1 |
218 try: | 214 try: |
219 return int(r) | 215 return int(r) |
220 except: | 216 except: |
221 self.abort(error.ResponseError(_("unexpected response:"), r)) | 217 self._abort(error.ResponseError(_("unexpected response:"), r)) |
222 | 218 |
223 instance = sshrepository | 219 instance = sshrepository |