Merge ~twom/launchpad:oci-build-path-ui into launchpad:master

Proposed by Tom Wardill
Status: Merged
Approved by: Tom Wardill
Approved revision: 2facb6d9b0a71626fef923e395e5296470d111cd
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~twom/launchpad:oci-build-path-ui
Merge into: launchpad:master
Diff against target: 235 lines (+41/-7)
9 files modified
lib/lp/oci/browser/ocirecipe.py (+6/-1)
lib/lp/oci/interfaces/ocirecipe.py (+8/-0)
lib/lp/oci/model/ocirecipe.py (+8/-3)
lib/lp/oci/model/ocirecipebuildbehaviour.py (+1/-0)
lib/lp/oci/templates/ocirecipe-index.pt (+5/-0)
lib/lp/oci/templates/ocirecipe-new.pt (+3/-0)
lib/lp/oci/tests/test_ocirecipe.py (+4/-2)
lib/lp/oci/tests/test_ocirecipebuildbehaviour.py (+2/-0)
lib/lp/testing/factory.py (+4/-1)
Reviewer Review Type Date Requested Status
Ioana Lasc (community) Approve
Review via email: mp+389415@code.launchpad.net

Commit message

Add build_path to OCI UI

To post a comment you must log in.
Revision history for this message
Ioana Lasc (ilasc) wrote :

looks good to me.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/lib/lp/oci/browser/ocirecipe.py b/lib/lp/oci/browser/ocirecipe.py
index 3dd764c..15a2b14 100644
--- a/lib/lp/oci/browser/ocirecipe.py
+++ b/lib/lp/oci/browser/ocirecipe.py
@@ -505,6 +505,7 @@ class IOCIRecipeEditSchema(Interface):
505 "description",505 "description",
506 "git_ref",506 "git_ref",
507 "build_file",507 "build_file",
508 "build_path",
508 "build_daily",509 "build_daily",
509 "require_virtualized",510 "require_virtualized",
510 "allow_internet",511 "allow_internet",
@@ -523,6 +524,7 @@ class OCIRecipeAddView(LaunchpadFormView, EnableProcessorsMixin):
523 "description",524 "description",
524 "git_ref",525 "git_ref",
525 "build_file",526 "build_file",
527 "build_path",
526 "build_daily",528 "build_daily",
527 )529 )
528 custom_widget_git_ref = GitRefWidget530 custom_widget_git_ref = GitRefWidget
@@ -557,6 +559,7 @@ class OCIRecipeAddView(LaunchpadFormView, EnableProcessorsMixin):
557 return {559 return {
558 "owner": self.user,560 "owner": self.user,
559 "build_file": "Dockerfile",561 "build_file": "Dockerfile",
562 "build_path": ".",
560 "processors": [563 "processors": [
561 p for p in getUtility(IProcessorSet).getAll()564 p for p in getUtility(IProcessorSet).getAll()
562 if p.build_by_default],565 if p.build_by_default],
@@ -580,7 +583,8 @@ class OCIRecipeAddView(LaunchpadFormView, EnableProcessorsMixin):
580 recipe = getUtility(IOCIRecipeSet).new(583 recipe = getUtility(IOCIRecipeSet).new(
581 name=data["name"], registrant=self.user, owner=data["owner"],584 name=data["name"], registrant=self.user, owner=data["owner"],
582 oci_project=self.context, git_ref=data["git_ref"],585 oci_project=self.context, git_ref=data["git_ref"],
583 build_file=data["build_file"], description=data["description"],586 build_file=data["build_file"], build_path=data["build_path"],
587 description=data["description"],
584 build_daily=data["build_daily"], processors=data["processors"])588 build_daily=data["build_daily"], processors=data["processors"])
585 self.next_url = canonical_url(recipe)589 self.next_url = canonical_url(recipe)
586590
@@ -638,6 +642,7 @@ class OCIRecipeEditView(BaseOCIRecipeEditView, EnableProcessorsMixin):
638 "description",642 "description",
639 "git_ref",643 "git_ref",
640 "build_file",644 "build_file",
645 "build_path",
641 "build_daily",646 "build_daily",
642 )647 )
643 custom_widget_git_ref = GitRefWidget648 custom_widget_git_ref = GitRefWidget
diff --git a/lib/lp/oci/interfaces/ocirecipe.py b/lib/lp/oci/interfaces/ocirecipe.py
index 37f74a2..b290f42 100644
--- a/lib/lp/oci/interfaces/ocirecipe.py
+++ b/lib/lp/oci/interfaces/ocirecipe.py
@@ -383,6 +383,14 @@ class IOCIRecipeEditableAttributes(IHasOwner):
383 required=True,383 required=True,
384 readonly=False))384 readonly=False))
385385
386 build_path = exported(TextLine(
387 title=_("Build directory context"),
388 description=_("Directory to use for build context "
389 "and OCIRecipe.build_file location."),
390 constraint=path_does_not_escape,
391 required=True,
392 readonly=False))
393
386 build_daily = exported(Bool(394 build_daily = exported(Bool(
387 title=_("Build daily"),395 title=_("Build daily"),
388 required=True,396 required=True,
diff --git a/lib/lp/oci/model/ocirecipe.py b/lib/lp/oci/model/ocirecipe.py
index 0125114..e95c8c6 100644
--- a/lib/lp/oci/model/ocirecipe.py
+++ b/lib/lp/oci/model/ocirecipe.py
@@ -145,6 +145,7 @@ class OCIRecipe(Storm, WebhookTargetMixin):
145 git_repository = Reference(git_repository_id, "GitRepository.id")145 git_repository = Reference(git_repository_id, "GitRepository.id")
146 git_path = Unicode(name="git_path", allow_none=True)146 git_path = Unicode(name="git_path", allow_none=True)
147 build_file = Unicode(name="build_file", allow_none=False)147 build_file = Unicode(name="build_file", allow_none=False)
148 build_path = Unicode(name="build_path", allow_none=False)
148149
149 require_virtualized = Bool(name="require_virtualized", default=True,150 require_virtualized = Bool(name="require_virtualized", default=True,
150 allow_none=False)151 allow_none=False)
@@ -156,7 +157,7 @@ class OCIRecipe(Storm, WebhookTargetMixin):
156 def __init__(self, name, registrant, owner, oci_project, git_ref,157 def __init__(self, name, registrant, owner, oci_project, git_ref,
157 description=None, official=False, require_virtualized=True,158 description=None, official=False, require_virtualized=True,
158 build_file=None, build_daily=False, date_created=DEFAULT,159 build_file=None, build_daily=False, date_created=DEFAULT,
159 allow_internet=True):160 allow_internet=True, build_path=None):
160 if not getFeatureFlag(OCI_RECIPE_ALLOW_CREATE):161 if not getFeatureFlag(OCI_RECIPE_ALLOW_CREATE):
161 raise OCIRecipeFeatureDisabled()162 raise OCIRecipeFeatureDisabled()
162 super(OCIRecipe, self).__init__()163 super(OCIRecipe, self).__init__()
@@ -173,6 +174,7 @@ class OCIRecipe(Storm, WebhookTargetMixin):
173 self.date_last_modified = date_created174 self.date_last_modified = date_created
174 self.git_ref = git_ref175 self.git_ref = git_ref
175 self.allow_internet = allow_internet176 self.allow_internet = allow_internet
177 self.build_path = build_path
176178
177 def __repr__(self):179 def __repr__(self):
178 return "<OCIRecipe ~%s/%s/+oci/%s/+recipe/%s>" % (180 return "<OCIRecipe ~%s/%s/+oci/%s/+recipe/%s>" % (
@@ -532,7 +534,7 @@ class OCIRecipeSet:
532 def new(self, name, registrant, owner, oci_project, git_ref, build_file,534 def new(self, name, registrant, owner, oci_project, git_ref, build_file,
533 description=None, official=False, require_virtualized=True,535 description=None, official=False, require_virtualized=True,
534 build_daily=False, processors=None, date_created=DEFAULT,536 build_daily=False, processors=None, date_created=DEFAULT,
535 allow_internet=True):537 allow_internet=True, build_path=None):
536 """See `IOCIRecipeSet`."""538 """See `IOCIRecipeSet`."""
537 if not registrant.inTeam(owner):539 if not registrant.inTeam(owner):
538 if owner.is_team:540 if owner.is_team:
@@ -550,11 +552,14 @@ class OCIRecipeSet:
550 if self.exists(owner, oci_project, name):552 if self.exists(owner, oci_project, name):
551 raise DuplicateOCIRecipeName553 raise DuplicateOCIRecipeName
552554
555 if build_path is None:
556 build_path = "."
557
553 store = IMasterStore(OCIRecipe)558 store = IMasterStore(OCIRecipe)
554 oci_recipe = OCIRecipe(559 oci_recipe = OCIRecipe(
555 name, registrant, owner, oci_project, git_ref, description,560 name, registrant, owner, oci_project, git_ref, description,
556 official, require_virtualized, build_file, build_daily,561 official, require_virtualized, build_file, build_daily,
557 date_created, allow_internet)562 date_created, allow_internet, build_path)
558 store.add(oci_recipe)563 store.add(oci_recipe)
559564
560 if processors is None:565 if processors is None:
diff --git a/lib/lp/oci/model/ocirecipebuildbehaviour.py b/lib/lp/oci/model/ocirecipebuildbehaviour.py
index fce6dd3..844a2c8 100644
--- a/lib/lp/oci/model/ocirecipebuildbehaviour.py
+++ b/lib/lp/oci/model/ocirecipebuildbehaviour.py
@@ -96,6 +96,7 @@ class OCIRecipeBuildBehaviour(SnapProxyMixin, BuildFarmJobBehaviourBase):
96 logger=logger))96 logger=logger))
9797
98 args['build_file'] = build.recipe.build_file98 args['build_file'] = build.recipe.build_file
99 args['build_path'] = build.recipe.build_path
99100
100 if build.recipe.git_ref is not None:101 if build.recipe.git_ref is not None:
101 args["git_repository"] = (102 args["git_repository"] = (
diff --git a/lib/lp/oci/templates/ocirecipe-index.pt b/lib/lp/oci/templates/ocirecipe-index.pt
index 21a6939..c2ef69e 100644
--- a/lib/lp/oci/templates/ocirecipe-index.pt
+++ b/lib/lp/oci/templates/ocirecipe-index.pt
@@ -56,6 +56,11 @@
56 <span tal:content="context/build_file"/>56 <span tal:content="context/build_file"/>
57 <a tal:replace="structure view/menu:overview/edit/fmt:icon"/>57 <a tal:replace="structure view/menu:overview/edit/fmt:icon"/>
58 </dd>58 </dd>
59 <dt>Build context directory:</dt>
60 <dd>
61 <span tal:content="context/build_path"/>
62 <a tal:replace="structure view/menu:overview/edit/fmt:icon"/>
63 </dd>
59 </dl>64 </dl>
60 <dl id="build-schedule">65 <dl id="build-schedule">
61 <dt>Build schedule:</dt>66 <dt>Build schedule:</dt>
diff --git a/lib/lp/oci/templates/ocirecipe-new.pt b/lib/lp/oci/templates/ocirecipe-new.pt
index e5f2686..0bc156a 100644
--- a/lib/lp/oci/templates/ocirecipe-new.pt
+++ b/lib/lp/oci/templates/ocirecipe-new.pt
@@ -29,6 +29,9 @@
29 <tal:widget define="widget nocall:view/widgets/build_file">29 <tal:widget define="widget nocall:view/widgets/build_file">
30 <metal:block use-macro="context/@@launchpad_form/widget_row" />30 <metal:block use-macro="context/@@launchpad_form/widget_row" />
31 </tal:widget>31 </tal:widget>
32 <tal:widget define="widget nocall:view/widgets/build_path">
33 <metal:block use-macro="context/@@launchpad_form/widget_row" />
34 </tal:widget>
32 <tal:widget define="widget nocall:view/widgets/build_daily">35 <tal:widget define="widget nocall:view/widgets/build_daily">
33 <metal:block use-macro="context/@@launchpad_form/widget_row" />36 <metal:block use-macro="context/@@launchpad_form/widget_row" />
34 </tal:widget>37 </tal:widget>
diff --git a/lib/lp/oci/tests/test_ocirecipe.py b/lib/lp/oci/tests/test_ocirecipe.py
index 880c351..024b8e7 100644
--- a/lib/lp/oci/tests/test_ocirecipe.py
+++ b/lib/lp/oci/tests/test_ocirecipe.py
@@ -799,7 +799,8 @@ class TestOCIRecipeSet(TestCaseWithFactory):
799 description='a description',799 description='a description',
800 official=False,800 official=False,
801 require_virtualized=False,801 require_virtualized=False,
802 build_file='build file')802 build_file='build file',
803 build_path='build path')
803 self.assertEqual(target.registrant, registrant)804 self.assertEqual(target.registrant, registrant)
804 self.assertEqual(target.owner, owner)805 self.assertEqual(target.owner, owner)
805 self.assertEqual(target.oci_project, oci_project)806 self.assertEqual(target.oci_project, oci_project)
@@ -992,7 +993,8 @@ class TestOCIRecipeWebservice(OCIConfigHelperMixin, TestCaseWithFactory):
992 git_ref_link=Equals(self.getAbsoluteURL(recipe.git_ref)),993 git_ref_link=Equals(self.getAbsoluteURL(recipe.git_ref)),
993 description=Equals(recipe.description),994 description=Equals(recipe.description),
994 build_file=Equals(recipe.build_file),995 build_file=Equals(recipe.build_file),
995 build_daily=Equals(recipe.build_daily)996 build_daily=Equals(recipe.build_daily),
997 build_path=Equals(recipe.build_path)
996 )))998 )))
997999
998 def test_api_patch_oci_recipe(self):1000 def test_api_patch_oci_recipe(self):
diff --git a/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py b/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
index 3fdf8b4..bbc1ee6 100644
--- a/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
+++ b/lib/lp/oci/tests/test_ocirecipebuildbehaviour.py
@@ -242,6 +242,7 @@ class TestAsyncOCIRecipeBuildBehaviour(MakeOCIBuildMixin, TestCaseWithFactory):
242 "archives": Equals(expected_archives),242 "archives": Equals(expected_archives),
243 "arch_tag": Equals("i386"),243 "arch_tag": Equals("i386"),
244 "build_file": Equals(job.build.recipe.build_file),244 "build_file": Equals(job.build.recipe.build_file),
245 "build_path": Equals(job.build.recipe.build_path),
245 "build_url": Equals(canonical_url(job.build)),246 "build_url": Equals(canonical_url(job.build)),
246 "fast_cleanup": Is(True),247 "fast_cleanup": Is(True),
247 "git_repository": Equals(ref.repository.git_https_url),248 "git_repository": Equals(ref.repository.git_https_url),
@@ -272,6 +273,7 @@ class TestAsyncOCIRecipeBuildBehaviour(MakeOCIBuildMixin, TestCaseWithFactory):
272 "archives": Equals(expected_archives),273 "archives": Equals(expected_archives),
273 "arch_tag": Equals("i386"),274 "arch_tag": Equals("i386"),
274 "build_file": Equals(job.build.recipe.build_file),275 "build_file": Equals(job.build.recipe.build_file),
276 "build_path": Equals(job.build.recipe.build_path),
275 "build_url": Equals(canonical_url(job.build)),277 "build_url": Equals(canonical_url(job.build)),
276 "fast_cleanup": Is(True),278 "fast_cleanup": Is(True),
277 "git_repository": Equals(ref.repository.git_https_url),279 "git_repository": Equals(ref.repository.git_https_url),
diff --git a/lib/lp/testing/factory.py b/lib/lp/testing/factory.py
index 45d64f0..fb9d56b 100644
--- a/lib/lp/testing/factory.py
+++ b/lib/lp/testing/factory.py
@@ -4999,7 +4999,7 @@ class BareLaunchpadObjectFactory(ObjectFactory):
4999 oci_project=None, git_ref=None, description=None,4999 oci_project=None, git_ref=None, description=None,
5000 official=False, require_virtualized=True,5000 official=False, require_virtualized=True,
5001 build_file=None, date_created=DEFAULT,5001 build_file=None, date_created=DEFAULT,
5002 allow_internet=True):5002 allow_internet=True, build_path=None):
5003 """Make a new OCIRecipe."""5003 """Make a new OCIRecipe."""
5004 if name is None:5004 if name is None:
5005 name = self.getUniqueString(u"oci-recipe-name")5005 name = self.getUniqueString(u"oci-recipe-name")
@@ -5015,6 +5015,8 @@ class BareLaunchpadObjectFactory(ObjectFactory):
5015 [git_ref] = self.makeGitRefs()5015 [git_ref] = self.makeGitRefs()
5016 if build_file is None:5016 if build_file is None:
5017 build_file = self.getUniqueUnicode(u"build_file_for")5017 build_file = self.getUniqueUnicode(u"build_file_for")
5018 if build_path is None:
5019 build_path = self.getUniqueUnicode(u"build_path_for")
5018 return getUtility(IOCIRecipeSet).new(5020 return getUtility(IOCIRecipeSet).new(
5019 name=name,5021 name=name,
5020 registrant=registrant,5022 registrant=registrant,
@@ -5022,6 +5024,7 @@ class BareLaunchpadObjectFactory(ObjectFactory):
5022 oci_project=oci_project,5024 oci_project=oci_project,
5023 git_ref=git_ref,5025 git_ref=git_ref,
5024 build_file=build_file,5026 build_file=build_file,
5027 build_path=build_path,
5025 description=description,5028 description=description,
5026 official=official,5029 official=official,
5027 require_virtualized=require_virtualized,5030 require_virtualized=require_virtualized,

Subscribers

People subscribed via source and target branches

to status/vote changes: