def remove(A, ignore_dep=None): """remove set A of packages from system (A is a list of package names)""" A = [str(x) for x in A] # filter packages that are not installed A_0 = A = expand_components(set(A)) if not ctx.get_option('bypass_safety'): if ctx.componentdb.has_component('system.base'): systembase = set( ctx.componentdb.get_union_comp('system.base').packages) refused = A.intersection(systembase) if refused: ctx.ui.warning( _('Safety switch: cannot remove the following packages in system.base: ' ) + util.strlist(refused)) A = A - systembase else: ctx.ui.warning( _('Safety switch: the component system.base cannot be found')) Ap = [] for x in A: if ctx.installdb.is_installed(x): Ap.append(x) else: ctx.ui.info(_('Package %s does not exist. Cannot remove.') % x) A = set(Ap) if len(A) == 0: ctx.ui.info(_('No packages to remove.')) return False if not ctx.config.get_option('ignore_dependency') and not ignore_dep: G_f, order = plan_remove(A) else: G_f = None order = A ctx.ui.info( _("""The following minimal list of packages will be removed in the respective order to satisfy dependencies: """) + util.strlist(order)) if len(order) > len(A_0): if not ctx.ui.confirm(_('Do you want to continue?')): ctx.ui.warning(_('Package removal declined')) return False if ctx.get_option('dry_run'): return ctx.ui.notify(ui.packagestogo, order=order) for x in order: if ctx.installdb.is_installed(x): atomicoperations.remove_single(x) else: ctx.ui.info(_('Package %s is not installed. Cannot remove.') % x)
def remove(A, ignore_dep = False, ignore_safety = False): """remove set A of packages from system (A is a list of package names)""" componentdb = pisi.db.componentdb.ComponentDB() installdb = pisi.db.installdb.InstallDB() A = [str(x) for x in A] # filter packages that are not installed A_0 = A = set(A) if not ctx.get_option('ignore_safety') and not ctx.config.values.general.ignore_safety and not ignore_safety: if componentdb.has_component('system.base'): systembase = set(componentdb.get_union_component('system.base').packages) refused = A.intersection(systembase) if refused: raise pisi.Error(_("Safety switch prevents the removal of " "following packages:\n") + util.format_by_columns(sorted(refused))) A = A - systembase else: ctx.ui.warning(_("Safety switch: The component system.base cannot be found.")) Ap = [] for x in A: if installdb.has_package(x): Ap.append(x) else: ctx.ui.info(_('Package %s does not exist. Cannot remove.') % x) A = set(Ap) if len(A)==0: ctx.ui.info(_('No packages to remove.')) return False if not ctx.config.get_option('ignore_dependency') and not ignore_dep: G_f, order = plan_remove(A) else: G_f = None order = A ctx.ui.info(_("""The following list of packages will be removed in the respective order to satisfy dependencies: """) + util.strlist(order)) if len(order) > len(A_0): if not ctx.ui.confirm(_('Do you want to continue?')): ctx.ui.warning(_('Package removal declined')) return False if ctx.get_option('dry_run'): return ctx.ui.notify(ui.packagestogo, order = order) for x in order: if installdb.has_package(x): atomicoperations.remove_single(x) else: ctx.ui.info(_('Package %s is not installed. Cannot remove.') % x)
def remove(A): """remove set A of packages from system (A is a list of package names)""" # filter packages that are not installed A_0 = A = expand_components(set(A)) if not ctx.get_option("bypass_safety"): if ctx.componentdb.has_component("system.base"): refused = A.intersection(set(ctx.componentdb.get_component("system.base").packages)) if refused: ctx.ui.warning( _("Safety switch: cannot remove the following packages in system.base: ") + util.strlist(refused) ) A = A - set(ctx.componentdb.get_component("system.base").packages) else: ctx.ui.warning(_("Safety switch: the component system.base cannot be found")) Ap = [] for x in A: if ctx.installdb.is_installed(x): Ap.append(x) else: ctx.ui.info(_("Package %s does not exist. Cannot remove.") % x) A = set(Ap) if len(A) == 0: ctx.ui.info(_("No packages to remove.")) return False if not ctx.config.get_option("ignore_dependency"): G_f, order = plan_remove(A) else: G_f = None order = A ctx.ui.info( _( """The following minimal list of packages will be removed in the respective order to satisfy dependencies: """ ) + util.strlist(order) ) if len(order) > len(A_0): if not ctx.ui.confirm(_("Do you want to continue?")): ctx.ui.warning(_("Package removal declined")) return False if ctx.get_option("dry_run"): return ctx.ui.notify(ui.packagestogo, order=order) for x in order: if ctx.installdb.is_installed(x): atomicoperations.remove_single(x) else: ctx.ui.info(_("Package %s is not installed. Cannot remove.") % x)
def remove(A, ignore_dep = False, ignore_safety = False): """remove set A of packages from system (A is a list of package names)""" A = [str(x) for x in A] # filter packages that are not installed A_0 = A = expand_components(set(A)) if not ctx.get_option('ignore_safety') and not ignore_safety: if ctx.componentdb.has_component('system.base'): systembase = set(ctx.componentdb.get_union_comp('system.base').packages) refused = A.intersection(systembase) if refused: ctx.ui.warning(_('Safety switch: cannot remove the following packages in system.base: ') + util.strlist(refused)) A = A - systembase else: ctx.ui.warning(_('Safety switch: the component system.base cannot be found')) Ap = [] for x in A: if ctx.installdb.is_installed(x): Ap.append(x) else: ctx.ui.info(_('Package %s does not exist. Cannot remove.') % x) A = set(Ap) if len(A)==0: ctx.ui.info(_('No packages to remove.')) return False if not ctx.config.get_option('ignore_dependency') and not ignore_dep: G_f, order = plan_remove(A) else: G_f = None order = A ctx.ui.info(_("""The following minimal list of packages will be removed in the respective order to satisfy dependencies: """) + util.strlist(order)) if len(order) > len(A_0): if not ctx.ui.confirm(_('Do you want to continue?')): ctx.ui.warning(_('Package removal declined')) return False if ctx.get_option('dry_run'): return ctx.ui.notify(ui.packagestogo, order = order) for x in order: if ctx.installdb.is_installed(x): atomicoperations.remove_single(x) else: ctx.ui.info(_('Package %s is not installed. Cannot remove.') % x)
def remove(A): """remove set A of packages from system (A is a list of package names)""" # filter packages that are not installed A_0 = A = set(A) Ap = [] for x in A: if ctx.installdb.is_installed(x): Ap.append(x) else: ctx.ui.info(_('Package %s does not exist. Cannot remove.') % x) A = set(Ap) if len(A)==0: ctx.ui.info(_('No packages to remove.')) return # try to construct a pisi graph of packages to # install / reinstall G_f = pgraph.PGraph(packagedb) # construct G_f # find the (install closure) graph of G_f by package # set A using packagedb for x in A: G_f.add_package(x) B = A while len(B) > 0: Bp = set() for x in B: pkg = packagedb.get_package(x) rev_deps = packagedb.get_rev_deps(x) for (rev_dep, depinfo) in rev_deps: # we don't deal with unsatisfied dependencies if packagedb.has_package(rev_dep) and \ dependency.installed_satisfies_dep(depinfo): if not rev_dep in G_f.vertices(): Bp.add(rev_dep) G_f.add_plain_dep(rev_dep, x) B = Bp if ctx.config.get_option('debug'): G_f.write_graphviz(sys.stdout) order = G_f.topological_sort() ctx.ui.info(_("""The following minimal list of packages will be removed in the respective order to satisfy dependencies: """) + util.strlist(order)) if len(order) > len(A_0): if not ctx.ui.confirm('Do you want to continue?'): ctx.ui.warning(_('Package removal declined')) return False for x in order: if ctx.installdb.is_installed(x): atomicoperations.remove_single(x) else: ctx.ui.info(_('Package %s is not installed. Cannot remove.') % x)
def remove(A, ignore_dep=False, ignore_safety=False): """remove set A of packages from system (A is a list of package names)""" componentdb = pisi.db.componentdb.ComponentDB() installdb = pisi.db.installdb.InstallDB() A = [str(x) for x in A] # filter packages that are not installed A_0 = A = set(A) if not ctx.get_option( 'ignore_safety' ) and not ctx.config.values.general.ignore_safety and not ignore_safety: if componentdb.has_component('system.base'): systembase = set( componentdb.get_union_component('system.base').packages) refused = A.intersection(systembase) if refused: raise pisi.Error( _("Safety switch prevents the removal of " "following packages:\n") + util.format_by_columns(sorted(refused))) A = A - systembase else: ctx.ui.warning( _("Safety switch: The component system.base cannot be found.")) Ap = [] for x in A: if installdb.has_package(x): Ap.append(x) else: ctx.ui.info(_('Package %s does not exist. Cannot remove.') % x) A = set(Ap) if len(A) == 0: ctx.ui.info(_('No packages to remove.')) return False if not ctx.config.get_option('ignore_dependency') and not ignore_dep: G_f, order = plan_remove(A) else: G_f = None order = A ctx.ui.info( _("""The following list of packages will be removed in the respective order to satisfy dependencies: """) + util.strlist(order)) if len(order) > len(A_0): if not ctx.ui.confirm(_('Do you want to continue?')): ctx.ui.warning(_('Package removal declined')) return False if ctx.get_option('dry_run'): return ctx.ui.notify(ui.packagestogo, order=order) for x in order: if installdb.has_package(x): atomicoperations.remove_single(x) if x in installdb.installed_extra: installdb.installed_extra.remove(x) with open( os.path.join(ctx.config.info_dir(), ctx.const.installed_extra), "w") as ie_file: ie_file.write("\n".join(installdb.installed_extra) + ("\n" if installdb.installed_extra else "")) else: ctx.ui.info(_('Package %s is not installed. Cannot remove.') % x)