From 002f89d7f52dd00e995eacb633ce0b36c087f7a5 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Thu, 22 Oct 2009 03:00:08 +0000 Subject: Packages: Defer handling of virtual requirements provided by multiple packages until last possible time (now with 100% less wtf ;) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5491 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Server/Plugins/Packages.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lib/Server/Plugins/Packages.py b/src/lib/Server/Plugins/Packages.py index 0d71341f7..343fd6f87 100644 --- a/src/lib/Server/Plugins/Packages.py +++ b/src/lib/Server/Plugins/Packages.py @@ -16,6 +16,9 @@ import Bcfg2.Server.Plugin class NoData(Exception): pass +class SomeData(Exception): + pass + logger = logging.getLogger('Packages') def source_from_xml(xsource): @@ -215,8 +218,8 @@ class Source(object): pass return (set([requirement]), deps) - print "wtf man. %s" % requirement - raise NoData + # choice data is here, but not forced by currently resolved requirements + raise SomeData class YUMSource(Source): xp = '{http://linux.duke.edu/metadata/common}' @@ -549,6 +552,9 @@ class Packages(Bcfg2.Server.Plugin.Plugin, unknown = set() examined = set() + final_pass = set() + in_final_pass = False + while needed: # process requirements until all done or no progress current = needed.pop() @@ -562,15 +568,24 @@ class Packages(Bcfg2.Server.Plugin.Plugin, break except NoData: continue + except SomeData: + if not in_final_pass: + final_pass.add(current) except: self.logger.error("Packages: resolve_requirement call failed unexpectedly", exc_info=1) if found: + in_final_pass = False pkgs = pkgs.union(newp) needed = needed.union(newr) needed.difference_update(examined) else: unknown.add(current) + if not needed: + in_final_pass = True + needed.update(final_pass) + final_pass = set() + return pkgs, unknown, ptype.pop() def validate_structures(self, meta, structures): -- cgit v1.2.3-1-g7c22