Auto-generate PORTAGE_INST_GID/UID for prefix.
authorZac Medico <zmedico@gentoo.org>
Fri, 9 Dec 2011 22:36:12 +0000 (14:36 -0800)
committerZac Medico <zmedico@gentoo.org>
Fri, 9 Dec 2011 22:36:12 +0000 (14:36 -0800)
For prefix environments, default to the UID and GID of the top-level
EROOT directory. This allows us to avoid using hardcoded defaults. It's
still possible to override these variables via make.conf.

cnf/make.globals
pym/portage/package/ebuild/config.py

index e1243fb08d0f21d513a5ca36af2fa8287b11eb84..cd06fdcea385e52972a24c66c0e1919d0009a14d 100644 (file)
@@ -111,10 +111,6 @@ CONFIG_PROTECT_MASK="/etc/env.d"
 # Disable auto-use
 USE_ORDER="env:pkg:conf:defaults:pkginternal:repo:env.d"
 
-# Default ownership of installed files.
-PORTAGE_INST_UID="0"
-PORTAGE_INST_GID="0"
-
 # Mode bits for ${WORKDIR} (see ebuild.5).
 PORTAGE_WORKDIR_MODE="0700"
 
index 53a625bc39e00032ce1146b41715d1992fb8247a..bf33978e2f5b37cde90dc18e8c7a07afbf845c3f 100644 (file)
@@ -723,14 +723,30 @@ class config(object):
                                        self["USERLAND"] = "GNU"
                                self.backup_changes("USERLAND")
 
-                       for var in ("PORTAGE_INST_UID", "PORTAGE_INST_GID"):
+                       default_inst_ids = {
+                               "PORTAGE_INST_GID": "0",
+                               "PORTAGE_INST_UID": "0",
+                       }
+
+                       if eprefix:
+                               # For prefix environments, default to the UID and GID of
+                               # the top-level EROOT directory.
+                               try:
+                                       eroot_st = os.stat(eroot)
+                               except OSError:
+                                       pass
+                               else:
+                                       default_inst_ids["PORTAGE_INST_GID"] = str(eroot_st.st_gid)
+                                       default_inst_ids["PORTAGE_INST_UID"] = str(eroot_st.st_uid)
+
+                       for var, default_val in default_inst_ids.items():
                                try:
-                                       self[var] = str(int(self.get(var, "0")))
+                                       self[var] = str(int(self.get(var, default_val)))
                                except ValueError:
                                        writemsg(_("!!! %s='%s' is not a valid integer.  "
-                                               "Falling back to '0'.\n") % (var, self[var]),
+                                               "Falling back to %s.\n") % (var, self[var], default_val),
                                                noiselevel=-1)
-                                       self[var] = "0"
+                                       self[var] = default_val
                                self.backup_changes(var)
 
                        # initialize self.features