summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-07-08 07:28:02 +0000
committerZac Medico <zmedico@gentoo.org>2007-07-08 07:28:02 +0000
commitc807e23b6c323ca59d7f3d249251aaff9bac3fdd (patch)
treeab8292207e746f2994122da30dd057f06879c74f
parentf28dcc2c7e417c90264fca7b611d4cb62b4dd909 (diff)
downloadportage-c807e23b6c323ca59d7f3d249251aaff9bac3fdd.tar.gz
portage-c807e23b6c323ca59d7f3d249251aaff9bac3fdd.tar.bz2
portage-c807e23b6c323ca59d7f3d249251aaff9bac3fdd.zip
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
-rwxr-xr-xbin/ebuild.sh7
-rwxr-xr-xbin/emerge26
-rw-r--r--pym/portage.py4
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)