mercurial/sshrepo.py
changeset 1402 9d2c2e6b32b5
parent 1400 cf9a1233738a
child 1736 50de0887bbcd
equal deleted inserted replaced
1401:fbf2b10011aa 1402:9d2c2e6b32b5
    16         self.url = path
    16         self.url = path
    17         self.ui = ui
    17         self.ui = ui
    18 
    18 
    19         m = re.match(r'ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))?', path)
    19         m = re.match(r'ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))?', path)
    20         if not m:
    20         if not m:
    21             raise hg.RepoError("couldn't parse destination %s" % path)
    21             raise hg.RepoError(_("couldn't parse destination %s") % path)
    22 
    22 
    23         self.user = m.group(2)
    23         self.user = m.group(2)
    24         self.host = m.group(3)
    24         self.host = m.group(3)
    25         self.port = m.group(5)
    25         self.port = m.group(5)
    26         self.path = m.group(7) or "."
    26         self.path = m.group(7) or "."
    40         while 1:
    40         while 1:
    41             size = os.fstat(self.pipee.fileno())[stat.ST_SIZE]
    41             size = os.fstat(self.pipee.fileno())[stat.ST_SIZE]
    42             if size == 0: break
    42             if size == 0: break
    43             l = self.pipee.readline()
    43             l = self.pipee.readline()
    44             if not l: break
    44             if not l: break
    45             self.ui.status("remote: ", l)
    45             self.ui.status(_("remote: "), l)
    46 
    46 
    47     def __del__(self):
    47     def __del__(self):
    48         try:
    48         try:
    49             self.pipeo.close()
    49             self.pipeo.close()
    50             self.pipei.close()
    50             self.pipei.close()
    51             # read the error descriptor until EOF
    51             # read the error descriptor until EOF
    52             for l in self.pipee:
    52             for l in self.pipee:
    53                 self.ui.status("remote: ", l)
    53                 self.ui.status(_("remote: "), l)
    54             self.pipee.close()
    54             self.pipee.close()
    55         except:
    55         except:
    56             pass
    56             pass
    57 
    57 
    58     def dev(self):
    58     def dev(self):
    59         return -1
    59         return -1
    60 
    60 
    61     def do_cmd(self, cmd, **args):
    61     def do_cmd(self, cmd, **args):
    62         self.ui.debug("sending %s command\n" % cmd)
    62         self.ui.debug(_("sending %s command\n") % cmd)
    63         self.pipeo.write("%s\n" % cmd)
    63         self.pipeo.write("%s\n" % cmd)
    64         for k, v in args.items():
    64         for k, v in args.items():
    65             self.pipeo.write("%s %d\n" % (k, len(v)))
    65             self.pipeo.write("%s %d\n" % (k, len(v)))
    66             self.pipeo.write(v)
    66             self.pipeo.write(v)
    67         self.pipeo.flush()
    67         self.pipeo.flush()
    73         l = r.readline()
    73         l = r.readline()
    74         self.readerr()
    74         self.readerr()
    75         try:
    75         try:
    76             l = int(l)
    76             l = int(l)
    77         except:
    77         except:
    78             raise hg.RepoError("unexpected response '%s'" % l)
    78             raise hg.RepoError(_("unexpected response '%s'") % l)
    79         return r.read(l)
    79         return r.read(l)
    80 
    80 
    81     def lock(self):
    81     def lock(self):
    82         self.call("lock")
    82         self.call("lock")
    83         return remotelock(self)
    83         return remotelock(self)
    88     def heads(self):
    88     def heads(self):
    89         d = self.call("heads")
    89         d = self.call("heads")
    90         try:
    90         try:
    91             return map(bin, d[:-1].split(" "))
    91             return map(bin, d[:-1].split(" "))
    92         except:
    92         except:
    93             raise hg.RepoError("unexpected response '%s'" % (d[:400] + "..."))
    93             raise hg.RepoError(_("unexpected response '%s'") % (d[:400] + "..."))
    94 
    94 
    95     def branches(self, nodes):
    95     def branches(self, nodes):
    96         n = " ".join(map(hex, nodes))
    96         n = " ".join(map(hex, nodes))
    97         d = self.call("branches", nodes=n)
    97         d = self.call("branches", nodes=n)
    98         try:
    98         try:
    99             br = [ tuple(map(bin, b.split(" "))) for b in d.splitlines() ]
    99             br = [ tuple(map(bin, b.split(" "))) for b in d.splitlines() ]
   100             return br
   100             return br
   101         except:
   101         except:
   102             raise hg.RepoError("unexpected response '%s'" % (d[:400] + "..."))
   102             raise hg.RepoError(_("unexpected response '%s'") % (d[:400] + "..."))
   103 
   103 
   104     def between(self, pairs):
   104     def between(self, pairs):
   105         n = "\n".join(["-".join(map(hex, p)) for p in pairs])
   105         n = "\n".join(["-".join(map(hex, p)) for p in pairs])
   106         d = self.call("between", pairs=n)
   106         d = self.call("between", pairs=n)
   107         try:
   107         try:
   108             p = [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ]
   108             p = [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ]
   109             return p
   109             return p
   110         except:
   110         except:
   111             raise hg.RepoError("unexpected response '%s'" % (d[:400] + "..."))
   111             raise hg.RepoError(_("unexpected response '%s'") % (d[:400] + "..."))
   112 
   112 
   113     def changegroup(self, nodes):
   113     def changegroup(self, nodes):
   114         n = " ".join(map(hex, nodes))
   114         n = " ".join(map(hex, nodes))
   115         f = self.do_cmd("changegroup", roots=n)
   115         f = self.do_cmd("changegroup", roots=n)
   116         return self.pipei
   116         return self.pipei
   117 
   117 
   118     def addchangegroup(self, cg):
   118     def addchangegroup(self, cg):
   119         d = self.call("addchangegroup")
   119         d = self.call("addchangegroup")
   120         if d:
   120         if d:
   121             raise hg.RepoError("push refused: %s", d)
   121             raise hg.RepoError(_("push refused: %s"), d)
   122 
   122 
   123         while 1:
   123         while 1:
   124             d = cg.read(4096)
   124             d = cg.read(4096)
   125             if not d: break
   125             if not d: break
   126             self.pipeo.write(d)
   126             self.pipeo.write(d)