launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #18752
Re: [Merge] lp:~wgrant/launchpad/product-code-defaults into lp:launchpad
Review: Approve code
Diff comments:
> === modified file 'lib/lp/code/browser/configure.zcml'
> --- lib/lp/code/browser/configure.zcml 2015-06-05 09:08:50 +0000
> +++ lib/lp/code/browser/configure.zcml 2015-06-10 10:36:53 +0000
> @@ -962,7 +962,7 @@
> <browser:defaultView
> for="lp.registry.interfaces.personproduct.IPersonProduct"
> layer="lp.code.publisher.CodeLayer"
> - name="+branches" />
> + name="+code" />
>
> <browser:page
> for="lp.registry.interfaces.personproduct.IPersonProduct"
>
> === added file 'lib/lp/code/browser/tests/test_vcslisting.py'
> --- lib/lp/code/browser/tests/test_vcslisting.py 1970-01-01 00:00:00 +0000
> +++ lib/lp/code/browser/tests/test_vcslisting.py 2015-06-10 10:36:53 +0000
> @@ -0,0 +1,63 @@
> +# Copyright 2009-2015 Canonical Ltd. This software is licensed under the
> +# GNU Affero General Public License version 3 (see the file LICENSE).
> +
> +"""Tests for the product view classes and templates."""
> +
> +__metaclass__ = type
> +
> +from lp.code.browser.branchlisting import (
> + PersonProductBranchesView,
> + ProductBranchesView,
> + )
> +from lp.code.browser.gitlisting import (
> + PersonTargetGitListingView,
> + TargetGitListingView,
> + )
> +from lp.registry.enums import VCSType
> +from lp.testing import TestCaseWithFactory
> +from lp.testing.layers import DatabaseFunctionalLayer
> +from lp.testing.publication import test_traverse
> +
> +
> +class TestProductDefaultVCSView(TestCaseWithFactory):
> + """Tests that Product:+code delegates to +git or +branches."""
> +
> + layer = DatabaseFunctionalLayer
> +
> + def test_default_unset(self):
> + product = self.factory.makeProduct()
> + self.assertIs(None, product.vcs)
> + view = test_traverse('/%s/+code' % product.name)[1]
> + self.assertIsInstance(view, ProductBranchesView)
> +
> + def test_default_bzr(self):
> + product = self.factory.makeProduct(vcs=VCSType.BZR)
> + view = test_traverse('/%s/+code' % product.name)[1]
> + self.assertIsInstance(view, ProductBranchesView)
> +
> + def test_git(self):
> + product = self.factory.makeProduct(vcs=VCSType.GIT)
> + view = test_traverse('/%s/+code' % product.name)[1]
> + self.assertIsInstance(view, TargetGitListingView)
> +
> +
> +class TestPersonProductDefaultVCSView(TestCaseWithFactory):
> + """Tests that Product:+code delegates to +git or +branches."""
The comment should say PersonProduct here.
> +
> + layer = DatabaseFunctionalLayer
> +
> + def assertCodeViewClass(self, vcs, cls):
> + person = self.factory.makePerson()
> + product = self.factory.makeProduct(vcs=vcs)
> + self.assertEqual(vcs, product.vcs)
> + view = test_traverse('/~%s/%s/+code' % (person.name, product.name))[1]
> + self.assertIsInstance(view, cls)
> +
> + def test_default_unset(self):
> + self.assertCodeViewClass(None, PersonProductBranchesView)
> +
> + def test_default_bzr(self):
> + self.assertCodeViewClass(VCSType.BZR, PersonProductBranchesView)
> +
> + def test_git(self):
> + self.assertCodeViewClass(VCSType.GIT, PersonTargetGitListingView)
>
> === added file 'lib/lp/code/browser/vcslisting.py'
> --- lib/lp/code/browser/vcslisting.py 1970-01-01 00:00:00 +0000
> +++ lib/lp/code/browser/vcslisting.py 2015-06-10 10:36:53 +0000
> @@ -0,0 +1,39 @@
> +# Copyright 2015 Canonical Ltd. This software is licensed under the
> +# GNU Affero General Public License version 3 (see the file LICENSE).
> +
> +"""VCS-agnostic view aliases that show the default VCS."""
> +
> +__metaclass__ = type
> +
> +from zope.component import getMultiAdapter
> +
> +from lp.registry.enums import VCSType
> +from lp.services.webapp import stepto
> +
> +
> +class TargetDefaultVCSNavigationMixin:
> +
> + @stepto("+code")
> + def traverse_code_view(self):
> + if self.context.pillar.vcs in (VCSType.BZR, None):
> + view_name = '+branches'
> + elif self.context.pillar.vcs == VCSType.GIT:
> + view_name = '+git'
> + else:
> + raise AssertionError("Unknown VCS")
> + return getMultiAdapter(
> + (self.context, self.request), name=view_name)
> +
> +
> +class PersonTargetDefaultVCSNavigationMixin:
> +
> + @stepto("+code")
> + def traverse_code_view(self):
> + if self.context.product.vcs in (VCSType.BZR, None):
> + view_name = '+branches'
> + elif self.context.product.vcs == VCSType.GIT:
> + view_name = '+git'
> + else:
> + raise AssertionError("Unknown VCS")
> + return getMultiAdapter(
> + (self.context, self.request), name=view_name)
>
> === modified file 'lib/lp/registry/browser/configure.zcml'
> --- lib/lp/registry/browser/configure.zcml 2015-05-03 08:34:51 +0000
> +++ lib/lp/registry/browser/configure.zcml 2015-06-10 10:36:53 +0000
> @@ -1575,7 +1575,7 @@
> for="lp.registry.interfaces.product.IProduct"
> />
> <browser:defaultView
> - name="+branches"
> + name="+code"
> for="lp.registry.interfaces.product.IProduct"
> layer="lp.code.publisher.CodeLayer"
> />
>
> === modified file 'lib/lp/registry/browser/personproduct.py'
> --- lib/lp/registry/browser/personproduct.py 2014-11-24 01:20:26 +0000
> +++ lib/lp/registry/browser/personproduct.py 2015-06-10 10:36:53 +0000
> @@ -16,6 +16,7 @@
> from zope.traversing.interfaces import IPathAdapter
>
> from lp.app.errors import NotFoundError
> +from lp.code.browser.vcslisting import PersonTargetDefaultVCSNavigationMixin
> from lp.code.interfaces.branchnamespace import get_branch_namespace
> from lp.registry.interfaces.personproduct import IPersonProduct
> from lp.services.webapp import (
> @@ -27,7 +28,8 @@
> from lp.services.webapp.interfaces import IMultiFacetedBreadcrumb
>
>
> -class PersonProductNavigation(Navigation):
> +class PersonProductNavigation(PersonTargetDefaultVCSNavigationMixin,
> + Navigation):
> """Navigation to branches for this person/product."""
> usedfor = IPersonProduct
>
>
> === modified file 'lib/lp/registry/browser/product.py'
> --- lib/lp/registry/browser/product.py 2015-01-29 16:28:30 +0000
> +++ lib/lp/registry/browser/product.py 2015-06-10 10:36:53 +0000
> @@ -133,6 +133,7 @@
> from lp.bugs.interfaces.bugtask import RESOLVED_BUGTASK_STATUSES
> from lp.code.browser.branchref import BranchRef
> from lp.code.browser.sourcepackagerecipelisting import HasRecipesMenuMixin
> +from lp.code.browser.vcslisting import TargetDefaultVCSNavigationMixin
> from lp.registry.browser import (
> add_subscribe_link,
> BaseRdfView,
> @@ -206,7 +207,7 @@
> Navigation, BugTargetTraversalMixin,
> FAQTargetNavigationMixin, HasCustomLanguageCodesTraversalMixin,
> QuestionTargetTraversalMixin, StructuralSubscriptionTargetTraversalMixin,
> - PillarNavigationMixin):
> + PillarNavigationMixin, TargetDefaultVCSNavigationMixin):
>
> usedfor = IProduct
>
>
--
https://code.launchpad.net/~wgrant/launchpad/product-code-defaults/+merge/261605
Your team Launchpad code reviewers is subscribed to branch lp:launchpad.
References