summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-12-11 23:46:11 +0000
committerZac Medico <zmedico@gentoo.org>2007-12-11 23:46:11 +0000
commitdee48ce8f7febb304cf4f56251ad7b3316ffaa67 (patch)
tree639c6b16a77e499915f41cde6dec0755175a3290
parent06203883b252d39c335f5ef2118f43aa093334b8 (diff)
downloadportage-dee48ce8f7febb304cf4f56251ad7b3316ffaa67.tar.gz
portage-dee48ce8f7febb304cf4f56251ad7b3316ffaa67.tar.bz2
portage-dee48ce8f7febb304cf4f56251ad7b3316ffaa67.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. (trunk r8884) svn path=/main/branches/2.1.2/; revision=8886
-rwxr-xr-xbin/emerge5
-rwxr-xr-xbin/portageq3
-rw-r--r--pym/portage.py78
3 files changed, 27 insertions, 59 deletions
diff --git a/bin/emerge b/bin/emerge
index 7c59ece9a..0c29b187b 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -6635,10 +6635,13 @@ def emerge_main():
return retval
if __name__ == "__main__":
- from portage_exception import PermissionDenied
+ from portage_exception import ParseError, PermissionDenied
try:
retval = 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 056502e39..b097889ae 100755
--- a/bin/portageq
+++ b/bin/portageq
@@ -411,6 +411,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/portage.py b/pym/portage.py
index 11965f176..01a2736d3 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -1346,74 +1346,36 @@ class config:
# 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(