# We gotta do the brute force updates for these now.
if mysettings["PORTAGE_CALLER"] == "fixpackages" or \
"fixpackages" in mysettings.features:
- def onProgress(maxval, curval):
- writemsg_stdout("*")
- vardb.update_ents(myupd, onProgress=onProgress)
+ def onUpdate(maxval, curval):
+ if curval > 0:
+ writemsg_stdout("*")
+ vardb.update_ents(myupd, onUpdate=onUpdate)
if bindb:
- bindb.update_ents(myupd, onProgress=onProgress)
+ bindb.update_ents(myupd, onUpdate=onUpdate)
else:
do_upgrade_packagesmessage = 1
else:
writemsg("!!! Invalid db entry: %s\n" % mypath, noiselevel=-1)
- def update_ents(self, updates, onProgress=None):
+ def update_ents(self, updates, onProgress=None, onUpdate=None):
"""
Update metadata of all packages for package moves.
@param updates: A list of move commands
@type updates: List
@param onProgress: A progress callback function
@type onProgress: a callable that takes 2 integer arguments: maxval and curval
+ @param onUpdate: A progress callback function called only
+ for packages that are modified by updates.
+ @type onUpdate: a callable that takes 2 integer arguments:
+ maxval and curval
"""
cpv_all = self.cpv_all()
cpv_all.sort()
update_keys = ["DEPEND", "RDEPEND", "PDEPEND", "PROVIDE"]
from itertools import izip
from portage.update import update_dbentries
+ if onUpdate:
+ onUpdate(maxval, 0)
if onProgress:
onProgress(maxval, 0)
for i, cpv in enumerate(cpv_all):
metadata_updates = update_dbentries(updates, metadata)
if metadata_updates:
aux_update(cpv, metadata_updates)
+ if onUpdate:
+ onUpdate(maxval, i+1)
if onProgress:
onProgress(maxval, i+1)