def print_packages(self, repo): component = ctx.get_option('component') if component: try: l = self.componentdb.get_packages(component, repo=repo, walk=True) except Exception as e: return else: l = pisilinux.api.list_available(repo) installed_list = pisilinux.api.list_installed() # maxlen is defined dynamically from the longest package name (#9021) if l: maxlen = max([len(_p) for _p in l]) l.sort() for p in l: if ctx.config.get_option('uninstalled') and p in installed_list: continue package = self.packagedb.get_package(p, repo) if p in installed_list: package.name = util.colorize(package.name, 'green') else: package.name = util.colorize(package.name, 'brightwhite') if self.options.long: ctx.ui.info(str(package)+'\n') else: package.name += ' ' * max(0, maxlen - len(p)) ctx.ui.info('%s - %s ' % (package.name, str(package.summary)))
def run(self): self.init(database = True, write = False) for repo in self.repodb.list_repos(only_active=False): active = _("active") if self.repodb.repo_active(repo) else _("inactive") if active == _("active"): ctx.ui.info(util.colorize(_("%s [%s]") % (repo, active), 'green')) else: ctx.ui.info(util.colorize(_("%s [%s]") % (repo, active), 'red')) print(' ', self.repodb.get_repo_url(repo))
def run(self): self.init(database = True, write = False) if not (ctx.get_option('no_color') or ctx.config.get_option('uninstalled')): ctx.ui.info(util.colorize(_('Installed packages are shown in this color'), 'green')) if self.args: for arg in self.args: self.print_packages(arg) else: # print for all repos for repo in pisilinux.api.list_repos(): ctx.ui.info(_("Repository : %s\n") % repo) self.print_packages(repo)
def run(self): self.init(database=True, write=False) component = ctx.get_option('component') if component: installed = pisilinux.api.list_installed() component_pkgs = self.componentdb.get_union_packages(component, walk=True) pkgs = list(set(installed) & set(component_pkgs)) elif self.args: pkgs = self.args else: ctx.ui.info(_('Checking all installed packages') + '\n') pkgs = pisilinux.api.list_installed() necessary_permissions = True # True if we should also check the configuration files check_config = ctx.get_option('config') # Line prefix prefix = _('Checking integrity of %s') # Determine maximum length of messages for proper formatting maxpkglen = max([len(_p) for _p in pkgs]) for pkg in pkgs: if self.installdb.has_package(pkg): check_results = pisilinux.api.check(pkg, check_config) ctx.ui.info("%s %s" % ((prefix % pkg), ' ' * (maxpkglen - len(pkg))), noln=True) if check_results['missing'] or check_results['corrupted'] \ or check_results['config']: ctx.ui.info(util.colorize(_("Broken"), 'brightred')) elif check_results['denied']: # We can't deduce a result when some files # can't be accessed necessary_permissions = False ctx.ui.info(util.colorize(_("Unknown"), 'yellow')) else: ctx.ui.info(util.colorize(_("OK"), 'green')) continue # Dump per file stuff for fpath in check_results['missing']: ctx.ui.info(util.colorize( _("Missing file: /%s") % fpath, 'brightred')) for fpath in check_results['denied']: ctx.ui.info(util.colorize( _("Access denied: /%s") % fpath, 'yellow')) for fpath in check_results['corrupted']: ctx.ui.info(util.colorize( _("Corrupted file: /%s") % fpath, 'brightyellow')) for fpath in check_results['config']: ctx.ui.info(util.colorize( _("Modified configuration file: /%s") % fpath, 'brightyellow')) else: # Package is not installed ctx.ui.info(_('Package %s not installed') % pkg) if not necessary_permissions: ctx.ui.info("") ctx.ui.warning(_("pisilinux was unable to check the integrity of " "packages which contain files that you don't " "have read access.\n" "Running the check under a privileged user " "may help fixing this problem."))
def upgrade(A=[], repo=None): """Re-installs packages from the repository, trying to perform a minimum or maximum number of upgrades according to options.""" packagedb = pisilinux.db.packagedb.PackageDB() installdb = pisilinux.db.installdb.InstallDB() replaces = packagedb.get_replaces() if not A: # if A is empty, then upgrade all packages A = installdb.list_installed() if repo: repo_packages = set(packagedb.list_packages(repo)) A = set(A).intersection(repo_packages) A_0 = A = set(A) Ap = find_upgrades(A, replaces) A = set(Ap) # Force upgrading of installed but replaced packages or else they will be removed (they are obsoleted also). # This is not wanted for a replaced driver package (eg. nvidia-X). A |= set(pisilinux.util.flatten_list(list(replaces.values()))) A |= upgrade_base(A) A = pisilinux.blacklist.exclude_from(A, ctx.const.blacklist) if ctx.get_option('exclude_from'): A = pisilinux.blacklist.exclude_from(A, ctx.get_option('exclude_from')) if ctx.get_option('exclude'): A = pisilinux.blacklist.exclude(A, ctx.get_option('exclude')) ctx.ui.debug('A = %s' % str(A)) if len(A)==0: ctx.ui.info(_('No packages to upgrade.')) return True ctx.ui.debug('A = %s' % str(A)) if not ctx.config.get_option('ignore_dependency'): G_f, order = plan_upgrade(A, replaces=replaces) else: G_f = None order = list(A) componentdb = pisilinux.db.componentdb.ComponentDB() # Bug 4211 if componentdb.has_component('system.base'): order = operations.helper.reorder_base_packages(order) ctx.ui.status(_('The following packages will be upgraded:')) ctx.ui.info(util.format_by_columns(sorted(order))) total_size, cached_size = operations.helper.calculate_download_sizes(order) total_size, symbol = util.human_readable_size(total_size) ctx.ui.info(util.colorize(_('Total size of package(s): %.2f %s') % (total_size, symbol), "yellow")) needs_confirm = check_update_actions(order) # NOTE: replaces.values() was already flattened above, it can be reused if set(order) - A_0 - set(pisilinux.util.flatten_list(list(replaces.values()))): ctx.ui.warning(_("There are extra packages due to dependencies.")) needs_confirm = True if ctx.get_option('dry_run'): return if needs_confirm and \ not ctx.ui.confirm(_("Do you want to continue?")): return False ctx.ui.notify(ui.packagestogo, order = order) conflicts = [] if not ctx.get_option('ignore_package_conflicts'): conflicts = operations.helper.check_conflicts(order, packagedb) paths = [] for x in order: ctx.ui.info(util.colorize(_("Downloading %d / %d") % (order.index(x)+1, len(order)), "yellow")) install_op = atomicoperations.Install.from_name(x) paths.append(install_op.package_fname) # fetch to be upgraded packages but do not install them. if ctx.get_option('fetch_only'): return if conflicts: operations.remove.remove_conflicting_packages(conflicts) operations.remove.remove_obsoleted_packages() for path in paths: ctx.ui.info(util.colorize(_("Installing %d / %d") % (paths.index(path)+1, len(paths)), "yellow")) install_op = atomicoperations.Install(path, ignore_file_conflicts = True) install_op.install(not ctx.get_option('compare_sha1sum'))
def install_pkg_names(A, reinstall = False): """This is the real thing. It installs packages from the repository, trying to perform a minimum number of installs""" installdb = pisilinux.db.installdb.InstallDB() packagedb = pisilinux.db.packagedb.PackageDB() A = [str(x) for x in A] #FIXME: why do we still get unicode input here? :/ -- exa # A was a list, remove duplicates A_0 = A = set(A) # filter packages that are already installed if not reinstall: Ap = set([x for x in A if not installdb.has_package(x)]) d = A - Ap if len(d) > 0: ctx.ui.warning(_("The following package(s) are already installed " "and are not going to be installed again:")) ctx.ui.info(util.format_by_columns(sorted(d))) A = Ap if len(A)==0: ctx.ui.info(_('No packages to install.')) return True A |= operations.upgrade.upgrade_base(A) if not ctx.config.get_option('ignore_dependency'): G_f, order = plan_install_pkg_names(A) else: G_f = None order = list(A) componentdb = pisilinux.db.componentdb.ComponentDB() # Bug 4211 if componentdb.has_component('system.base'): order = operations.helper.reorder_base_packages(order) if len(order) > 1: ctx.ui.info(util.colorize(_("Following packages will be installed:"), "brightblue")) ctx.ui.info(util.format_by_columns(sorted(order))) total_size, cached_size = operations.helper.calculate_download_sizes(order) total_size, symbol = util.human_readable_size(total_size) ctx.ui.info(util.colorize(_('Total size of package(s): %.2f %s') % (total_size, symbol), "yellow")) if ctx.get_option('dry_run'): return True if set(order) - A_0: if not ctx.ui.confirm(_('There are extra packages due to dependencies. Do you want to continue?')): return False ctx.ui.notify(ui.packagestogo, order = order) ignore_dep = ctx.config.get_option('ignore_dependency') conflicts = [] if not ctx.get_option('ignore_package_conflicts'): conflicts = operations.helper.check_conflicts(order, packagedb) paths = [] for x in order: ctx.ui.info(util.colorize(_("Downloading %d / %d") % (order.index(x)+1, len(order)), "yellow")) install_op = atomicoperations.Install.from_name(x) paths.append(install_op.package_fname) # fetch to be installed packages but do not install them. if ctx.get_option('fetch_only'): return if conflicts: operations.remove.remove_conflicting_packages(conflicts) for path in paths: ctx.ui.info(util.colorize(_("Installing %d / %d") % (paths.index(path)+1, len(paths)), "yellow")) install_op = atomicoperations.Install(path) install_op.install(False) return True