Attached is the initial framework to make portage stfu.
pym/portage_util.py - (wrappers the writemsg function)
By default writemsg() has noiselevel handling, but it sends
everything to stderr. We wrapper it in order to pass
an additional file descriptor so we can use stdout vs stderr.
pym/portage.py - (use writemsg_stdout function)
To take advantage of the newy created writemsg_stdout() function
we swap it in place of alot of the default print "foo" statements
that are in portage's merge/unmerging phases.
Shifts env var PORTAGE_QUIET to doebuild where it can
be used by ebuild.sh.
bin/emerge - (-q/--quiet trigger)
Sets noiselimit to -1
and uses writemsg_stdout in a few places.
bin/ebuild.sh - (ulgy not attached)
bin/prepstrip - (ulgy not attached)
--
solar <[EMAIL PROTECTED]>
Gentoo Linux
--- pym/portage_util.py (revision 2485)
+++ pym/portage_util.py (working copy)
@@ -6,13 +6,20 @@
import sys,string,shlex,os.path
noiselimit = 0
-def writemsg(mystr,noiselevel=0):
+
+def writemsg(mystr,noiselevel=0,fd=None):
"""Prints out warning and debug messages based on the noiselimit setting"""
global noiselimit
+ if fd is None:
+ fd = sys.stderr
if noiselevel <= noiselimit:
- sys.stderr.write(mystr)
- sys.stderr.flush()
+ fd.write(mystr)
+ fd.flush()
+def writemsg_stdout(mystr,noiselevel=0):
+ """Prints messages stdout based on the noiselimit setting"""
+ writemsg(mystr, noiselevel=noiselevel, fd=sys.stdout)
+
def grabfile(myfilename, compat_level=0, recursive=0):
"""This function grabs the lines in a file, normalizes whitespace and returns lines in a list; if a line
begins with a #, it is ignored, as are empty lines"""
Index: pym/portage.py
===================================================================
--- pym/portage.py (revision 2485)
+++ pym/portage.py (working copy)
@@ -90,7 +90,7 @@
import portage_util
from portage_util import grab_multiple, grabdict, grabdict_package, grabfile, grabfile_package, \
grabints, map_dictlist_vals, pickle_read, pickle_write, stack_dictlist, stack_dicts, stack_lists, \
- unique_array, varexpand, writedict, writeints, writemsg, getconfig, dump_traceback
+ unique_array, varexpand, writedict, writeints, writemsg, getconfig, dump_traceback, writemsg_stdout
import portage_exception
import portage_gpg
import portage_locks
@@ -2293,7 +2293,7 @@
print
return 0
else:
- print ">>> checksums "+note+" ;-)",x
+ writemsg_stdout(">>> checksums "+note+" ;-) %s\n" % x)
return 1
@@ -2493,6 +2493,9 @@
mysettings["PV"] = mysplit[1]
mysettings["PR"] = mysplit[2]
+ if portage_util.noiselimit < 0:
+ mysettings["PORTAGE_QUIET"] = "1"
+
if mydo != "depend":
try:
mysettings["INHERITED"], mysettings["RESTRICT"] = db[root][tree].dbapi.aux_get( \
@@ -5704,7 +5707,7 @@
#we skip this if we're dealing with a symlink
#because os.path.exists() will operate on the
#link target rather than the link itself.
- print "--- !found "+str(pkgfiles[obj][0]), obj
+ writemsg_stdout("--- !found "+str(pkgfiles[obj][0])+ " %s\n" % obj)
continue
# next line includes a tweak to protect modules from being unmerged,
# but we don't protect modules from being overwritten if they are
@@ -5712,56 +5715,56 @@
# functionality for /lib/modules. For portage-ng both capabilities
# should be able to be independently specified.
if self.isprotected(obj) or ((len(obj) > len(modprotect)) and (obj[0:len(modprotect)]==modprotect)):
- print "--- cfgpro "+str(pkgfiles[obj][0]), obj
+ writemsg_stdout("--- cfgpro %s %s\n" % (pkgfiles[obj][0], obj))
continue
lstatobj=os.lstat(obj)
lmtime=str(lstatobj[stat.ST_MTIME])
if (pkgfiles[obj][0] not in ("dir","fif","dev")) and (lmtime != pkgfiles[obj][1]):
- print "--- !mtime", pkgfiles[obj][0], obj
+ writemsg_stdout("--- !mtime %s %s\n" % (pkgfiles[obj][0], obj))
continue
if pkgfiles[obj][0]=="dir":
if not os.path.isdir(obj):
- print "--- !dir ","dir", obj
+ writemsg_stdout("--- !dir %s %s\n" % ("dir", obj))
continue
mydirs.append(obj)
elif pkgfiles[obj][0]=="sym":
if not os.path.islink(obj):
- print "--- !sym ","sym", obj
+ writemsg_stdout("--- !sym %s %s\n" % ("sym", obj))
continue
try:
os.unlink(obj)
- print "<<< ","sym",obj
+ writemsg_stdout("<<< %s %s\n" % ("sym",obj))
except (OSError,IOError),e:
- print "!!! ","sym",obj
+ writemsg_stdout("!!! %s %s\n" % ("sym",obj))
elif pkgfiles[obj][0]=="obj":
if not os.path.isfile(obj):
- print "--- !obj ","obj", obj
+ writemsg_stdout("--- !obj %s %s\n" % ("obj", obj))
continue
mymd5=portage_checksum.perform_md5(obj, calc_prelink=1)
# string.lower is needed because db entries used to be in upper-case. The
# string.lower allows for backwards compatibility.
if mymd5 != string.lower(pkgfiles[obj][2]):
- print "--- !md5 ","obj", obj
+ writemsg_stdout("--- !md5 %s %s\n" % ("obj", obj))
continue
try:
os.unlink(obj)
except (OSError,IOError),e:
pass
- print "<<< ","obj",obj
+ writemsg_stdout("<<< %s %s\n" % ("obj",obj))
elif pkgfiles[obj][0]=="fif":
if not stat.S_ISFIFO(lstatobj[stat.ST_MODE]):
- print "--- !fif ","fif", obj
+ writemsg_stdout("--- !fif %s %s\n" % ("fif", obj))
continue
try:
os.unlink(obj)
except (OSError,IOError),e:
pass
- print "<<< ","fif",obj
+ writemsg_stdout("<<< %s %s\n" % ("fif",obj))
elif pkgfiles[obj][0]=="dev":
- print "--- ","dev",obj
+ writemsg_stdout("--- %s %s\n" % ("dev",obj))
mydirs.sort()
mydirs.reverse()
@@ -5771,14 +5774,14 @@
if not last_non_empty.startswith(obj) and not listdir(obj):
try:
os.rmdir(obj)
- print "<<< ","dir",obj
+ writemsg_stdout("<<< %s %s\n" % ("dir",obj))
last_non_empty = ""
continue
except (OSError,IOError),e:
#immutable?
pass
- print "--- !empty dir", obj
+ writemsg_stdout("--- !empty dir %s\n" % obj)
last_non_empty = obj
continue
@@ -5942,7 +5945,7 @@
if not os.path.exists(self.dbtmpdir):
os.makedirs(self.dbtmpdir)
- print ">>> Merging",self.mycpv,"to",destroot
+ writemsg_stdout(">>> Merging %s %s %s\n" % (self.mycpv,"to",destroot))
# run preinst script
if myebuild:
@@ -6025,11 +6028,11 @@
outfile.close()
if (oldcontents):
- print ">>> Safely unmerging already-installed instance..."
+ writemsg_stdout(">>> Safely unmerging already-installed instance...\n")
self.dbdir = self.dbpkgdir
self.unmerge(oldcontents,trimworld=0)
self.dbdir = self.dbtmpdir
- print ">>> original instance of package unmerged safely."
+ writemsg_stdout(">>> original instance of package unmerged safely.\n")
# We hold both directory locks.
self.dbdir = self.dbpkgdir
@@ -6085,7 +6088,7 @@
global dircache
if dircache.has_key(self.dbcatdir):
del dircache[self.dbcatdir]
- print ">>>",self.mycpv,"merged."
+ writemsg_stdout(">>> %s %s\n" % (self.mycpv,"merged."))
# Process ebuild logfiles
elog_process(self.mycpv, self.settings)
@@ -6219,7 +6222,7 @@
if stat.S_ISLNK(mydmode) or stat.S_ISDIR(mydmode):
# a symlink to an existing directory will work for us; keep it:
- print "---",mydest+"/"
+ writemsg_stdout("--- %s\n" % mydest+"/")
if bsd_chflags:
bsd_chflags.lchflags(mydest, dflags)
else:
@@ -6237,7 +6240,7 @@
bsd_chflags.lchflags(mydest, dflags)
os.chmod(mydest,mystat[0])
os.chown(mydest,mystat[4],mystat[5])
- print ">>>",mydest+"/"
+ writemsg_stdout(">>> %s\n" % mydest+"/")
else:
#destination doesn't exist
if selinux_enabled:
@@ -6249,7 +6252,7 @@
if bsd_chflags:
bsd_chflags.lchflags(mydest, bsd_chflags.lgetflags(mysrc))
os.chown(mydest,mystat[4],mystat[5])
- print ">>>",mydest+"/"
+ writemsg_stdout(">>> %s\n" % mydest+"/")
outfile.write("dir "+myrealdest+"\n")
# recurse and merge this directory
if self.mergeme(srcroot,destroot,outfile,secondhand,offset+x+"/",cfgfiledict,thismtime):
@@ -6266,7 +6269,7 @@
if stat.S_ISDIR(mydmode):
# install of destination is blocked by an existing directory with the same name
moveme=0
- print "!!!",mydest
+ writemsg_stdout("!!! %s\n" % mydest)
elif stat.S_ISREG(mydmode) or (stat.S_ISLNK(mydmode) and os.path.exists(mydest) and stat.S_ISREG(os.stat(mydest)[stat.ST_MODE])):
cfgprot=0
# install of destination is blocked by an existing regular file,
@@ -6370,7 +6373,7 @@
if mymtime!=None:
zing=">>>"
outfile.write("obj "+myrealdest+" "+mymd5+" "+str(mymtime)+"\n")
- print zing,mydest
+ writemsg_stdout("%s %s\n" % (zing,mydest))
else:
# we are merging a fifo or device node
zing="!!!"
@@ -6384,7 +6387,7 @@
outfile.write("fif "+myrealdest+"\n")
else:
sys.exit(1)
- print zing+" "+mydest
+ writemsg_stdout(zing+" "+mydest+"\n")
def merge(self,mergeroot,inforoot,myroot,myebuild=None,cleanup=0):
return self.treewalk(mergeroot,myroot,inforoot,myebuild,cleanup=cleanup)
@@ -6466,7 +6469,7 @@
shutil.rmtree(tmploc+"/"+mypkg,1)
os.makedirs(pkgloc)
os.makedirs(infloc)
- print ">>> extracting info"
+ writemsg_stdout(">>> extracting info\n")
xptbz2.unpackinfo(infloc)
# run pkg_setup early, so we can bail out early
# (before extracting binaries) if there's a problem
@@ -6475,7 +6478,7 @@
mysettings.configdict["pkg"]["CATEGORY"] = mycat;
a=doebuild(myebuild,"setup",myroot,mysettings,tree="bintree")
- print ">>> extracting",mypkg
+ writemsg_stdout(">>> extracting %s\n" % mypkg)
notok=spawn("bzip2 -dqc -- '"+mytbz2+"' | tar xpf -",mysettings,free=1)
if notok:
print "!!! Error extracting",mytbz2
Index: bin/prepstrip
===================================================================
--- bin/emerge (revision 2483)
+++ bin/emerge (working copy)
@@ -326,7 +326,7 @@
if ("--quiet" in myopts):
update_spinner = update_quiet_spinner
- os.environ["PORTAGE_QUIET"] = "1"
+ portage_util.noiselimit = -1
# Always create packages if FEATURES=buildpkg
# Imply --buildpkg if --buildpkgonly
@@ -2318,11 +2318,11 @@
numselected=numselected+1
#ok, now the last-merged package is protected,
and the rest are selected
if global_unmerge and not numselected:
- print "\n>>> No outdated packages were found on your system.\n"
+ portage_util.writemsg_stdout("\n>>> No outdated packages were
found on your system.\n")
return 0
if not numselected:
- print "\n>>>",unmerge_action+": No packages selected for
removal.\n"
+ portage_util.writemsg_stdout("\n>>> %s\n" % unmerge_action+":
No packages selected for removal.\n")
return 0
for x in pkgmap.keys():
@@ -3348,6 +3348,6 @@
if portage.mtimedb.has_key("resume"):
del portage.mtimedb["resume"]
if portage.settings["AUTOCLEAN"] and
"yes"==portage.settings["AUTOCLEAN"]:
- print ">>> Auto-cleaning packages ..."
+ portage_util.writemsg_stdout(">>> Auto-cleaning
packages ...\n")
unmerge("clean", ["world"])
post_emerge()
Index: bin/ebuild.sh
===================================================================