From: Fabian Groffen Date: Mon, 30 Apr 2007 14:33:33 +0000 (-0000) Subject: Merged from trunk 6451:6459 X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=d54ddb7f665d722f415d2cb8b8757ee5465bbf53;p=portage.git Merged from trunk 6451:6459 +------------------------------------------------------------------------+ | 6452 | For bug #175058, properly quote the variables in | | zmedico | FETCHCOMMAND and RESUMECOMMAND since the command is spawned | | | in a bash shell. | |---------+--------------------------------------------------------------| | 6454 | For bug #176384, adjust config according to options of the | | zmedico | command being resumed. | |---------+--------------------------------------------------------------| | 6456 | For bug #175058, avoid potential quoting issues by spawning | | zmedico | FETCHCOMMAND without a shell. | |---------+--------------------------------------------------------------| | 6458 | - add new echo module for people who don't want any real | | genone | logging - add copyright header in elog modules and enable | | | keyword substitution - enable save_summary and echo modules | | | in make.globals | |---------+--------------------------------------------------------------| | 6459 | Fix -* handling in gvisible to match incremental semantics | | genone | | +------------------------------------------------------------------------+ svn path=/main/branches/prefix/; revision=6460 --- diff --git a/NEWS b/NEWS index 065970d78..48f66e867 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,10 @@ portage-2.1.3 * Namespace sanitizing: move all portage related code into portage.* namespace, rename portage_foo modules to portage.foo (but keep symlinks for compability) * Add license visibility filtering (GLEP 23) +* Add new elog module "echo" to simply display messages when emerge exits +* Enable "echo" and "save_summary" elog modules by default +* Fix -* handling in package.keywords to work as intended (reset the accepted + keywords list), also see RELEASE-NOTES. portage-2.1.2 ------------- diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 883350403..eba5316e9 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -7,6 +7,16 @@ portage-2.1.3 * The python namespace for portage has been sanitized, all portage related code is now contained within the portage namespace. External script should be updated accordingly, though links exist for backward compability. +* The "save_summary" and "echo" elog modules are now enabled by default. Setting + PORTAGE_ELOG_SYSTEM in make.conf will override this, so if you don't want elog + set PORTAGE_ELOG_SYSTEM="" in make.conf +* -* support in package.keywords was changed as it was inconsistent with + ACCEPT_KEYWORDS behavior (also see http://dev.gentoo.org/~genone/docs/KEYWORDS.stupid). + Previously having -* in package.keywords matched packages with KEYWORDS="-*", + now it resets the ACCEPT_KEYWORDS list for the given atom like it does when + used in ACCEPT_KEYWORDS. + For packages that don't specify any other KEYWORDS you can use the new ** token + as documented in portage(5) to disable KEYWORDS filtering completely. portage-2.1.2 ================================== diff --git a/cnf/make.conf b/cnf/make.conf index f633ba5c4..eb365b6c1 100644 --- a/cnf/make.conf +++ b/cnf/make.conf @@ -317,6 +317,7 @@ PORTAGE_ELOG_CLASSES="warn error log" # PORTAGE_ELOG_SYSTEM: selects the module(s) to process the log messages. Modules # included in portage are (empty means logging is disabled): +# echo (display messages again when emerge exits) # save (saves one log per package in $PORT_LOGDIR/elog, # /var/log/portage/elog if $PORT_LOGDIR is unset) # custom (passes all messages to $PORTAGE_ELOG_COMMAND) diff --git a/cnf/make.globals b/cnf/make.globals index e88550de9..a759e3539 100644 --- a/cnf/make.globals +++ b/cnf/make.globals @@ -79,6 +79,7 @@ PORTAGE_WORKDIR_MODE="0700" # Some defaults for elog PORTAGE_ELOG_CLASSES="log warn error" +PORTAGE_ELOG_SYSTEM="save_summary echo" PORTAGE_ELOG_MAILURI="@rootuser@" PORTAGE_ELOG_MAILSUBJECT="[portage] ebuild log for \${PACKAGE} on \${HOST}" diff --git a/pym/emerge/__init__.py b/pym/emerge/__init__.py index aba28ec84..d01b4500b 100644 --- a/pym/emerge/__init__.py +++ b/pym/emerge/__init__.py @@ -4917,6 +4917,15 @@ def action_build(settings, trees, mtimedb, if myopt not in myresumeopts: myresumeopts[myopt] = myarg myopts=myresumeopts + + # Adjust config according to options of the command being resumed. + for myroot in trees: + mysettings = trees[myroot]["vartree"].settings + mysettings.unlock() + adjust_config(myopts, mysettings) + mysettings.lock() + del myroot, mysettings + myparams = create_depgraph_params(myopts, myaction) if "--quiet" not in myopts and "--nodeps" not in myopts: print "Calculating dependencies ", diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 172c28931..7e27bbf9a 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -2610,9 +2610,6 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks", else: resumecommand=mysettings["RESUMECOMMAND"] - fetchcommand=fetchcommand.replace("${DISTDIR}",mysettings["DISTDIR"]) - resumecommand=resumecommand.replace("${DISTDIR}",mysettings["DISTDIR"]) - if not can_fetch: if fetched != 2: if fetched == 0: @@ -2642,8 +2639,14 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks", locfetch=fetchcommand writemsg_stdout(">>> Downloading '%s'\n" % \ re.sub(r'//(.+):.+@(.+)/',r'//\1:*password*@\2/', loc)) - myfetch=locfetch.replace("${URI}",loc) - myfetch=myfetch.replace("${FILE}",myfile) + myfetch = locfetch.split() + variables = {"${DISTDIR}":mysettings["DISTDIR"], + "${URI}":loc, "${FILE}":myfile} + for i in xrange(len(myfetch)): + token = myfetch[i].strip("\"'") + value = variables.get(token) + if value is not None: + myfetch[i] = value spawn_keywords = {} if "userfetch" in mysettings.features and \ @@ -2661,7 +2664,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks", con = con.replace(mysettings["PORTAGE_T"], mysettings["PORTAGE_FETCH_T"]) selinux.setexec(con) - myret = portage.process.spawn_bash(myfetch, + myret = portage.process.spawn(myfetch, env=mysettings.environ(), **spawn_keywords) if mysettings.selinux_enabled(): @@ -4702,12 +4705,14 @@ def getmaskingstatus(mycpv, settings=None, portdb=None): if matches: inc_pgroups = [] for x in pgroups: - if x != "-*" and x.startswith("-"): + if x == "-*": + inc_pgroups = [] + elif x[0] == "-": try: inc_pgroups.remove(x[1:]) except ValueError: pass - if x not in inc_pgroups: + elif x not in inc_pgroups: inc_pgroups.append(x) pgroups = inc_pgroups del inc_pgroups @@ -4724,10 +4729,10 @@ def getmaskingstatus(mycpv, settings=None, portdb=None): if gp=="*": kmask=None break - elif gp=="-"+myarch: + elif gp=="-"+myarch and myarch in pgroups: kmask="-"+myarch break - elif gp=="~"+myarch: + elif gp=="~"+myarch and myarch in pgroups: kmask="~"+myarch break diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py index ad6ccc45a..16e962a85 100644 --- a/pym/portage/dbapi/porttree.py +++ b/pym/portage/dbapi/porttree.py @@ -668,24 +668,26 @@ class portdbapi(dbapi): for atom in matches: pgroups.extend(pkgdict[cp][atom]) if matches: + # normalize pgroups with incrementals logic so it + # matches ACCEPT_KEYWORDS behavior inc_pgroups = [] for x in pgroups: - # The -* special case should be removed once the tree - # is clean of KEYWORDS=-* crap - if x != "-*" and x.startswith("-"): + if x == "-*": + inc_pgroups = [] + elif x[0] == "-": try: inc_pgroups.remove(x[1:]) except ValueError: pass - if x not in inc_pgroups: + elif x not in inc_pgroups: inc_pgroups.append(x) pgroups = inc_pgroups del inc_pgroups hasstable = False hastesting = False for gp in mygroups: - if gp=="*": - writemsg("--- WARNING: Package '%s' uses '*' keyword.\n" % mycpv, + if gp == "*" or (gp == "-*" and len(mygroups) == 1): + writemsg("--- WARNING: Package '%s' uses '%s' keyword.\n" % (mycpv, gp), noiselevel=-1) match=1 break diff --git a/pym/portage/elog/__init__.py b/pym/portage/elog/__init__.py index c6f6ec47c..be7eb5b66 100644 --- a/pym/portage/elog/__init__.py +++ b/pym/portage/elog/__init__.py @@ -1,3 +1,8 @@ +# elog/__init__.py - elog core functions +# Copyright 2006-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + from portage.const import EBUILD_PHASES from portage.exception import PortageException from portage.process import atexit_register diff --git a/pym/portage/elog/mod_custom.py b/pym/portage/elog/mod_custom.py index 5fae84078..3433bbbf1 100644 --- a/pym/portage/elog/mod_custom.py +++ b/pym/portage/elog/mod_custom.py @@ -1,3 +1,8 @@ +# elog/mod_custom.py - elog dispatch module +# Copyright 2006-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + import portage.elog_modules.mod_save, portage.process, portage.exception def process(mysettings, cpv, logentries, fulltext): diff --git a/pym/portage/elog/mod_echo.py b/pym/portage/elog/mod_echo.py new file mode 100644 index 000000000..73928b437 --- /dev/null +++ b/pym/portage/elog/mod_echo.py @@ -0,0 +1,30 @@ +# elog/mod_echo.py - elog dispatch module +# Copyright 2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +from portage.output import EOutput +from portage.const import EBUILD_PHASES + +_items = {} +def process(mysettings, cpv, logentries, fulltext): + _items[cpv] = logentries + +def finalize(mysettings): + printer = EOutput() + for cpv in _items.keys(): + print + printer.einfo("Messages for package %s:" % cpv) + print + for phase in EBUILD_PHASES: + if not phase in _items[cpv]: + continue + for msgtype, msgcontent in _items[cpv][phase]: + fmap = {"INFO": printer.einfo, + "WARN": printer.ewarn, + "ERROR": printer.eerror, + "LOG": printer.einfo, + "QA": printer.ewarn} + for line in msgcontent: + fmap[msgtype](line.strip("\n")) + return diff --git a/pym/portage/elog/mod_mail.py b/pym/portage/elog/mod_mail.py index b84555e8c..4695e8ec4 100644 --- a/pym/portage/elog/mod_mail.py +++ b/pym/portage/elog/mod_mail.py @@ -1,5 +1,5 @@ -# portage.py -- core Portage functionality -# Copyright 1998-2004 Gentoo Foundation +# elog/mod_mail.py - elog dispatch module +# Copyright 2006-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id$ diff --git a/pym/portage/elog/mod_mail_summary.py b/pym/portage/elog/mod_mail_summary.py index 99c285642..a1f4ed57f 100644 --- a/pym/portage/elog/mod_mail_summary.py +++ b/pym/portage/elog/mod_mail_summary.py @@ -1,7 +1,7 @@ -# portage.py -- core Portage functionality -# Copyright 1998-2004 Gentoo Foundation +# elog/mod_mail_summary.py - elog dispatch module +# Copyright 2006-2007 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Id: mod_mail.py 3484 2006-06-10 22:38:44Z genone $ +# $Id$ import portage.mail, socket, os, time from email.MIMEText import MIMEText as TextMessage diff --git a/pym/portage/elog/mod_save.py b/pym/portage/elog/mod_save.py index 2993b45db..eff40edd9 100644 --- a/pym/portage/elog/mod_save.py +++ b/pym/portage/elog/mod_save.py @@ -1,3 +1,8 @@ +# elog/mod_save.py - elog dispatch module +# Copyright 2006-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + import os, time from portage.data import portage_uid, portage_gid diff --git a/pym/portage/elog/mod_save_summary.py b/pym/portage/elog/mod_save_summary.py index eb453e587..aebc6f9aa 100644 --- a/pym/portage/elog/mod_save_summary.py +++ b/pym/portage/elog/mod_save_summary.py @@ -1,3 +1,8 @@ +# elog/mod_save_summary.py - elog dispatch module +# Copyright 2006-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + import os, time from portage.data import portage_uid, portage_gid diff --git a/pym/portage/elog/mod_syslog.py b/pym/portage/elog/mod_syslog.py index 77e1d4ea6..28aa15b3c 100644 --- a/pym/portage/elog/mod_syslog.py +++ b/pym/portage/elog/mod_syslog.py @@ -1,3 +1,8 @@ +# elog/mod_syslog.py - elog dispatch module +# Copyright 2006-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + import syslog from portage.const import EBUILD_PHASES