def run(self, config, args): if args.bootstrap: config.cache_file = config.build_tools_cache cookbook = CookBook(config) is_modifying = False or args.touch or args.reset if not is_modifying: for attr in self.recipe_attributes: if getattr(args, attr) is not None: is_modifying = True break global_status = cookbook.status recipes = args.recipe or list(global_status.keys()) m.message('{} cache values for recipes: {}'.format( 'Showing' if not is_modifying else 'Modifying', ', '.join(recipes))) for recipe in recipes: if recipe not in global_status.keys(): m.error('Recipe {} not in cookbook'.format(recipe)) continue status = global_status[recipe] print('[{}]'.format(recipe)) text = '' if is_modifying: text = 'Before\n' print('{}{}\n'.format(text, status)) if is_modifying: if args.reset: cookbook.reset_recipe_status(recipe) m.message('Recipe {} reset'.format(recipe)) else: if args.touch: status.touch() for attr in self.recipe_attributes: var = getattr(args, attr) if var is not None: if isinstance(getattr(self.recipe_status, attr), bool): if var.lower() == 'true': var = True elif var.lower() == 'false': var = False else: m.error( 'Error: Attribute "{}" needs to be either "True" or "False"' .format(attr)) return setattr(status, attr, var) cookbook.save() print('After\n{}\n'.format(status))
class PackageTest(unittest.TestCase): def setUp(self): self.config = Config() self.config.cache_file = '/dev/null' self.cookbook = CookBook(self.config, False) def testSetGetConfig(self): self.assertEquals(self.config, self.cookbook.get_config()) self.cookbook.set_config(None) self.assertIsNone(self.cookbook._config) def testCacheMissing(self): status = {'test': 'test'} self.cookbook.set_status(status) self.cookbook._restore_cache() self.assertEquals(self.cookbook.status, {}) def testSaveCache(self): tmp = tempfile.NamedTemporaryFile() status = {'test': 'test'} self.cookbook.set_status(status) self.cookbook.get_config().cache_file = tmp.name self.cookbook.save() with open(self.cookbook._cache_file(self.config), 'rb') as f: loaded_status = pickle.load(f) self.assertEquals(status, loaded_status) def testLoad(self): tmp = tempfile.NamedTemporaryFile() status = {'test': 'test'} self.cookbook.get_config().cache_file = tmp.name with open(tmp.name, 'wb') as f: pickle.dump(status, f) self.cookbook._restore_cache() self.assertEquals(status, self.cookbook.status) def testAddGetRecipe(self): recipe = Recipe1(self.config) self.failUnlessRaises(RecipeNotFoundError, self.cookbook.get_recipe, recipe.name) self.cookbook.add_recipe(recipe) self.assertEquals(recipe, self.cookbook.recipes[recipe.name]) self.assertEquals(recipe, self.cookbook.get_recipe(recipe.name)) self.assertEquals(self.cookbook.get_recipes_list(), [recipe]) def testGetRecipesStatus(self): recipe = Recipe1(self.config) self.cookbook._restore_cache() self.assertEquals(self.cookbook.status, {}) self.cookbook.add_recipe(recipe) self.assertEquals(len(self.cookbook.status), 0) status = self.cookbook._recipe_status(recipe.name) self.assertEquals(len(self.cookbook.status), 1) self.assertEquals(status.steps, []) status.steps.append('1') status = self.cookbook._recipe_status(recipe.name) self.assertEquals(len(self.cookbook.status), 1) self.assertEquals(status.steps[0], '1') def testUpdateStatus(self): recipe = Recipe1(self.config) self.cookbook.add_recipe(recipe) self.cookbook._restore_cache() self.cookbook.update_step_status(recipe.name, 'fetch') status = self.cookbook._recipe_status(recipe.name) self.assertEquals(status.steps, ['fetch']) self.cookbook.update_step_status(recipe.name, 'build') status = self.cookbook._recipe_status(recipe.name) self.assertEquals(status.steps, ['fetch', 'build']) self.cookbook.update_step_status(recipe.name, 'install') status = self.cookbook._recipe_status(recipe.name) self.assertEquals(status.steps, ['fetch', 'build', 'install']) for step in ['fetch', 'build', 'install']: self.assertTrue(self.cookbook.step_done(recipe.name, step)) def testBuildStatus(self): recipe = Recipe1(self.config) self.cookbook.add_recipe(recipe) self.cookbook._restore_cache() self.cookbook.update_build_status(recipe.name, True) self.assertTrue(self.cookbook.status[recipe.name].needs_build) self.cookbook.update_build_status(recipe.name, False) self.assertFalse(self.cookbook.status[recipe.name].needs_build) def testResetRecipeStatus(self): recipe = Recipe1(self.config) self.cookbook.add_recipe(recipe) self.cookbook._restore_cache() self.cookbook.reset_recipe_status(recipe.name) status = self.cookbook._recipe_status(recipe.name) self.assertEquals(status.steps, []) self.assertTrue(self.cookbook.status[recipe.name].needs_build)
class PackageTest(unittest.TestCase): def setUp(self): self.config = Config() self.config.cache_file = '/dev/null' self.cookbook = CookBook(self.config, False) def testSetGetConfig(self): self.assertEqual(self.config, self.cookbook.get_config()) self.cookbook.set_config(None) self.assertIsNone(self.cookbook._config) def testCacheMissing(self): status = {'test': 'test'} self.cookbook.set_status(status) self.cookbook._restore_cache() self.assertEqual(self.cookbook.status, {}) def testSaveCache(self): tmp = tempfile.NamedTemporaryFile() status = {'test': 'test'} self.cookbook.set_status(status) self.cookbook.get_config().cache_file = tmp.name self.cookbook.save() with open(self.cookbook._cache_file(self.config), 'rb') as f: loaded_status = pickle.load(f) self.assertEqual(status, loaded_status) def testLoad(self): tmp = tempfile.NamedTemporaryFile() status = {'test': 'test'} self.cookbook.get_config().cache_file = tmp.name with open(tmp.name, 'wb') as f: pickle.dump(status, f) self.cookbook._restore_cache() self.assertEqual(status, self.cookbook.status) def testAddGetRecipe(self): recipe = Recipe1(self.config) self.assertRaises(RecipeNotFoundError, self.cookbook.get_recipe, recipe.name) self.cookbook.add_recipe(recipe) self.assertEqual(recipe, self.cookbook.recipes[recipe.name]) self.assertEqual(recipe, self.cookbook.get_recipe(recipe.name)) self.assertEqual(self.cookbook.get_recipes_list(), [recipe]) def testGetRecipesStatus(self): recipe = Recipe1(self.config) self.cookbook._restore_cache() self.assertEqual(self.cookbook.status, {}) self.cookbook.add_recipe(recipe) self.assertEqual(len(self.cookbook.status), 0) status = self.cookbook._recipe_status(recipe.name) self.assertEqual(len(self.cookbook.status), 1) self.assertEqual(status.steps, []) status.steps.append('1') status = self.cookbook._recipe_status(recipe.name) self.assertEqual(len(self.cookbook.status), 1) self.assertEqual(status.steps[0], '1') def testUpdateStatus(self): recipe = Recipe1(self.config) self.cookbook.add_recipe(recipe) self.cookbook._restore_cache() self.cookbook.update_step_status(recipe.name, 'fetch') status = self.cookbook._recipe_status(recipe.name) self.assertEqual(status.steps, ['fetch']) self.cookbook.update_step_status(recipe.name, 'build') status = self.cookbook._recipe_status(recipe.name) self.assertEqual(status.steps, ['fetch', 'build']) self.cookbook.update_step_status(recipe.name, 'install') status = self.cookbook._recipe_status(recipe.name) self.assertEqual(status.steps, ['fetch', 'build', 'install']) for step in ['fetch', 'build', 'install']: self.assertTrue(self.cookbook.step_done(recipe.name, step)) def testBuildStatus(self): recipe = Recipe1(self.config) self.cookbook.add_recipe(recipe) self.cookbook._restore_cache() self.cookbook.update_build_status(recipe.name, '1.0') self.assertTrue(self.cookbook.status[recipe.name].needs_build) self.assertEqual(self.cookbook.status[recipe.name].built_version, '1.0') self.cookbook.update_build_status(recipe.name, None) self.assertFalse(self.cookbook.status[recipe.name].needs_build) self.assertEqual(self.cookbook.status[recipe.name].built_version, None) def testResetRecipeStatus(self): recipe = Recipe1(self.config) self.cookbook.add_recipe(recipe) self.cookbook._restore_cache() self.cookbook.reset_recipe_status(recipe.name) status = self.cookbook._recipe_status(recipe.name) self.assertEqual(status.steps, []) self.assertTrue(self.cookbook.status[recipe.name].needs_build)