mercurial/sshrepo.py
changeset 6001 30d2fecaab76
parent 5893 87e6b4f4871b
parent 5978 7939c71f3132
child 6211 f89fd07fc51d
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