elog/mod_save: use _ensure_log_subdirs
authorZac Medico <zmedico@gentoo.org>
Mon, 11 Jul 2011 16:55:16 +0000 (09:55 -0700)
committerZac Medico <zmedico@gentoo.org>
Mon, 11 Jul 2011 16:55:16 +0000 (09:55 -0700)
This fixes permission issues with category subdirectories created for
FEATURES=split-elog.

pym/portage/elog/mod_save.py
pym/portage/elog/mod_save_summary.py
pym/portage/package/ebuild/prepare_build_dirs.py

index 0f097946677ce886b35bb33a8782c57aef463066..40ba267658e0ebcdb738aecd1091c92c6234bdb7 100644 (file)
@@ -8,17 +8,15 @@ from portage import os
 from portage import _encodings
 from portage import _unicode_decode
 from portage import _unicode_encode
-from portage.data import portage_uid, portage_gid
-from portage.util import ensure_dirs
+from portage.package.ebuild.prepare_build_dirs import _ensure_log_subdirs
+from portage.util import normalize_path
 
 def process(mysettings, key, logentries, fulltext):
-       path = key.replace("/", ":")
 
-       if mysettings["PORT_LOGDIR"] != "":
-               elogdir = os.path.join(mysettings["PORT_LOGDIR"], "elog")
+       if mysettings.get("PORT_LOGDIR"):
+               logdir = normalize_path(mysettings["PORT_LOGDIR"])
        else:
-               elogdir = os.path.join(os.sep, "var", "log", "portage", "elog")
-       ensure_dirs(elogdir, uid=portage_uid, gid=portage_gid, mode=0o2770)
+               logdir = os.path.join(os.sep, "var", "log", "portage")
 
        cat = mysettings['CATEGORY']
        pf = mysettings['PF']
@@ -28,11 +26,12 @@ def process(mysettings, key, logentries, fulltext):
                encoding=_encodings['content'], errors='replace') + ".log"
 
        if "split-elog" in mysettings.features:
-               elogfilename = os.path.join(elogdir, cat, elogfilename)
+               log_subdir = os.path.join(logdir, "elog", cat)
+               elogfilename = os.path.join(log_subdir, elogfilename)
        else:
-               elogfilename = os.path.join(elogdir, cat + ':' + elogfilename)
-       ensure_dirs(os.path.dirname(elogfilename),
-               uid=portage_uid, gid=portage_gid, mode=0o2770)
+               log_subdir = os.path.join(logdir, "elog")
+               elogfilename = os.path.join(log_subdir, cat + ':' + elogfilename)
+       _ensure_log_subdirs(logdir, log_subdir)
 
        elogfile = io.open(_unicode_encode(elogfilename,
                encoding=_encodings['fs'], errors='strict'),
index 8970f06d04610157df76523a96e8b0c21b0a2a35..67bd76e55d98ba885dfc6f1111536fd8b71160b9 100644 (file)
@@ -8,23 +8,32 @@ from portage import os
 from portage import _encodings
 from portage import _unicode_decode
 from portage import _unicode_encode
-from portage.data import portage_uid, portage_gid
 from portage.localization import _
-from portage.util import ensure_dirs, apply_permissions
+from portage.package.ebuild.prepare_build_dirs import _ensure_log_subdirs
+from portage.util import apply_permissions, normalize_path
 
 def process(mysettings, key, logentries, fulltext):
-       if mysettings["PORT_LOGDIR"] != "":
-               elogdir = os.path.join(mysettings["PORT_LOGDIR"], "elog")
+       if mysettings.get("PORT_LOGDIR"):
+               logdir = normalize_path(mysettings["PORT_LOGDIR"])
        else:
-               elogdir = os.path.join(os.sep, "var", "log", "portage", "elog")
-       ensure_dirs(elogdir, uid=portage_uid, gid=portage_gid, mode=0o2770)
+               logdir = os.path.join(os.sep, "var", "log", "portage")
+
+       elogdir = os.path.join(logdir, "elog")
+       _ensure_log_subdirs(logdir, elogdir)
 
        # TODO: Locking
        elogfilename = elogdir+"/summary.log"
        elogfile = io.open(_unicode_encode(elogfilename,
                encoding=_encodings['fs'], errors='strict'),
                mode='a', encoding=_encodings['content'], errors='backslashreplace')
-       apply_permissions(elogfilename, mode=0o60, mask=0)
+
+       # Copy group permission bits from parent directory.
+       elogdir_st = os.stat(elogdir)
+       elogdir_gid = elogdir_st.st_gid
+       elogdir_grp_mode = 0o060 & elogdir_st.st_mode
+       apply_permissions(elogfilename, gid=elogdir_gid,
+               mode=elogdir_grp_mode, mask=0)
+
        time_str = time.strftime("%Y-%m-%d %H:%M:%S %Z",
                time.localtime(time.time()))
        # Avoid potential UnicodeDecodeError later.
index de1dc93f7685f85f9373467b0a3eb235437e4917..aaf0740d8846c282a9a69ceac65bd014e8aead4a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2010 Gentoo Foundation
+# Copyright 2010-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 __all__ = ['prepare_build_dirs']