equal
deleted
inserted
replaced
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 |