Make emerge detect an invalid profile an bail out for anything except
authorZac Medico <zmedico@gentoo.org>
Mon, 24 Nov 2008 00:24:27 +0000 (00:24 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 24 Nov 2008 00:24:27 +0000 (00:24 -0000)
--help, --info, --sync, and --version actions. When bailing out, suggest
to revert back to the previous profile configuration advise the user which
actions are allowed with an invalid profile.

svn path=/main/trunk/; revision=12065

pym/_emerge/__init__.py
pym/portage/__init__.py

index ceae0395bf356f099e860ec3ab699b634ecd5a10..ef2e534f4e7013546cabd211722efcde013a636f 100644 (file)
@@ -13925,6 +13925,23 @@ def ambiguous_package_name(arg, atoms, root_config, spinner, myopts):
        print "!!! The short ebuild name \"%s\" is ambiguous. Please specify" % arg
        print "!!! one of the above fully-qualified ebuild names instead.\n"
 
+def profile_check(trees, myaction, myopts):
+       if myaction in ("info", "sync"):
+               return os.EX_OK
+       elif "--version" in myopts or "--help" in myopts:
+               return os.EX_OK
+       for root, root_trees in trees.iteritems():
+               if root_trees["root_config"].settings.profiles:
+                       continue
+               msg = "If you have just changed your profile configuration, you " + \
+                       "should revert back to the previous configuration. Due to " + \
+                       "your current profile being invalid, allowed actions are " + \
+                       "limited to --help, --info, --sync, and --version."
+               writemsg_level("".join("!!! %s\n" % l for l in textwrap.wrap(msg, 70)),
+                       level=logging.ERROR, noiselevel=-1)
+               return 1
+       return os.EX_OK
+
 def emerge_main():
        global portage  # NFC why this is necessary now - genone
        portage._disable_legacy_globals()
@@ -13945,6 +13962,9 @@ def emerge_main():
        os.umask(022)
        settings, trees, mtimedb = load_emerge_config()
        portdb = trees[settings["ROOT"]]["porttree"].dbapi
+       rval = profile_check(trees, myaction, myopts)
+       if rval != os.EX_OK:
+               return rval
 
        if portage._global_updates(trees, mtimedb["updates"]):
                mtimedb.commit()
index e711c6b267e4f94ff74f1b67cc3f573a23ea0fe8..c12f58056009e371b70714f3df4f6deccebab81f 100644 (file)
@@ -1220,7 +1220,7 @@ class config(object):
                                        writemsg("!!! ParseError: %s\n" % str(e), noiselevel=-1)
                                        del e
                                        self.profiles = []
-                       if local_config:
+                       if local_config and self.profiles:
                                custom_prof = os.path.join(
                                        config_root, CUSTOM_PROFILE_PATH.lstrip(os.path.sep))
                                if os.path.exists(custom_prof):