Print this page
*** NO COMMENTS ***
*** 80,89 ****
--- 80,90 ----
self.__intent = imagestate.INTENT_PROCESS
self.target_fmris = []
self.target_rem_fmris = []
self.pkg_plans = []
+ self.target_ins_up_count = [0, 0]
self.__directories = None
self.__link_actions = None
ifilters = [
*** 239,249 ****
# XXX need to check canceled status here
# If not canceled, should also use
# progress tracker to express that we're
# evaluating pfmri
! self.progtrack.evaluate_progress()
self.image.state.set_target(pfmri, self.__intent)
if self.check_cancelation():
raise api_errors.CanceledException()
--- 240,250 ----
# XXX need to check canceled status here
# If not canceled, should also use
# progress tracker to express that we're
# evaluating pfmri
! self.progtrack.evaluate_progress(pfmri)
self.image.state.set_target(pfmri, self.__intent)
if self.check_cancelation():
raise api_errors.CanceledException()
*** 340,356 ****
msg("pkg: %s already installed" % pfmri)
return
pp.evaluate(self.filters)
self.pkg_plans.append(pp)
def evaluate_fmri_removal(self, pfmri):
# prob. needs breaking up as well
assert self.image.has_manifest(pfmri)
! self.progtrack.evaluate_progress()
dependents = self.image.get_dependents(pfmri, self.progtrack)
# Don't consider those dependencies already being removed in
# this imageplan transaction.
--- 341,362 ----
msg("pkg: %s already installed" % pfmri)
return
pp.evaluate(self.filters)
+ if pp.origin_fmri:
+ self.target_ins_up_count[1] += 1
+ else:
+ self.target_ins_up_count[0] += 1
+
self.pkg_plans.append(pp)
def evaluate_fmri_removal(self, pfmri):
# prob. needs breaking up as well
assert self.image.has_manifest(pfmri)
! self.progtrack.evaluate_progress(pfmri)
dependents = self.image.get_dependents(pfmri, self.progtrack)
# Don't consider those dependencies already being removed in
# this imageplan transaction.
*** 380,390 ****
if self.is_proposed_rem_fmri(d):
continue
if not self.image.has_version_installed(d):
continue
self.target_rem_fmris.append(d)
! self.progtrack.evaluate_progress()
self.evaluate_fmri_removal(d)
# Post-order append will ensure topological sorting for acyclic
# dependency graphs. Cycles need to be arbitrarily broken, and
# are done so in the loop above.
--- 386,396 ----
if self.is_proposed_rem_fmri(d):
continue
if not self.image.has_version_installed(d):
continue
self.target_rem_fmris.append(d)
! self.progtrack.evaluate_progress(d)
self.evaluate_fmri_removal(d)
# Post-order append will ensure topological sorting for acyclic
# dependency graphs. Cycles need to be arbitrarily broken, and
# are done so in the loop above.
*** 392,408 ****
self.image.state.set_target()
def evaluate(self):
assert self.state == UNEVALUATED
! self.progtrack.evaluate_start()
outstring = ""
# Operate on a copy, as it will be modified in flight.
for f in self.target_fmris[:]:
! self.progtrack.evaluate_progress()
try:
self.evaluate_fmri(f)
except KeyError, e:
outstring += "Attempting to install %s " \
"causes:\n\t%s\n" % (f.get_name(), e)
--- 398,416 ----
self.image.state.set_target()
def evaluate(self):
assert self.state == UNEVALUATED
! evaluate_npkgs = len(self.target_fmris) + \
! len(self.target_rem_fmris)
! self.progtrack.evaluate_start(evaluate_npkgs)
outstring = ""
# Operate on a copy, as it will be modified in flight.
for f in self.target_fmris[:]:
! self.progtrack.evaluate_progress(f)
try:
self.evaluate_fmri(f)
except KeyError, e:
outstring += "Attempting to install %s " \
"causes:\n\t%s\n" % (f.get_name(), e)
*** 414,428 ****
"package dependencies could not be satisfied\n" +
outstring)
for f in self.target_fmris:
self.add_pkg_plan(f)
! self.progtrack.evaluate_progress()
for f in self.target_rem_fmris[:]:
self.evaluate_fmri_removal(f)
! self.progtrack.evaluate_progress()
# we now have a workable set of packages to add/upgrade/remove
# now combine all actions together to create a synthetic single
# step upgrade operation, and handle editable files moving from
# package to package. See theory comment in execute, below.
--- 422,436 ----
"package dependencies could not be satisfied\n" +
outstring)
for f in self.target_fmris:
self.add_pkg_plan(f)
! self.progtrack.evaluate_progress(f)
for f in self.target_rem_fmris[:]:
self.evaluate_fmri_removal(f)
! self.progtrack.evaluate_progress(f)
# we now have a workable set of packages to add/upgrade/remove
# now combine all actions together to create a synthetic single
# step upgrade operation, and handle editable files moving from
# package to package. See theory comment in execute, below.
*** 503,514 ****
# sort actions to match needed processing order
self.removal_actions.sort(key = lambda obj:obj[1], reverse=True)
self.update_actions.sort(key = lambda obj:obj[2])
self.install_actions.sort(key = lambda obj:obj[2])
! self.progtrack.evaluate_done()
self.state = EVALUATED_OK
def nothingtodo(self):
""" Test whether this image plan contains any work to do """
--- 511,543 ----
# sort actions to match needed processing order
self.removal_actions.sort(key = lambda obj:obj[1], reverse=True)
self.update_actions.sort(key = lambda obj:obj[2])
self.install_actions.sort(key = lambda obj:obj[2])
+ remove_npkgs = len(self.target_rem_fmris)
+ install_npkgs = self.target_ins_up_count[0]
+ update_npkgs = self.target_ins_up_count[1]
+ self.progtrack.evaluate_done(install_npkgs, update_npkgs, \
+ remove_npkgs)
! npkgs = 0
! nfiles = 0
! nbytes = 0
! nactions = 0
! for p in self.pkg_plans:
! nf, nb = p.get_xferstats()
! nbytes += nb
! nfiles += nf
! nactions += p.get_nactions()
!
! # It's not perfectly accurate but we count a download
! # even if the package will do zero data transfer. This
! # makes the pkg stats consistent between download and
! # install.
! npkgs += 1
!
! self.progtrack.download_set_goal(npkgs, nfiles, nbytes)
self.state = EVALUATED_OK
def nothingtodo(self):
""" Test whether this image plan contains any work to do """
*** 553,582 ****
# to finish the installation anyway. If there's a
# problem updating the index on the new image,
# that error needs to be communicated to the user.
pass
- npkgs = 0
- nfiles = 0
- nbytes = 0
- nactions = 0
try:
for p in self.pkg_plans:
- nf, nb = p.get_xferstats()
- nbytes += nb
- nfiles += nf
- nactions += p.get_nactions()
-
- # It's not perfectly accurate but we count a download
- # even if the package will do zero data transfer. This
- # makes the pkg stats consistent between download and
- # install.
- npkgs += 1
-
- self.progtrack.download_set_goal(npkgs, nfiles, nbytes)
-
- for p in self.pkg_plans:
p.preexecute()
for p in self.pkg_plans:
p.download()
--- 582,593 ----