Implement extra and discard

This commit is contained in:
Ludwig Nussel 2017-09-01 15:34:07 +02:00 committed by Stephan Kulow
parent dd9d646d0a
commit b0a3b7d214

View File

@ -53,7 +53,6 @@ class Group(object):
self.solved = False
self.base = None
self.missing = None
self.flavors = []
def get_solved_packages_recursive(self, arch):
if not self.solved:
@ -80,7 +79,7 @@ class Group(object):
return packages
def solve(self, base = None):
def solve(self, base = None, extra = None, without = None):
""" base: list of base groups or None """
if self.solved:
@ -90,6 +89,18 @@ class Group(object):
base = [ base ]
if not (base is None or isinstance(base, list) or isinstance(base, tuple)):
raise Exception("base must be list but is {}".format(type(base)))
if extra:
if isinstance(extra, str):
extra = set((extra))
elif not (isinstance(extra, list) or isinstance(extra, tuple)):
raise Exception("extra must be list but is {}".format(type(extra)))
extra = set(extra)
if without:
if isinstance(without, str):
without = set([without])
elif not (isinstance(without, list) or isinstance(without, tuple)):
raise Exception("without must be list but is {}".format(type(without)))
without = set(without)
solved = dict()
missing = dict()
@ -120,7 +131,11 @@ class Group(object):
logger.debug("{} adding packges from {}".format(self.name, b.name))
basepackages |= b.get_packages_recursive(arch)
basepackages_solved |= b.get_solved_packages_recursive(arch)
if without:
basepackages -= without
toinstall |= basepackages
if extra:
toinstall.update(extra)
for n in toinstall:
sel = pool.select(str(n), solv.Selection.SELECTION_NAME)
if sel.isempty():
@ -156,6 +171,9 @@ class Group(object):
self.base = list(base)
solved[arch] -= basepackages_solved
if extra:
solved[arch].discard(extra)
common = None
missing_common = None
# compute common packages across all architectures
@ -466,7 +484,6 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
g.sle_minimal.solve()
# g.release_packages_sles.solve()
# g.release_packages_sled.solve(base = g.sle_minimal)
# g.release_packages_leanos.solve(base = g.sle_minimal)
g.sle_base.solve(base = g.sle_minimal)
@ -488,6 +505,10 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
g.gnome_minimal.solve(base = (g.x11_extended, g.php7))
g.sled.solve(base = g.gnome_minimal, without = 'sles-release')
g.release_packages_sled.solve(base = g.sled, without = 'sles-release')
# NetworkManager unresolvable
# g.gnome_extended.solve(base = g.gnome_minimal)
g.qt_standard.solve(base = g.x11_extended)