aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-12-11 23:26:05 +0000
committerZac Medico <zmedico@gentoo.org>2007-12-11 23:26:05 +0000
commit5b3135413d200e58e602a74a6816e48380e53433 (patch)
tree05bd527b571cfbfba23f627f64fea576bc8af738
parent* Raise PermissionDenied from getconfig() when appropriate. (diff)
downloadportage-5b3135413d200e58e602a74a6816e48380e53433.tar.gz
portage-5b3135413d200e58e602a74a6816e48380e53433.tar.bz2
portage-5b3135413d200e58e602a74a6816e48380e53433.zip
Instead of calling sys.exit when a ParseError occurs in the config
constructor, raise a ParseError and make emerge and portageq handle the error. This way consumers of the portage api can handle the ParseError rather than have their application exit. Thanks to lxnay for reporting. svn path=/main/trunk/; revision=8884
-rwxr-xr-xbin/emerge5
-rwxr-xr-xbin/portageq3
-rw-r--r--pym/_emerge/__init__.py4
-rw-r--r--pym/portage/__init__.py78
4 files changed, 27 insertions, 63 deletions
diff --git a/bin/emerge b/bin/emerge
index 5901c2379..1ef575e13 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -13,10 +13,13 @@ except ImportError:
if __name__ == "__main__":
import sys
- from portage.exception import PermissionDenied
+ from portage.exception import ParseError, PermissionDenied
try:
retval = _emerge.emerge_main()
except PermissionDenied, e:
sys.stderr.write("Permission denied: '%s'\n" % str(e))
sys.exit(e.errno)
+ except ParseError, e:
+ sys.stderr.write("%s\n" % str(e))
+ sys.exit(1)
sys.exit(retval)
diff --git a/bin/portageq b/bin/portageq
index 0b7eab6fe..972a38392 100755
--- a/bin/portageq
+++ b/bin/portageq
@@ -459,6 +459,9 @@ def main():
except portage.exception.PermissionDenied, e:
sys.stderr.write("Permission denied: '%s'\n" % str(e))
sys.exit(e.errno)
+ except portage.exception.ParseError, e:
+ sys.stderr.write("%s\n" % str(e))
+ sys.exit(1)
except ValueError, e:
if not e.args or \
not hasattr(e.args[0], "__len__") or \
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index f5aa77631..0bebfef60 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -7188,7 +7188,3 @@ def emerge_main():
if "--pretend" in myopts:
display_news_notification(trees)
return retval
-
-if __name__ == "__main__":
- retval = emerge_main()
- sys.exit(retval)
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index bbb0c57a0..e32e16839 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -1213,74 +1213,36 @@ class config(object):
# make.globals should not be relative to config_root
# because it only contains constants.
- try:
- self.mygcfg = getconfig(os.path.join("/etc", "make.globals"))
+ self.mygcfg = getconfig(os.path.join("/etc", "make.globals"))
+
+ if self.mygcfg is None:
+ self.mygcfg = {}
- if self.mygcfg is None:
- self.mygcfg = {}
- except SystemExit, e:
- raise
- except Exception, e:
- if debug:
- raise
- writemsg("!!! %s\n" % (e), noiselevel=-1)
- if not isinstance(e, EnvironmentError):
- writemsg("!!! Incorrect multiline literals can cause " + \
- "this. Do not use them.\n", noiselevel=-1)
- sys.exit(1)
self.configlist.append(self.mygcfg)
self.configdict["globals"]=self.configlist[-1]
self.make_defaults_use = []
self.mygcfg = {}
if self.profiles:
- try:
- mygcfg_dlists = [getconfig(os.path.join(x, "make.defaults")) for x in self.profiles]
- for cfg in mygcfg_dlists:
- if cfg:
- self.make_defaults_use.append(cfg.get("USE", ""))
- else:
- self.make_defaults_use.append("")
- self.mygcfg = stack_dicts(mygcfg_dlists, incrementals=portage.const.INCREMENTALS, ignore_none=1)
- #self.mygcfg = grab_stacked("make.defaults", self.profiles, getconfig)
- if self.mygcfg is None:
- self.mygcfg = {}
- except SystemExit, e:
- raise
- except Exception, e:
- if debug:
- raise
- writemsg("!!! %s\n" % (e), noiselevel=-1)
- if not isinstance(e, EnvironmentError):
- writemsg("!!! 'rm -Rf /usr/portage/profiles; " + \
- "emerge sync' may fix this. If it does\n",
- noiselevel=-1)
- writemsg("!!! not then please report this to " + \
- "bugs.gentoo.org and, if possible, a dev\n",
- noiselevel=-1)
- writemsg("!!! on #gentoo (irc.freenode.org)\n",
- noiselevel=-1)
- sys.exit(1)
- self.configlist.append(self.mygcfg)
- self.configdict["defaults"]=self.configlist[-1]
-
- try:
- self.mygcfg = getconfig(
- os.path.join(config_root, MAKE_CONF_FILE.lstrip(os.path.sep)),
- allow_sourcing=True)
+ mygcfg_dlists = [getconfig(os.path.join(x, "make.defaults")) \
+ for x in self.profiles]
+ for cfg in mygcfg_dlists:
+ if cfg:
+ self.make_defaults_use.append(cfg.get("USE", ""))
+ else:
+ self.make_defaults_use.append("")
+ self.mygcfg = stack_dicts(mygcfg_dlists,
+ incrementals=portage.const.INCREMENTALS, ignore_none=1)
if self.mygcfg is None:
self.mygcfg = {}
- except SystemExit, e:
- raise
- except Exception, e:
- if debug:
- raise
- writemsg("!!! %s\n" % (e), noiselevel=-1)
- if not isinstance(e, EnvironmentError):
- writemsg("!!! Incorrect multiline literals can cause " + \
- "this. Do not use them.\n", noiselevel=-1)
- sys.exit(1)
+ self.configlist.append(self.mygcfg)
+ self.configdict["defaults"]=self.configlist[-1]
+ self.mygcfg = getconfig(
+ os.path.join(config_root, MAKE_CONF_FILE.lstrip(os.path.sep)),
+ allow_sourcing=True)
+ if self.mygcfg is None:
+ self.mygcfg = {}
# Don't allow the user to override certain variables in make.conf
profile_only_variables = self.configdict["defaults"].get(