Make spawning of `id -G portage` happen lazily when userpriv_groups is first
authorZac Medico <zmedico@gentoo.org>
Sat, 10 Apr 2010 08:41:50 +0000 (01:41 -0700)
committerZac Medico <zmedico@gentoo.org>
Sat, 10 Apr 2010 08:41:50 +0000 (01:41 -0700)
accessed.

pym/portage/data.py

index 893663195a4ceb8021c51538d66dc4abf0bcf89c..00fbec42710175dcb54a3280f8a1c9056f027320 100644 (file)
@@ -98,20 +98,25 @@ except KeyError:
 else:
        userpriv_groups = [portage_gid]
        if secpass >= 2:
-               # Get a list of group IDs for the portage user. Do not use
-               # grp.getgrall() since it is known to trigger spurious
-               # SIGPIPE problems with nss_ldap.
-               try:
-                       from subprocess import getstatusoutput
-               except ImportError:
-                       from commands import getstatusoutput
-               mystatus, myoutput = getstatusoutput("id -G %s" % 'portage')
-               if mystatus == os.EX_OK:
-                       for x in myoutput.split():
-                               try:
-                                       userpriv_groups.append(int(x))
-                               except ValueError:
-                                       pass
-                               del x
-                       userpriv_groups = list(set(userpriv_groups))
-               del getstatusoutput, mystatus, myoutput
+               class _LazyUserprivGroups(portage.proxy.objectproxy.ObjectProxy):
+                       def _get_target(self):
+                               global userpriv_groups
+                               if userpriv_groups is not self:
+                                       return userpriv_groups
+                               userpriv_groups = _userpriv_groups
+                               # Get a list of group IDs for the portage user. Do not use
+                               # grp.getgrall() since it is known to trigger spurious
+                               # SIGPIPE problems with nss_ldap.
+                               mystatus, myoutput = \
+                                       portage.subprocess_getstatusoutput("id -G %s" % 'portage')
+                               if mystatus == os.EX_OK:
+                                       for x in myoutput.split():
+                                               try:
+                                                       userpriv_groups.append(int(x))
+                                               except ValueError:
+                                                       pass
+                                       userpriv_groups[:] = sorted(set(userpriv_groups))
+                               return userpriv_groups
+
+               _userpriv_groups = userpriv_groups
+               userpriv_groups = _LazyUserprivGroups()