← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~rockstar/launchpad/recipe-too-new into lp:launchpad/devel

 

Paul Hummer has proposed merging lp:~rockstar/launchpad/recipe-too-new into lp:launchpad/devel.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)
Related bugs:
  #645403 TooNewRecipeFormat raised editing a recipe
  https://bugs.launchpad.net/bugs/645403


This branch fixes an issue where users try to use a recipe format that we don't yet support.  In this case, we have bzr-builder in source code, but Aaron can't land the support until the buildds have the newer bzr-builder.

I talked this over with Aaron, and we decided to monkey patch the actual NEWEST_VERSION in bzr-builder to a recipe format version we're never going to have (in this case, it's also the frequency of my local HAM radio repeater).  This way, we won't have erroneous test failures when we actually add support for 0.3 formatted recipes.

While talking this over with Aaron, I found another potential place where this may occur in tests, and fixed that test as well.
-- 
https://code.launchpad.net/~rockstar/launchpad/recipe-too-new/+merge/36379
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~rockstar/launchpad/recipe-too-new into lp:launchpad/devel.
=== modified file 'lib/lp/code/browser/sourcepackagerecipe.py'
--- lib/lp/code/browser/sourcepackagerecipe.py	2010-09-02 14:28:57 +0000
+++ lib/lp/code/browser/sourcepackagerecipe.py	2010-09-22 20:37:43 +0000
@@ -60,6 +60,7 @@
     BuildAlreadyPending,
     NoSuchBranch,
     PrivateBranchRecipe,
+    TooNewRecipeFormat
     )
 from lp.code.interfaces.sourcepackagerecipe import (
     ISourcePackageRecipe,
@@ -333,6 +334,11 @@
                     data['recipe_text'], data['description'], data['distros'],
                     data['daily_build_archive'], data['build_daily'])
             Store.of(source_package_recipe).flush()
+        except TooNewRecipeFormat:
+            self.setFieldError(
+                'recipe_text',
+                'The recipe format version specified is not available.')
+            return
         except ForbiddenInstructionError:
             # XXX: bug=592513 We shouldn't be hardcoding "run" here.
             self.setFieldError(

=== modified file 'lib/lp/code/browser/tests/test_sourcepackagerecipe.py'
--- lib/lp/code/browser/tests/test_sourcepackagerecipe.py	2010-09-20 19:12:35 +0000
+++ lib/lp/code/browser/tests/test_sourcepackagerecipe.py	2010-09-22 20:37:43 +0000
@@ -304,6 +304,30 @@
         self.assertEqual(
             get_message_text(browser, 2), 'foo is not a branch on Launchpad.')
 
+    def test_create_recipe_format_too_new(self):
+        # If the recipe's format version is too new, we should notify the
+        # user.
+        product = self.factory.makeProduct(
+            name='ratatouille', displayname='Ratatouille')
+        branch = self.factory.makeBranch(
+            owner=self.chef, product=product, name='veggies')
+
+        # We need to monkeypath RecipeParser.NEWEST_VERSION
+        from bzrlib.plugins.builder.recipe import RecipeParser
+        old_version = RecipeParser.NEWEST_VERSION
+        RecipeParser.NEWEST_VERSION = 145.115
+
+        recipe = dedent(u'''\
+            # bzr-builder format 145.115 deb-version 0+{revno}
+            %s
+            ''') % branch.bzr_identity
+        browser = self.createRecipe(recipe, branch)
+        self.assertEqual(
+            get_message_text(browser, 2),
+            'The recipe format version specified is not available.')
+
+        RecipeParser.NEWEST_VERSION = old_version
+
     def test_create_dupe_recipe(self):
         # You shouldn't be able to create a duplicate recipe owned by the same
         # person with the same name.

=== modified file 'lib/lp/code/model/tests/test_sourcepackagerecipe.py'
--- lib/lp/code/model/tests/test_sourcepackagerecipe.py	2010-09-21 19:02:44 +0000
+++ lib/lp/code/model/tests/test_sourcepackagerecipe.py	2010-09-22 20:37:43 +0000
@@ -246,12 +246,19 @@
             old_branches, list(sp_recipe.getReferencedBranches()))
 
     def test_reject_newer_formats(self):
+        # We need to monkeypath RecipeParser.NEWEST_VERSION
+        from bzrlib.plugins.builder.recipe import RecipeParser
+        old_version = RecipeParser.NEWEST_VERSION
+        RecipeParser.NEWEST_VERSION = 145.115
+
         builder_recipe = self.factory.makeRecipe()
-        builder_recipe.format = 0.3
+        builder_recipe.format = 145.115
         self.assertRaises(
             TooNewRecipeFormat,
             self.factory.makeSourcePackageRecipe, recipe=str(builder_recipe))
 
+        RecipeParser.NEWEST_VERSION = old_version
+
     def test_requestBuild(self):
         recipe = self.factory.makeSourcePackageRecipe()
         (distroseries,) = list(recipe.distroseries)