action_sync: handle IPv6 [ip] in SYNC some more
authorZac Medico <zmedico@gentoo.org>
Fri, 25 Feb 2011 06:29:31 +0000 (22:29 -0800)
committerZac Medico <zmedico@gentoo.org>
Tue, 1 Mar 2011 20:51:16 +0000 (12:51 -0800)
This will fix bug #356375 some more.

pym/_emerge/actions.py

index 471adb31047a6cb4f592f9425630031495f9d37f..ea8fc42fc102cae588667cc4ae1c5eff36ed505b 100644 (file)
@@ -2067,13 +2067,23 @@ def action_sync(settings, trees, mtimedb, myopts, myaction):
                        maxretries = -1 #default number of retries
 
                retries=0
-               proto, user_name, hostname, port = re.split(
-                       r"(rsync|ssh)://([^:/]+@)?(\[[:\da-fA-F]*\]|[^:/]*)(:[0-9]+)?",
-                       syncuri, maxsplit=4)[1:5]
+               try:
+                       proto, user_name, hostname, port = re.split(
+                               r"(rsync|ssh)://([^:/]+@)?(\[[:\da-fA-F]*\]|[^:/]*)(:[0-9]+)?",
+                               syncuri, maxsplit=4)[1:5]
+               except ValueError:
+                       writemsg_level("!!! SYNC is invalid: %s\n" % syncuri,
+                               noiselevel=-1, level=logging.ERROR)
+                       return 1
                if port is None:
                        port=""
                if user_name is None:
                        user_name=""
+               if re.match(r"^\[[:\da-fA-F]*\]$", hostname) is None:
+                       getaddrinfo_host = hostname
+               else:
+                       # getaddrinfo needs the brackets stripped
+                       getaddrinfo_host = hostname[1:-1]
                updatecache_flg=True
                all_rsync_opts = set(rsync_opts)
                extra_rsync_opts = portage.util.shlex_split(
@@ -2092,7 +2102,7 @@ def action_sync(settings, trees, mtimedb, myopts, myaction):
 
                try:
                        addrinfos = getaddrinfo_validate(
-                               socket.getaddrinfo(hostname, None,
+                               socket.getaddrinfo(getaddrinfo_host, None,
                                family, socket.SOCK_STREAM))
                except socket.error as e:
                        writemsg_level(