complete binhost ssh/sftp port support
authorZac Medico <zmedico@gentoo.org>
Fri, 5 Nov 2010 02:24:15 +0000 (19:24 -0700)
committerZac Medico <zmedico@gentoo.org>
Fri, 5 Nov 2010 02:24:15 +0000 (19:24 -0700)
cnf/make.globals
pym/portage/dbapi/bintree.py

index 69a553d5f4e848bdceb906dba97cd148339f5553..645b7a580a7b1b11434cff7967b7a1f418da2886 100644 (file)
@@ -43,10 +43,10 @@ RESUMECOMMAND="/usr/bin/wget -c -t 3 -T 60 --passive-ftp -O \"\${DISTDIR}/\${FIL
 FETCHCOMMAND_RSYNC="rsync -avP \"\${URI}\" \"\${DISTDIR}/\${FILE}\""
 RESUMECOMMAND_RSYNC="rsync -avP \"\${URI}\" \"\${DISTDIR}/\${FILE}\""
 
-FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; exec rsync -avP \\\"\\\${x%%/*}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
+FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
 RESUMECOMMAND_SSH=${FETCHCOMMAND_SSH}
 
-FETCHCOMMAND_SFTP="bash -c \"x=\\\${2#sftp://} ; exec sftp \\\"\\\${x%%/*}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" sftp \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
+FETCHCOMMAND_SFTP="bash -c \"x=\\\${2#sftp://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec sftp -P \\\${port} \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" sftp \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
 
 # Default user options
 FEATURES="assume-digests binpkg-logs distlocks fixpackages
index ee37218066cafaaf1fef5b21d649260c37d65f49..a4ec224e329a5f13b4909ff3d8d04f7596857737 100644 (file)
@@ -740,9 +740,16 @@ class binarytree(object):
 
                if getbinpkgs and 'PORTAGE_BINHOST' in self.settings:
                        base_url = self.settings["PORTAGE_BINHOST"]
-                       urldata = urlparse(base_url)
+                       parsed_url = urlparse(base_url)
+                       host = parsed_url.netloc
+                       port = parsed_url.port
+                       port_args = []
+                       if port is not None:
+                               port_str = ":%s" % (port,)
+                               if host.endswith(port_str):
+                                       host = host[:-len(port_str)]
                        pkgindex_file = os.path.join(self.settings["EROOT"], CACHE_PATH, "binhost",
-                               urldata[1] + urldata[2], "Packages")
+                               host, parsed_url.path.lstrip("/"), "Packages")
                        pkgindex = self._new_pkgindex()
                        try:
                                f = codecs.open(_unicode_encode(pkgindex_file,
@@ -758,7 +765,6 @@ class binarytree(object):
                                        raise
                        local_timestamp = pkgindex.header.get("TIMESTAMP", None)
                        rmt_idx = self._new_pkgindex()
-                       parsed_url = urlparse(base_url)
                        proc = None
                        tmp_filename = None
                        try:
@@ -769,13 +775,6 @@ class binarytree(object):
                                        f = urllib_request_urlopen(base_url.rstrip("/") + "/Packages")
                                except IOError:
                                        path = parsed_url.path.rstrip("/") + "/Packages"
-                                       host = parsed_url.netloc
-                                       port = parsed_url.port
-                                       port_args = []
-                                       if port is not None:
-                                               port_str = ":%s" % (port,)
-                                               if host.endswith(port_str):
-                                                       host = host[:-len(port_str)]
 
                                        if parsed_url.scheme == 'sftp':
                                                # The sftp command complains about 'Illegal seek' if
@@ -784,7 +783,7 @@ class binarytree(object):
                                                fd, tmp_filename = tempfile.mkstemp()
                                                os.close(fd)
                                                if port is not None:
-                                                       port_args = ['-P', port]
+                                                       port_args = ['-P', "%s" % (port,)]
                                                proc = subprocess.Popen(['sftp'] + port_args + \
                                                        [host + ":" + path, tmp_filename])
                                                if proc.wait() != os.EX_OK:
@@ -792,7 +791,7 @@ class binarytree(object):
                                                f = open(tmp_filename, 'rb')
                                        elif parsed_url.scheme == 'ssh':
                                                if port is not None:
-                                                       port_args = ['-p', port]
+                                                       port_args = ['-p', "%s" % (port,)]
                                                proc = subprocess.Popen(['ssh'] + port_args + \
                                                        [host, '--', 'cat', path], stdout=subprocess.PIPE)
                                                f = proc.stdout