When translating portage uid/gid to root uid/gid after src_install on
authorZac Medico <zmedico@gentoo.org>
Thu, 12 Mar 2009 05:56:54 +0000 (05:56 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 12 Mar 2009 05:56:54 +0000 (05:56 -0000)
FreeBSD, temporarily remove all file flags inside $D in order to avoid
EPERM errors. Thanks to Timothy Redaelli <drizzt@g.o> for reporting.
(trunk r13068)

svn path=/main/branches/2.1.6/; revision=13082

pym/portage/__init__.py

index 80ab03a95715679e4d5f6f6a4e9d3623eb637852..d57d1d76ca9b70d2d74b4e53413c9a4e6a20da24 100644 (file)
@@ -4874,6 +4874,17 @@ def _post_src_install_uid_fix(mysettings):
        """
        inst_uid = int(mysettings["PORTAGE_INST_UID"])
        inst_gid = int(mysettings["PORTAGE_INST_GID"])
+
+       if bsd_chflags:
+               # Temporarily remove all of the flags in order to avoid EPERM errors.
+               os.system("mtree -c -p %s -k flags > %s" % \
+                       (_shell_quote(mysettings["D"]),
+                       _shell_quote(os.path.join(mysettings["T"], "bsdflags.mtree"))))
+               os.system("chflags -R noschg,nouchg,nosappnd,nouappnd %s" % \
+                       (_shell_quote(mysettings["D"]),))
+               os.system("chflags -R nosunlnk,nouunlnk %s 2>/dev/null" % \
+                       (_shell_quote(mysettings["D"]),))
+
        for parent, dirs, files in os.walk(mysettings["D"]):
                for fname in chain(dirs, files):
                        fpath = os.path.join(parent, fname)
@@ -4891,6 +4902,12 @@ def _post_src_install_uid_fix(mysettings):
                                mode=mystat.st_mode, stat_cached=mystat,
                                follow_links=False)
 
+       if bsd_chflags:
+               # Restore all of the flags saved above.
+               os.system("mtree -e -p %s -U -k flags < %s > /dev/null" % \
+                       (_shell_quote(mysettings["D"]),
+                       _shell_quote(os.path.join(mysettings["T"], "bsdflags.mtree"))))
+
 def _post_pkg_preinst_cmd(mysettings):
        """
        Post phase logic and tasks that have been factored out of