mercurial/sshrepo.py
changeset 11589 e8d22fe2ddab
parent 11588 8a1f625e971d
child 11590 0b15aee0a306
equal deleted inserted replaced
11588:8a1f625e971d 11589:e8d22fe2ddab
    63         cmd = util.quotecommand(cmd)
    63         cmd = util.quotecommand(cmd)
    64         ui.note(_('running %s\n') % cmd)
    64         ui.note(_('running %s\n') % cmd)
    65         self.pipeo, self.pipei, self.pipee = util.popen3(cmd)
    65         self.pipeo, self.pipei, self.pipee = util.popen3(cmd)
    66 
    66 
    67         # skip any noise generated by remote shell
    67         # skip any noise generated by remote shell
    68         self.do_cmd("hello")
    68         self._callstream("hello")
    69         r = self.do_cmd("between", pairs=("%s-%s" % ("0"*40, "0"*40)))
    69         r = self._callstream("between", pairs=("%s-%s" % ("0"*40, "0"*40)))
    70         lines = ["", "dummy"]
    70         lines = ["", "dummy"]
    71         max_noise = 500
    71         max_noise = 500
    72         while lines[-1] and max_noise:
    72         while lines[-1] and max_noise:
    73             l = r.readline()
    73             l = r.readline()
    74             self.readerr()
    74             self.readerr()
   116         except:
   116         except:
   117             pass
   117             pass
   118 
   118 
   119     __del__ = cleanup
   119     __del__ = cleanup
   120 
   120 
   121     def do_cmd(self, cmd, **args):
   121     def _callstream(self, cmd, **args):
   122         self.ui.debug("sending %s command\n" % cmd)
   122         self.ui.debug("sending %s command\n" % cmd)
   123         self.pipeo.write("%s\n" % cmd)
   123         self.pipeo.write("%s\n" % cmd)
   124         for k, v in sorted(args.iteritems()):
   124         for k, v in sorted(args.iteritems()):
   125             self.pipeo.write("%s %d\n" % (k, len(v)))
   125             self.pipeo.write("%s %d\n" % (k, len(v)))
   126             self.pipeo.write(v)
   126             self.pipeo.write(v)
   127         self.pipeo.flush()
   127         self.pipeo.flush()
   128 
   128 
   129         return self.pipei
   129         return self.pipei
   130 
   130 
   131     def call(self, cmd, **args):
   131     def _call(self, cmd, **args):
   132         self.do_cmd(cmd, **args)
   132         self._callstream(cmd, **args)
   133         return self._recv()
   133         return self._recv()
   134 
       
   135     def _call(self, cmd, **args):
       
   136         self.do_cmd(cmd, **args)
       
   137         return self._recv()
       
   138 
       
   139     def _callstream(self, cmd, **args):
       
   140         return self.do_cmd(cmd, **args)
       
   141 
   134 
   142     def _recv(self):
   135     def _recv(self):
   143         l = self.pipei.readline()
   136         l = self.pipei.readline()
   144         self.readerr()
   137         self.readerr()
   145         try:
   138         try:
   155         if flush:
   148         if flush:
   156             self.pipeo.flush()
   149             self.pipeo.flush()
   157         self.readerr()
   150         self.readerr()
   158 
   151 
   159     def lock(self):
   152     def lock(self):
   160         self.call("lock")
   153         self._call("lock")
   161         return remotelock(self)
   154         return remotelock(self)
   162 
   155 
   163     def unlock(self):
   156     def unlock(self):
   164         self.call("unlock")
   157         self._call("unlock")
   165 
   158 
   166     def changegroup(self, nodes, kind):
   159     def changegroup(self, nodes, kind):
   167         n = " ".join(map(hex, nodes))
   160         n = " ".join(map(hex, nodes))
   168         return self.do_cmd("changegroup", roots=n)
   161         return self._callstream("changegroup", roots=n)
   169 
   162 
   170     def changegroupsubset(self, bases, heads, kind):
   163     def changegroupsubset(self, bases, heads, kind):
   171         self.requirecap('changegroupsubset', _('look up remote changes'))
   164         self.requirecap('changegroupsubset', _('look up remote changes'))
   172         bases = " ".join(map(hex, bases))
   165         bases = " ".join(map(hex, bases))
   173         heads = " ".join(map(hex, heads))
   166         heads = " ".join(map(hex, heads))
   174         return self.do_cmd("changegroupsubset", bases=bases, heads=heads)
   167         return self._callstream("changegroupsubset", bases=bases, heads=heads)
   175 
   168 
   176     def unbundle(self, cg, heads, source):
   169     def unbundle(self, cg, heads, source):
   177         '''Send cg (a readable file-like object representing the
   170         '''Send cg (a readable file-like object representing the
   178         changegroup to push, typically a chunkbuffer object) to the
   171         changegroup to push, typically a chunkbuffer object) to the
   179         remote server as a bundle. Return an integer indicating the
   172         remote server as a bundle. Return an integer indicating the
   180         result of the push (see localrepository.addchangegroup()).'''
   173         result of the push (see localrepository.addchangegroup()).'''
   181         d = self.call("unbundle", heads=' '.join(map(hex, heads)))
   174         d = self._call("unbundle", heads=' '.join(map(hex, heads)))
   182         if d:
   175         if d:
   183             # remote may send "unsynced changes"
   176             # remote may send "unsynced changes"
   184             self.abort(error.RepoError(_("push refused: %s") % d))
   177             self.abort(error.RepoError(_("push refused: %s") % d))
   185 
   178 
   186         while 1:
   179         while 1:
   204 
   197 
   205     def addchangegroup(self, cg, source, url):
   198     def addchangegroup(self, cg, source, url):
   206         '''Send a changegroup to the remote server.  Return an integer
   199         '''Send a changegroup to the remote server.  Return an integer
   207         similar to unbundle(). DEPRECATED, since it requires locking the
   200         similar to unbundle(). DEPRECATED, since it requires locking the
   208         remote.'''
   201         remote.'''
   209         d = self.call("addchangegroup")
   202         d = self._call("addchangegroup")
   210         if d:
   203         if d:
   211             self.abort(error.RepoError(_("push refused: %s") % d))
   204             self.abort(error.RepoError(_("push refused: %s") % d))
   212         while 1:
   205         while 1:
   213             d = cg.read(4096)
   206             d = cg.read(4096)
   214             if not d:
   207             if not d: