launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #25822
[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):