comparison mercurial/sshrepo.py @ 6001:30d2fecaab76

merge with crew-stable
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Sun, 03 Feb 2008 21:47:07 -0200
parents 87e6b4f4871b 7939c71f3132
children f89fd07fc51d
comparison
equal deleted inserted replaced
6000:8e7d64989bb8 6001:30d2fecaab76
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