2155 class sshrepository(remoterepository): |
2155 class sshrepository(remoterepository): |
2156 def __init__(self, ui, path): |
2156 def __init__(self, ui, path): |
2157 self.url = path |
2157 self.url = path |
2158 self.ui = ui |
2158 self.ui = ui |
2159 |
2159 |
2160 m = re.match(r'ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))', path) |
2160 m = re.match(r'ssh://(([^@]+)@)?([^:/]+)(:(\d+))?(/(.*))?', path) |
2161 if not m: |
2161 if not m: |
2162 raise RepoError("couldn't parse destination %s" % path) |
2162 raise RepoError("couldn't parse destination %s" % path) |
2163 |
2163 |
2164 self.user = m.group(2) |
2164 self.user = m.group(2) |
2165 self.host = m.group(3) |
2165 self.host = m.group(3) |
2166 self.port = m.group(5) |
2166 self.port = m.group(5) |
2167 self.path = m.group(7) |
2167 self.path = m.group(7) or "." |
2168 |
2168 |
2169 args = self.user and ("%s@%s" % (self.user, self.host)) or self.host |
2169 args = self.user and ("%s@%s" % (self.user, self.host)) or self.host |
2170 args = self.port and ("%s -p %s") % (args, self.port) or args |
2170 args = self.port and ("%s -p %s") % (args, self.port) or args |
2171 path = self.path or "" |
|
2172 |
|
2173 if not path: |
|
2174 raise RepoError("no remote repository path specified") |
|
2175 |
2171 |
2176 sshcmd = self.ui.config("ui", "ssh", "ssh") |
2172 sshcmd = self.ui.config("ui", "ssh", "ssh") |
2177 remotecmd = self.ui.config("ui", "remotecmd", "hg") |
2173 remotecmd = self.ui.config("ui", "remotecmd", "hg") |
2178 cmd = "%s %s '%s -R %s serve --stdio'" |
2174 cmd = "%s %s '%s -R %s serve --stdio'" |
2179 cmd = cmd % (sshcmd, args, remotecmd, path) |
2175 cmd = cmd % (sshcmd, args, remotecmd, self.path) |
2180 |
2176 |
2181 self.pipeo, self.pipei, self.pipee = os.popen3(cmd) |
2177 self.pipeo, self.pipei, self.pipee = os.popen3(cmd) |
2182 |
2178 |
2183 def readerr(self): |
2179 def readerr(self): |
2184 while 1: |
2180 while 1: |