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 ----