112 self.pipeo.flush() |
112 self.pipeo.flush() |
113 |
113 |
114 return self.pipei |
114 return self.pipei |
115 |
115 |
116 def call(self, cmd, **args): |
116 def call(self, cmd, **args): |
117 r = self.do_cmd(cmd, **args) |
117 self.do_cmd(cmd, **args) |
118 l = r.readline() |
118 return self._recv() |
|
119 |
|
120 def _recv(self): |
|
121 l = self.pipei.readline() |
119 self.readerr() |
122 self.readerr() |
120 try: |
123 try: |
121 l = int(l) |
124 l = int(l) |
122 except: |
125 except: |
123 self.raise_(util.UnexpectedOutput(_("unexpected response:"), l)) |
126 self.raise_(util.UnexpectedOutput(_("unexpected response:"), l)) |
124 return r.read(l) |
127 return self.pipei.read(l) |
|
128 |
|
129 def _send(self, data, flush=False): |
|
130 self.pipeo.write("%d\n" % len(data)) |
|
131 if data: |
|
132 self.pipeo.write(data) |
|
133 if flush: |
|
134 self.pipeo.flush() |
|
135 self.readerr() |
125 |
136 |
126 def lock(self): |
137 def lock(self): |
127 self.call("lock") |
138 self.call("lock") |
128 return remotelock(self) |
139 return remotelock(self) |
129 |
140 |
180 # remote may send "unsynced changes" |
191 # remote may send "unsynced changes" |
181 self.raise_(repo.RepoError(_("push refused: %s") % d)) |
192 self.raise_(repo.RepoError(_("push refused: %s") % d)) |
182 |
193 |
183 while 1: |
194 while 1: |
184 d = cg.read(4096) |
195 d = cg.read(4096) |
185 if not d: break |
196 if not d: |
186 self.pipeo.write(str(len(d)) + '\n') |
197 break |
187 self.pipeo.write(d) |
198 self._send(d) |
188 self.readerr() |
199 |
189 |
200 self._send("", flush=True) |
190 self.pipeo.write('0\n') |
201 |
191 self.pipeo.flush() |
202 r = self._recv() |
192 |
|
193 self.readerr() |
|
194 l = int(self.pipei.readline()) |
|
195 r = self.pipei.read(l) |
|
196 if r: |
203 if r: |
197 # remote may send "unsynced changes" |
204 # remote may send "unsynced changes" |
198 self.raise_(repo.RepoError(_("push failed: %s") % r)) |
205 self.raise_(repo.RepoError(_("push failed: %s") % r)) |
199 |
206 |
200 self.readerr() |
207 r = self._recv() |
201 l = int(self.pipei.readline()) |
208 try: |
202 r = self.pipei.read(l) |
209 return int(r) |
203 return int(r) |
210 except: |
|
211 self.raise_(util.UnexpectedOutput(_("unexpected response:"), r)) |
204 |
212 |
205 def addchangegroup(self, cg, source, url): |
213 def addchangegroup(self, cg, source, url): |
206 d = self.call("addchangegroup") |
214 d = self.call("addchangegroup") |
207 if d: |
215 if d: |
208 self.raise_(repo.RepoError(_("push refused: %s") % d)) |
216 self.raise_(repo.RepoError(_("push refused: %s") % d)) |
209 while 1: |
217 while 1: |
210 d = cg.read(4096) |
218 d = cg.read(4096) |
211 if not d: break |
219 if not d: |
|
220 break |
212 self.pipeo.write(d) |
221 self.pipeo.write(d) |
213 self.readerr() |
222 self.readerr() |
214 |
223 |
215 self.pipeo.flush() |
224 self.pipeo.flush() |
216 |
225 |
217 self.readerr() |
226 self.readerr() |
218 l = int(self.pipei.readline()) |
227 r = self._recv() |
219 r = self.pipei.read(l) |
|
220 if not r: |
228 if not r: |
221 return 1 |
229 return 1 |
222 return int(r) |
230 try: |
|
231 return int(r) |
|
232 except: |
|
233 self.raise_(util.UnexpectedOutput(_("unexpected response:"), r)) |
223 |
234 |
224 def stream_out(self): |
235 def stream_out(self): |
225 return self.do_cmd('stream_out') |
236 return self.do_cmd('stream_out') |
226 |
237 |
227 instance = sshrepository |
238 instance = sshrepository |