mercurial/hg.py
changeset 817 cf1d9a01dd92
parent 816 8674b7803714
child 824 0932bc2fb2be
child 836 1fe3b14c7044
equal deleted inserted replaced
816:8674b7803714 817:cf1d9a01dd92
  1877 class sshrepository:
  1877 class sshrepository:
  1878     def __init__(self, ui, path):
  1878     def __init__(self, ui, path):
  1879         self.url = path
  1879         self.url = path
  1880         self.ui = ui
  1880         self.ui = ui
  1881 
  1881 
  1882         m = re.match(r'ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))?', path)
  1882         m = re.match(r'ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))', path)
  1883         if not m:
  1883         if not m:
  1884             raise RepoError("couldn't parse destination %s\n" % path)
  1884             raise RepoError("couldn't parse destination %s" % path)
  1885 
  1885 
  1886         self.user = m.group(2)
  1886         self.user = m.group(2)
  1887         self.host = m.group(3)
  1887         self.host = m.group(3)
  1888         self.port = m.group(5)
  1888         self.port = m.group(5)
  1889         self.path = m.group(7)
  1889         self.path = m.group(7)
  1890 
  1890 
  1891         args = self.user and ("%s@%s" % (self.user, self.host)) or self.host
  1891         args = self.user and ("%s@%s" % (self.user, self.host)) or self.host
  1892         args = self.port and ("%s -p %s") % (args, self.port) or args
  1892         args = self.port and ("%s -p %s") % (args, self.port) or args
  1893         path = self.path or ""
  1893         path = self.path or ""
       
  1894 
       
  1895         if not path:
       
  1896             raise RepoError("no remote repository path specified")
  1894 
  1897 
  1895         cmd = "ssh %s 'hg -R %s serve --stdio'"
  1898         cmd = "ssh %s 'hg -R %s serve --stdio'"
  1896         cmd = cmd % (args, path)
  1899         cmd = cmd % (args, path)
  1897 
  1900 
  1898         self.pipeo, self.pipei, self.pipee = os.popen3(cmd)
  1901         self.pipeo, self.pipei, self.pipee = os.popen3(cmd)
  1904             l = self.pipee.readline()
  1907             l = self.pipee.readline()
  1905             if not l: break
  1908             if not l: break
  1906             self.ui.status("remote: ", l)
  1909             self.ui.status("remote: ", l)
  1907 
  1910 
  1908     def __del__(self):
  1911     def __del__(self):
  1909         self.pipeo.close()
  1912         try:
  1910         self.pipei.close()
  1913             self.pipeo.close()
  1911         for l in self.pipee:
  1914             self.pipei.close()
  1912             self.ui.status("remote: ", l)
  1915             for l in self.pipee:
  1913         self.pipee.close()
  1916                 self.ui.status("remote: ", l)
       
  1917             self.pipee.close()
       
  1918         except:
       
  1919             pass
  1914 
  1920 
  1915     def dev(self):
  1921     def dev(self):
  1916         return -1
  1922         return -1
  1917 
  1923 
  1918     def do_cmd(self, cmd, **args):
  1924     def do_cmd(self, cmd, **args):