566
580
pkg._pkg, version._cand, archive_suite)
569
def get_total_size_on_install(self, pkgname,
570
addons_install=None, addons_remove=None,
574
total_download_size = 0 # in kB
575
total_install_size = 0 # in kB
583
# space calulcation stuff
584
def _on_total_size_calculation_done(self, trans, space):
585
pkgname = trans.packages[0][0]
587
"query-total-size-on-install-done",
588
pkgname, trans.download, trans.space)
590
def _on_trans_simulate_error(self, error):
591
LOG.exception("simulate failed")
593
def _on_trans_commit_packages_ready(self, trans):
594
trans.connect("space-changed", self._on_total_size_calculation_done)
596
trans.simulate(reply_handler=lambda: True,
597
error_handler=self._on_trans_simulate_error)
599
LOG.exception("simulate failed")
601
def query_total_size_on_install(self, pkgname,
602
addons_install=[], addons_remove=[],
577
604
if not pkgname in self._cache:
580
pkg = self._cache[pkgname]
581
version = pkg.installed
584
if addons_install is not None:
585
all_install += addons_install
588
# its important that its the first pkg as the depcache will
589
# get cleared for each pkg and that will means that the
590
# set_candidate_release is lost again
591
all_install.append(pkgname)
593
for p in all_install:
594
# ensure that the archive_suite is set if needed, this needs to
595
# be in the loop as the cache is cleared in each loop iteration
597
self._set_candidate_release(pkg, archive_suite)
598
# now get the right version
599
version = self._cache[p].candidate
600
# this can happen on e.g. deb packages that are not in the cache
601
# testcase: software-center google-chrome-stable_current_amd64.deb
604
pkgs_to_install.append(version)
606
deps_inst = self._try_install_and_get_all_deps_installed(
608
for dep in deps_inst:
609
if self._cache[dep].installed == None:
610
dep_version = self._cache[dep].candidate
611
pkgs_to_install.append(dep_version)
612
deps_remove = self._try_install_and_get_all_deps_removed(
614
for dep in deps_remove:
615
if self._cache[dep].is_installed:
616
dep_version = self._cache[dep].installed
617
pkgs_to_remove.append(dep_version)
619
all_remove = [] if addons_remove is None else addons_remove
621
version = self._cache[p].installed
622
pkgs_to_remove.append(version)
623
deps_inst = self._try_install_and_get_all_deps_installed(
625
for dep in deps_inst:
626
if self._cache[dep].installed == None:
627
version = self._cache[dep].candidate
628
pkgs_to_install.append(version)
629
deps_remove = self._try_install_and_get_all_deps_removed(
631
for dep in deps_remove:
632
if self._cache[dep].installed != None:
633
version = self._cache[dep].installed
634
pkgs_to_remove.append(version)
636
pkgs_to_install = list(set(pkgs_to_install))
637
pkgs_to_remove = list(set(pkgs_to_remove))
639
for pkg in pkgs_to_install:
640
if not pkg_downloaded(pkg) and not pkg.package.installed:
641
total_download_size += pkg.size
642
total_install_size += pkg.installed_size
643
for pkg in pkgs_to_remove:
644
total_install_size -= pkg.installed_size
646
return (total_download_size, total_install_size)
605
self.emit("query-total-size-on-install-done", pkgname, 0, 0)
607
# ensure the syntax is right
609
pkgname = pkgname + "/" + archive_suite
611
# and simulate the install/remove via aptdaemon
612
install = [pkgname] + addons_install
613
remove = addons_remove
614
reinstall = purge = upgrade = downgrade = []
617
self._aptd_trans.cancel()
618
self._aptd_trans = None
622
self.aptd_client.commit_packages(
623
install, reinstall, remove, purge, upgrade, downgrade,
626
# reply and error handlers
627
self._on_trans_commit_packages_ready,
628
self._on_trans_simulate_error)
631
"getting commit_packages trans failed for '%s'" % pkgname)
648
633
def get_all_deps_upgrading(self, pkg):
649
634
# note: this seems not to be used anywhere