← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~cjwatson/launchpad:builder-set-oci-recipe-build into launchpad:master

 

Colin Watson has proposed merging ~cjwatson/launchpad:builder-set-oci-recipe-build into launchpad:master.

Commit message:
Add +ocirecipebuild stepthrough navigation on BuilderSet

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~cjwatson/launchpad/+git/launchpad/+merge/395024

This is useful when repairing the build farm after outages, or otherwise needing to look up an OCI recipe build by its ID alone.  It goes with similar stepthroughs for other build types.
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~cjwatson/launchpad:builder-set-oci-recipe-build into launchpad:master.
diff --git a/lib/lp/buildmaster/browser/builder.py b/lib/lp/buildmaster/browser/builder.py
index 1c67f11..37d388f 100644
--- a/lib/lp/buildmaster/browser/builder.py
+++ b/lib/lp/buildmaster/browser/builder.py
@@ -48,6 +48,7 @@ from lp.buildmaster.interfaces.builder import (
 from lp.code.interfaces.sourcepackagerecipebuild import (
     ISourcePackageRecipeBuildSource,
     )
+from lp.oci.interfaces.ocirecipebuild import IOCIRecipeBuildSet
 from lp.services.helpers import english_list
 from lp.services.propertycache import cachedproperty
 from lp.services.webapp import (
@@ -103,6 +104,13 @@ class BuilderSetNavigation(GetitemNavigation):
             return None
         return self.redirectSubTree(canonical_url(build, request=self.request))
 
+    @stepthrough('+ocirecipebuild')
+    def traverse_ocirecipebuild(self, name):
+        build = get_build_by_id_str(IOCIRecipeBuildSet, name)
+        if build is None:
+            return None
+        return self.redirectSubTree(canonical_url(build, request=self.request))
+
 
 class BuilderSetBreadcrumb(Breadcrumb):
     """Builds a breadcrumb for an `IBuilderSet`."""
diff --git a/lib/lp/buildmaster/browser/tests/test_builder.py b/lib/lp/buildmaster/browser/tests/test_builder.py
index 86c798b..a2d2408 100644
--- a/lib/lp/buildmaster/browser/tests/test_builder.py
+++ b/lib/lp/buildmaster/browser/tests/test_builder.py
@@ -20,6 +20,7 @@ from lp.buildmaster.enums import (
     )
 from lp.buildmaster.interfaces.builder import IBuilderSet
 from lp.buildmaster.model.builder import Builder
+from lp.oci.interfaces.ocirecipe import OCI_RECIPE_ALLOW_CREATE
 from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import get_transaction_timestamp
 from lp.services.features.testing import FeatureFixture
@@ -105,6 +106,20 @@ class TestBuilderSetNavigation(TestCaseWithFactory):
         browser.open(url)
         self.assertEqual(expected_url, browser.url)
 
+    def test_oci_recipe_build_api_redirects(self):
+        self.useFixture(FeatureFixture({OCI_RECIPE_ALLOW_CREATE: "on"}))
+        build = self.factory.makeOCIRecipeBuild()
+        url = (
+            "http://api.launchpad.test/devel/builders/+ocirecipebuild/%s"; %
+            build.id)
+        expected_url = (
+            "http://api.launchpad.test/devel"; +
+            canonical_url(build, path_only_if_possible=True))
+        logout()
+        browser = setupBrowser()
+        browser.open(url)
+        self.assertEqual(expected_url, browser.url)
+
 
 class TestBuildersHomepage(TestCaseWithFactory, BuildCreationMixin):