public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Anthony G. Basile" <blueness@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/grss:master commit in: grs/
Date: Sat,  8 Aug 2015 17:51:27 +0000 (UTC)	[thread overview]
Message-ID: <1439056477.6a34bce8dbd3dd31caa62e2e44d7ae58dd609457.blueness@gentoo> (raw)

commit:     6a34bce8dbd3dd31caa62e2e44d7ae58dd609457
Author:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Sat Aug  8 17:54:37 2015 +0000
Commit:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Sat Aug  8 17:54:37 2015 +0000
URL:        https://gitweb.gentoo.org/proj/grss.git/commit/?id=6a34bce8

grs/Worldconf.py: clear out managed directories before installing.

 grs/WorldConf.py | 36 +++++++++++++++++++++++++-----------
 1 file changed, 25 insertions(+), 11 deletions(-)

diff --git a/grs/WorldConf.py b/grs/WorldConf.py
index b102e7d..63daace 100644
--- a/grs/WorldConf.py
+++ b/grs/WorldConf.py
@@ -9,15 +9,28 @@ import re
 from grs.Constants import CONST
 
 class WorldConf():
-    """ doc here
-        more doc
-    """
+    """ Manage files in /etc/portage based on /etc/grs/world.conf """
+
+    # TODO: This needs to be expanded.
+    manageddirs = ['env', 'package.env', 'package.accept_keywords', \
+        'package.use', 'package.mask', 'package.unmask']:
 
     @staticmethod
     def install():
-        """ doc here
-            more doc
+        """ Restore /etc/portage to a prestine stage (removing all files
+            in manageddirs, and copy in all files specified in world.conf.
         """
+        # This is harsh, but we need to start from a clean slate because
+        # world.conf can drop sections.  If it does, then those files are
+        # orphaned and can inject flags/envvars which are problematic.
+        for directory in WorldConf.manageddirs:
+            dpath = os.path.join(CONST.PORTAGE_CONFIGDIR, directory)
+            for f in os.listdir(dpath):
+                fpath = os.path.join(dpath, f)
+                if os.path.isfile(fpath):
+                    os.remove(fpath)
+
+        # Now we can read world.conf and populate an empty /etc/portage.
         config = configparser.RawConfigParser(delimiters=':', allow_no_value=True, comment_prefixes=None)
         config.read(CONST.WORLD_CONFIG)
         for s in config.sections():
@@ -32,12 +45,14 @@ class WorldConf():
 
     @staticmethod
     def clean():
-        """ doc here
-            more doc
+        """ Remove any files from /etc/portage that are unnecessary, ie that
+            do not correspond to installed pkgs.
         """
+        # We need to look at all portage provide pkgs and all installed pkgs.
         portdb = portage.db[portage.root]["porttree"].dbapi
         vardb  = portage.db[portage.root]["vartree"].dbapi
 
+        # Remove all installed pkgs from the set of all portage packages.
         uninstalled = portdb.cp_all()
         for p in vardb.cp_all():
             try:
@@ -45,6 +60,7 @@ class WorldConf():
             except ValueError:
                 print('%s installed on local system, but not in portage repo anymore.' % p)
 
+        # Construct a list of canonical named files for uninstalled pkgs.
         slot_atoms = []
         for p in uninstalled:
             cpv = portdb.cp_list(p)[0]
@@ -56,12 +72,10 @@ class WorldConf():
                 slot = slotvar
             slot_atoms.append(re.sub('[/:]', '_', '%s:%s' % (p, slot)))
 
+        # Walk through all files in /etc/portage and remove any files for uninstalled pkgs.
         for dirpath, dirnames, filenames in os.walk(CONST.PORTAGE_CONFIGDIR):
             # Only look at select files and directories.
-            # TODO: This needs to be expanded.
-            if not os.path.basename(dirpath) in ['env', 'package.env', \
-                    'package.accept_keywords', 'package.use', \
-                    'package.mask', 'package.unmask']:
+            if not os.path.basename(dirpath) in WorldConf.manageddirs:
                 continue
 
             for f in filenames:


             reply	other threads:[~2015-08-08 17:51 UTC|newest]

Thread overview: 139+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-08 17:51 Anthony G. Basile [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-07-20  2:22 [gentoo-commits] proj/grss:master commit in: grs/ Anthony G. Basile
2022-07-20  1:49 Anthony G. Basile
2022-07-19 20:22 Anthony G. Basile
2022-07-19 20:18 Anthony G. Basile
2022-07-18 21:13 Anthony G. Basile
2019-04-19 12:29 Anthony G. Basile
2018-11-18 19:09 Anthony G. Basile
2018-11-12  3:08 Anthony G. Basile
2018-11-11 23:57 Anthony G. Basile
2018-11-11 23:35 Anthony G. Basile
2018-11-11 23:16 Anthony G. Basile
2018-06-25 20:32 Anthony G. Basile
2018-04-14 14:53 Anthony G. Basile
2018-04-10  3:14 Anthony G. Basile
2018-02-20  2:27 Anthony G. Basile
2018-02-20  2:04 Anthony G. Basile
2018-02-18 22:38 Anthony G. Basile
2018-02-18 16:37 Anthony G. Basile
2018-02-06 11:57 Anthony G. Basile
2018-02-06 11:42 Anthony G. Basile
2018-02-06 11:33 Anthony G. Basile
2018-02-06 10:55 Anthony G. Basile
2018-01-28 12:31 Anthony G. Basile
2018-01-28 12:09 Anthony G. Basile
2018-01-15  1:31 Anthony G. Basile
2018-01-15  1:23 Anthony G. Basile
2018-01-14 18:22 Anthony G. Basile
2018-01-14 17:05 Anthony G. Basile
2018-01-14 15:02 Anthony G. Basile
2018-01-14 14:37 Anthony G. Basile
2018-01-14 14:07 Anthony G. Basile
2018-01-13 17:40 Anthony G. Basile
2018-01-10 21:02 Anthony G. Basile
2018-01-10 20:40 Anthony G. Basile
2017-12-28 17:54 Anthony G. Basile
2017-12-28 17:22 Anthony G. Basile
2017-12-27  9:25 Anthony G. Basile
2017-12-26 14:19 Anthony G. Basile
2017-12-26  0:04 Anthony G. Basile
2017-12-26  0:04 Anthony G. Basile
2017-12-26  0:04 Anthony G. Basile
2017-12-25 23:38 Anthony G. Basile
2017-12-25 23:24 Anthony G. Basile
2017-12-23 16:04 Anthony G. Basile
2017-12-23 14:15 Anthony G. Basile
2016-03-23 15:08 Anthony G. Basile
2016-03-23 15:05 Anthony G. Basile
2015-11-26 19:48 Anthony G. Basile
2015-10-10 20:20 Anthony G. Basile
2015-10-10 19:36 Anthony G. Basile
2015-10-10 19:07 Anthony G. Basile
2015-10-10 12:22 Anthony G. Basile
2015-10-10 11:44 Anthony G. Basile
2015-10-10 11:22 Anthony G. Basile
2015-10-10 11:20 Anthony G. Basile
2015-10-10 11:10 Anthony G. Basile
2015-10-10  1:46 Anthony G. Basile
2015-10-10  1:40 Anthony G. Basile
2015-10-10  1:34 Anthony G. Basile
2015-10-10  1:26 Anthony G. Basile
2015-10-10  1:23 Anthony G. Basile
2015-10-10  1:18 Anthony G. Basile
2015-10-10  0:34 Anthony G. Basile
2015-10-10  0:29 Anthony G. Basile
2015-10-09 23:33 Anthony G. Basile
2015-10-09 23:33 Anthony G. Basile
2015-10-09 23:30 Anthony G. Basile
2015-10-09 23:11 Anthony G. Basile
2015-10-09 23:06 Anthony G. Basile
2015-10-08 23:52 Anthony G. Basile
2015-10-08 18:03 Anthony G. Basile
2015-10-08 17:20 Anthony G. Basile
2015-10-07 11:28 Anthony G. Basile
2015-10-07 11:15 Anthony G. Basile
2015-10-07 11:07 Anthony G. Basile
2015-10-07 11:03 Anthony G. Basile
2015-10-07 10:57 Anthony G. Basile
2015-10-07  8:31 Anthony G. Basile
2015-10-07  8:01 Anthony G. Basile
2015-10-06 10:07 Anthony G. Basile
2015-09-16 22:08 Anthony G. Basile
2015-09-16  5:16 Anthony G. Basile
2015-09-16  0:37 Anthony G. Basile
2015-09-16  0:32 Anthony G. Basile
2015-09-14  7:17 Anthony G. Basile
2015-09-14  5:32 Anthony G. Basile
2015-09-14  5:25 Anthony G. Basile
2015-09-14  0:29 Anthony G. Basile
2015-09-13 17:31 Anthony G. Basile
2015-09-12 20:56 Anthony G. Basile
2015-09-12 20:56 Anthony G. Basile
2015-08-09 20:26 Anthony G. Basile
2015-08-08 20:06 Anthony G. Basile
2015-08-08 18:01 Anthony G. Basile
2015-07-29  0:20 Anthony G. Basile
2015-07-28 22:44 Anthony G. Basile
2015-07-27 20:49 Anthony G. Basile
2015-07-25 22:36 Anthony G. Basile
2015-07-14 23:37 Anthony G. Basile
2015-07-14 23:29 Anthony G. Basile
2015-07-14 23:19 Anthony G. Basile
2015-07-14 23:16 Anthony G. Basile
2015-07-14 23:02 Anthony G. Basile
2015-07-14 22:39 Anthony G. Basile
2015-07-14 22:35 Anthony G. Basile
2015-07-14 21:45 Anthony G. Basile
2015-07-14 21:21 Anthony G. Basile
2015-07-14 21:02 Anthony G. Basile
2015-07-14 20:55 Anthony G. Basile
2015-07-10 12:54 Anthony G. Basile
2015-07-10  2:37 Anthony G. Basile
2015-07-10  2:37 Anthony G. Basile
2015-07-10  2:01 Anthony G. Basile
2015-07-09 15:26 Anthony G. Basile
2015-07-09  1:44 Anthony G. Basile
2015-07-08 15:44 Anthony G. Basile
2015-07-08 10:28 Anthony G. Basile
2015-07-07 20:52 Anthony G. Basile
2015-07-07 20:34 Anthony G. Basile
2015-07-07 14:30 Anthony G. Basile
2015-07-07 12:54 Anthony G. Basile
2015-07-07 12:46 Anthony G. Basile
2015-07-07 12:44 Anthony G. Basile
2015-07-07 12:33 Anthony G. Basile
2015-07-07 11:26 Anthony G. Basile
2015-07-07  2:17 Anthony G. Basile
2015-07-06 20:13 Anthony G. Basile
2015-07-06 18:13 Anthony G. Basile
2015-07-05 16:49 Anthony G. Basile
2015-07-05 12:04 Anthony G. Basile
2015-07-02 22:30 Anthony G. Basile
2015-07-01 17:27 Anthony G. Basile
2015-07-01 17:03 Anthony G. Basile
2015-07-01 16:53 Anthony G. Basile
2015-07-01 16:52 Anthony G. Basile
2015-07-01 16:07 Anthony G. Basile
2015-07-01 12:30 Anthony G. Basile
2015-07-01 12:23 Anthony G. Basile

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1439056477.6a34bce8dbd3dd31caa62e2e44d7ae58dd609457.blueness@gentoo \
    --to=blueness@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox