From c807e23b6c323ca59d7f3d249251aaff9bac3fdd Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sun, 8 Jul 2007 07:28:02 +0000 Subject: For bug #184566, enable the emerge --info action to run an option pkg_info() function from each installed ebuild. (trunk r7201) svn path=/main/branches/2.1.2/; revision=7202 --- bin/ebuild.sh | 7 ++++++- bin/emerge | 26 +++++++++++++++----------- pym/portage.py | 4 ++-- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/bin/ebuild.sh b/bin/ebuild.sh index 117268230..cc09080bd 100755 --- a/bin/ebuild.sh +++ b/bin/ebuild.sh @@ -1616,7 +1616,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/bin/emerge b/bin/emerge index 4145b6b2a..fd600aa86 100755 --- a/bin/emerge +++ b/bin/emerge @@ -5016,7 +5016,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 output import EOutput + out = EOutput() for pkg in mypkgs: # Get all package specific variables auxvalues = vardb.aux_get(pkg, auxkeys) @@ -5046,16 +5051,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"]: @@ -5064,6 +5059,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.py b/pym/portage.py index ec36ede34..cefbd0c8b 100644 --- a/pym/portage.py +++ b/pym/portage.py @@ -3506,7 +3506,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"] @@ -3731,7 +3731,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