def extends(self, options, seen): extends = [e.strip() for e in options.get('extends','').split() if e.strip()] for extension in extends: if extension in seen: continue seen.append(extension) part = self.buildout.get(extension) if part is None: # try interpreting extends as recipe eopts = {} # eopts.update(options) eopts['recipe'] = extension #buildout._raw[extension] = eopts #dodgy hack since buildout.__setitem__ not implemented #part = buildout.get(extension) #part = Options(buildout, name, eopts) #part._initialize() reqs, entry = _recipe(eopts) recipe_class = _install_and_load(reqs, 'zc.buildout', entry, self.buildout) recipe = recipe_class(self.buildout, self.name, self.options) self.subrecipes.append(recipe) egg = extension.split(':')[0] self.options['eggs'] = '\n'.join(self.options.get('eggs','').split() + [egg]) continue else: self.extends(part, seen) for key in part: if key in ['fabfiles', 'pre-commands', 'post-commands']: fabfiles = part[key].split() self.options[key] = '\n'.join(self.options.get(key, '').split()+fabfiles) elif key not in self.options.keys(): self.options[key] = part[key] return seen
def getVersions(self): versions = {} for part, recipe, options in self.getAllRecipes(): egg = zc.recipe.egg.Egg(self.buildout, recipe, options) spec, entry = _recipe({'recipe':recipe}) req = pkg_resources.Requirement.parse(spec) dist = pkg_resources.working_set.find(req) if "collective.hostout" in spec: continue #HACK requirements, ws = egg.working_set() for dist in [dist] + [d for d in ws]: old_version,dep = versions.get(dist.project_name,('',[])) if recipe not in dep: dep.append(recipe) if dist.version != '0.0': versions[dist.project_name] = (dist.version,dep) spec = "" return versions
def getVersions(self): versions = {} for part, recipe, options in self.getAllRecipes(): egg = zc.recipe.egg.Egg(self.buildout, recipe, options) spec, entry = _recipe({'recipe':recipe}) req = pkg_resources.Requirement.parse(spec) recipeegg = pkg_resources.working_set.find(req) if "collective.hostout" in spec: continue #HACK requirements, ws = egg.working_set() if recipeegg is None: raise Exception ("Could not find version info for recipe %s (%s)" % (spec, part)) for dist in [recipeegg] + [d for d in ws]: if dist is None: raise Exception ("Could not find version info for a dependency of recipe %s" % spec) old_version,dep = versions.get(dist.project_name,('',[])) #if recipe not in dep: # dep.append(recipe) if dist.version != '0.0': versions[dist.project_name] = (dist.version,dep) spec = "" return versions
def _initialize(self, *args, **kwargs): """On intialization, install our recipe instead""" Options._old_initialize(self, *args, **kwargs) recipe = self.get("recipe") if not recipe: return name = self.name reqs, entry = _recipe(self._data) mappings = { ("zc.recipe.egg", "default"): ("minitage.recipe.scripts", "default"), ("zc.recipe.egg", "script"): ("minitage.recipe.scripts", "default"), ("zc.recipe.egg", "scripts"): ("minitage.recipe.scripts", "default"), ("zc.recipe.egg", "Custom"): ("minitage.recipe.scripts", "default"), ("zc.recipe.egg", "Eggs"): ("minitage.recipe.egg", "default"), ("zc.recipe.egg", "eggs"): ("minitage.recipe.egg", "default"), ("zc.recipe.cmmi", "default"): ("minitage.recipe.cmmi", "default"), } reqsa, entrya = mappings.get((reqs, entry), (None, None)) if reqsa: recipe_class = _install_and_load(reqsa, "zc.buildout", entrya, self.buildout) self.recipe = recipe_class(buildout, name, self) self.recipe.logger.info("Replaced %s with %s" % ((reqs, entry), (reqsa, entrya)))
def _initialize(self, *args, **kwargs): """On intialization, install our recipe instead""" Options._old_initialize(self, *args, **kwargs) recipe = self.get('recipe') if not recipe: return name = self.name reqs, entry = _recipe(self._data) mappings = { ('zc.recipe.egg', 'default'): ('minitage.recipe.scripts', 'default'), ('zc.recipe.egg', 'script'): ('minitage.recipe.scripts', 'default'), ('zc.recipe.egg', 'scripts'): ('minitage.recipe.scripts', 'default'), ('zc.recipe.egg', 'Custom'): ('minitage.recipe.scripts', 'default'), ('zc.recipe.egg', 'Eggs'): ('minitage.recipe.egg', 'default'), ('zc.recipe.egg', 'eggs'): ('minitage.recipe.egg', 'default'), ('zc.recipe.cmmi', 'default'): ('minitage.recipe.cmmi', 'default'), } reqsa, entrya = mappings.get((reqs, entry), (None, None)) if reqsa: recipe_class = _install_and_load(reqsa, 'zc.buildout', entrya, self.buildout) self.recipe = recipe_class(buildout, name, self) self.recipe.logger.info( "Replaced %s with %s" % ((reqs, entry), (reqsa, entrya)) )