Example #1
0
    def testBuiltInOverride(self):
        # Make sure we can override builtin recipes without destroying the
        # original modules.
        packageRecipeModuleId = id(packagerecipe)
        os.chdir(self.workDir)
        self.newpkg('foo')
        os.chdir('foo')
        self.writeFile('foo.recipe', fooRecipe)
        # override PackageRecipe with a derivative
        self.writeFile('packagerecipe.recipe', packageRecipe)

        i = len(sys.modules)
        repos = self.openRepository()
        loader = loadrecipe.RecipeLoader(self.workDir + '/foo/foo.recipe',
                                         self.cfg,
                                         repos=repos)
        # we don't update sys.modules for loaded modules
        assert (len(sys.modules) == i)

        recipe = loader.getRecipe()
        fooModule = recipe.__moduleObj__
        loadedPackageRecipe = fooModule.PackageRecipe
        # these should be different because we overloaded PackageRecipe, but
        # the PackageRecipe we see from the packagerecipe should be the
        # original
        assert (loadedPackageRecipe != packagerecipe.PackageRecipe)
        assert (id(packagerecipe) == packageRecipeModuleId)
Example #2
0
    def _loadRecipeClassFromCheckout(self, recipePath):
        directory = os.path.dirname(recipePath)
        repos, sourceState = self._getRepositoryStateFromDirectory(directory)

        cfg = self.getConaryConfig()
        self._initializeFlavors()
        loader = loadrecipe.RecipeLoader(recipePath, cfg=cfg,
                                     repos=repos,
                                     branch=sourceState.getBranch(),
                                     buildFlavor=cfg.buildFlavor)
        return loader.getRecipe()
Example #3
0
    def _loadRecipe(self, recipe=recipes.testGroup1, group_name='group-test'):
        '''Return a recipe class from the given recipe blob'''

        temp_dir = tempfile.mkdtemp(prefix='conary-test-')
        try:
            recipe_file = os.path.join(temp_dir, group_name + '.recipe')
            open(recipe_file, 'w').write(recipe)
            loader = loadrecipe.RecipeLoader(recipe_file, self.cfg)
        finally:
            shutil.rmtree(temp_dir)

        return loader.getRecipe()
Example #4
0
    def testLoadRecipeFails(self):
        brokenRecipe = """\
class TestRecipe1(PackageRecipe):
    name = 'testcase'
    version = '1.0'
    a = bb # unknown variable
    def setup(self):
        pass
"""
        os.chdir(self.workDir)
        self.writeFile('testcase.recipe', brokenRecipe)
        try:
            loadrecipe.RecipeLoader(self.workDir + '/testcase.recipe',
                                    self.cfg)
        except Exception, err:
            assert ('''Error in recipe file "testcase.recipe":
 Traceback (most recent call last):''' in str(err))
            assert (str(err).endswith('''\
    a = bb # unknown variable
NameError: name \'bb\' is not defined
'''))
Example #5
0
    def testLoadRecipeInRecipeFails(self):
        brokenRecipe = """\
class TestRecipe1(PackageRecipe):
    loadSuperClass('foo')
    name = 'testcase'
    version = '1.0'
    def setup(self):
        pass
"""
        os.chdir(self.workDir)
        self.writeFile('testcase.recipe', brokenRecipe)
        repos = self.openRepository()
        self.checkException(
            loadrecipe.RecipeLoader,
            self.workDir + '/testcase.recipe',
            self.cfg,
            repos=None,
            error=(
                'unable to load recipe file %s/testcase.recipe:\n'
                'Error in recipe file "testcase.recipe", line 1:\n'
                ' cannot find source component foo:source: No repository access'
                % self.workDir))
        self.checkException(
            loadrecipe.RecipeLoader,
            self.workDir + '/testcase.recipe',
            self.cfg,
            repos=repos,
            error=
            ('unable to load recipe file %s/testcase.recipe:\n'
             'Error in recipe file "testcase.recipe", line 1:\n'
             ' cannot find source component foo:source: foo:source was not found on path localhost@rpl:linux'
             % self.workDir))

        fooRecipe = """\
class Foo(PackageRecipe):
    name = 'foo'
    version = '1.0'
    a = b # nameerror
    def setup(self):
        pass
"""
        self.writeFile('foo.recipe', fooRecipe)
        try:
            loadrecipe.RecipeLoader(self.workDir + '/testcase.recipe',
                                    self.cfg,
                                    repos=None)
        except Exception, err:
            if sys.version_info >= (2, 5):
                topModule = "<module>"
            else:
                topModule = "?"
            self.assertEqual(
                str(err), '''\
unable to load recipe file %s/testcase.recipe:
Error in recipe file "testcase.recipe", line 1:
 unable to load recipe file %s/foo.recipe:
Error in recipe file "foo.recipe":
 Traceback (most recent call last):
  File "%s/foo.recipe", line 1, in %s
    class Foo(PackageRecipe):
  File "%s/foo.recipe", line 4, in Foo
    a = b # nameerror
NameError: name 'b' is not defined
''' % (self.workDir, self.workDir, self.workDir, topModule, self.workDir))