From ac0a630b42c12b5f0d3088d4f4c45186c82d3d57 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sun, 8 Jul 2007 07:24:12 +0000 Subject: For bug #184566, enable the emerge --info action to run an option pkg_info() function from each installed ebuild. svn path=/main/trunk/; revision=7201 --- bin/ebuild.sh | 7 ++++++- pym/emerge/__init__.py | 26 +++++++++++++++----------- pym/portage/__init__.py | 4 ++-- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/bin/ebuild.sh b/bin/ebuild.sh index ffe904e9c..b7636b1e3 100755 --- a/bin/ebuild.sh +++ b/bin/ebuild.sh @@ -1538,7 +1538,12 @@ for myarg in ${EBUILD_SH_ARGS} ; do qa_call pkg_nofetch exit 1 ;; - prerm|postrm|postinst|config) + prerm|postrm|postinst|config|info) + if [ "${myarg}" == "info" ] && \ + [ "$(type -t pkg_${myarg})" != "function" ]; then + ewarn "pkg_${myarg}() is not defined: '${EBUILD##*/}'" + continue + fi export SANDBOX_ON="0" if [ "$PORTAGE_DEBUG" != "1" ]; then [ "$(type -t pre_pkg_${myarg})" == "function" ] && qa_call pre_pkg_${myarg} diff --git a/pym/emerge/__init__.py b/pym/emerge/__init__.py index cbecf9b22..477164e88 100644 --- a/pym/emerge/__init__.py +++ b/pym/emerge/__init__.py @@ -5166,7 +5166,12 @@ def action_info(settings, trees, myopts, myfiles): # Loop through each package # Only print settings if they differ from global settings - header_printed = False + header_title = "Package Settings" + print header_width * "=" + print header_title.rjust(int(header_width/2 + len(header_title)/2)) + print header_width * "=" + from portage.output import EOutput + out = EOutput() for pkg in mypkgs: # Get all package specific variables auxvalues = vardb.aux_get(pkg, auxkeys) @@ -5196,16 +5201,6 @@ def action_info(settings, trees, myopts, myfiles): # If a difference was found, print the info for # this package. if diff_values: - - # If we have not yet printed the header, - # print it now - if not header_printed: - header_title = "Package Settings" - print header_width * "=" - print header_title.rjust(int(header_width/2 + len(header_title)/2)) - print header_width * "=" - header_printed = True - # Print package info print "%s was built with the following:" % pkg for myvar in mydesiredvars + ["USE"]: @@ -5214,6 +5209,15 @@ def action_info(settings, trees, myopts, myfiles): mylist.sort() print "%s=\"%s\"" % (myvar, " ".join(mylist)) print + print ">>> Attempting to run pkg_info() for '%s'" % pkg + ebuildpath = vardb.findname(pkg) + if not ebuildpath or not os.path.exists(ebuildpath): + out.ewarn("No ebuild found for '%s'" % pkg) + continue + portage.doebuild(ebuildpath, "info", pkgsettings["ROOT"], + pkgsettings, debug=(settings.get("PORTAGE_DEBUG", "") == 1), + mydbapi=trees[settings["ROOT"]]["vartree"].dbapi, + tree="vartree") def action_search(settings, portdb, vartree, myopts, myfiles, spinner): if not myfiles: diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index b15f4ced1..8de8457b6 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -3614,7 +3614,7 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0, features = mysettings.features validcommands = ["help","clean","prerm","postrm","cleanrm","preinst","postinst", - "config","setup","depend","fetch","digest", + "config","info","setup","depend","fetch","digest", "unpack","compile","test","install","rpm","qmerge","merge", "package","unmerge", "manifest"] @@ -3839,7 +3839,7 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0, writemsg("!!! post postinst failed; exiting.\n", noiselevel=-1) return phase_retval - elif mydo in ["prerm","postrm","config"]: + elif mydo in ("prerm", "postrm", "config", "info"): mysettings.load_infodir(mysettings["O"]) return spawn(EBUILD_SH_BINARY + " " + mydo, mysettings, debug=debug, free=1, logfile=logfile) -- cgit v1.2.3-1-g7c22