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
Esempio n. 2
0
 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
Esempio n. 3
0
 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))
         )