launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #18033
Re: [Merge] lp:~cjwatson/launchpad/git-simplify-hasgitrepositories into lp:launchpad
Review: Approve code
Death to domain-specific pollution of Person and Product.
Diff comments:
> === modified file 'lib/lp/code/interfaces/gitrepository.py'
> --- lib/lp/code/interfaces/gitrepository.py 2015-03-03 15:05:59 +0000
> +++ lib/lp/code/interfaces/gitrepository.py 2015-03-04 19:09:38 +0000
> @@ -320,6 +320,16 @@
> Return None if no match was found.
> """
>
> + def getRepositories(user, target):
> + """Get all repositories for a target.
> +
> + :param user: An `IPerson`. Only repositories visible by this user
> + will be returned.
> + :param target: An `IHasGitRepositories`.
> +
> + :return: A collection of `IGitRepository` objects.
> + """
> +
> def getDefaultRepository(target):
> """Get the default repository for a target.
>
> @@ -360,7 +370,7 @@
> :raises GitTargetError: if `target` is an `IPerson`.
> """
>
> - def getRepositories():
> + def getAllRepositories():
This name isn't exposed anywhere, so it really only serves to be confusing internally.
> """Return an empty collection of repositories.
>
> This only exists to keep lazr.restful happy.
>
> === modified file 'lib/lp/code/interfaces/hasgitrepositories.py'
> --- lib/lp/code/interfaces/hasgitrepositories.py 2015-02-09 16:49:01 +0000
> +++ lib/lp/code/interfaces/hasgitrepositories.py 2015-03-04 19:09:38 +0000
> @@ -18,23 +18,3 @@
> A project contains Git repositories, a source package on a distribution
> contains branches, and a person contains "personal" branches.
> """
> -
> - def getGitRepositories(visible_by_user=None, eager_load=False):
> - """Returns all Git repositories related to this object.
> -
> - :param visible_by_user: Normally the user who is asking.
> - :param eager_load: If True, load related objects for the whole
> - collection.
> - :returns: A list of `IGitRepository` objects.
> - """
> -
> - def createGitRepository(registrant, owner, name, information_type=None):
> - """Create a Git repository for this target and return it.
> -
> - :param registrant: The `IPerson` who registered the new repository.
> - :param owner: The `IPerson` who owns the new repository.
> - :param name: The repository name.
> - :param information_type: Set the repository's information type to
> - one different from the target's default. The type must conform
> - to the target's code sharing policy. (optional)
> - """
>
> === modified file 'lib/lp/code/model/gitrepository.py'
> --- lib/lp/code/model/gitrepository.py 2015-03-03 15:05:59 +0000
> +++ lib/lp/code/model/gitrepository.py 2015-03-04 19:09:38 +0000
> @@ -40,7 +40,10 @@
> GitDefaultConflict,
> GitTargetError,
> )
> -from lp.code.interfaces.gitcollection import IAllGitRepositories
> +from lp.code.interfaces.gitcollection import (
> + IAllGitRepositories,
> + IGitCollection,
> + )
> from lp.code.interfaces.gitlookup import IGitLookup
> from lp.code.interfaces.gitnamespace import (
> get_git_namespace,
> @@ -368,6 +371,11 @@
> return repository
> return None
>
> + def getRepositories(self, user, target):
> + """See `IGitRepositorySet`."""
> + collection = IGitCollection(target).visibleByUser(user)
> + return collection.getRepositories(eager_load=True)
> +
> def getDefaultRepository(self, target):
> """See `IGitRepositorySet`."""
> clauses = [GitRepository.target_default == True]
> @@ -439,7 +447,7 @@
> if previous is not None:
> previous.setOwnerDefault(False)
>
> - def getRepositories(self):
> + def getAllRepositories(self):
> """See `IGitRepositorySet`."""
> return []
>
>
> === removed file 'lib/lp/code/model/hasgitrepositories.py'
> --- lib/lp/code/model/hasgitrepositories.py 2015-02-23 17:59:37 +0000
> +++ lib/lp/code/model/hasgitrepositories.py 1970-01-01 00:00:00 +0000
> @@ -1,28 +0,0 @@
> -# Copyright 2015 Canonical Ltd. This software is licensed under the
> -# GNU Affero General Public License version 3 (see the file LICENSE).
> -
> -__metaclass__ = type
> -__all__ = [
> - 'HasGitRepositoriesMixin',
> - ]
> -
> -from zope.component import getUtility
> -
> -from lp.code.interfaces.gitcollection import IGitCollection
> -from lp.code.interfaces.gitrepository import IGitRepositorySet
> -
> -
> -class HasGitRepositoriesMixin:
> - """A mixin implementation for `IHasGitRepositories`."""
> -
> - def createGitRepository(self, registrant, owner, name,
> - information_type=None):
> - """See `IHasGitRepositories`."""
> - return getUtility(IGitRepositorySet).new(
> - registrant, owner, self, name,
> - information_type=information_type)
> -
> - def getGitRepositories(self, visible_by_user=None, eager_load=False):
> - """See `IHasGitRepositories`."""
> - collection = IGitCollection(self).visibleByUser(visible_by_user)
> - return collection.getRepositories(eager_load=eager_load)
>
> === modified file 'lib/lp/code/model/tests/test_gitrepository.py'
> --- lib/lp/code/model/tests/test_gitrepository.py 2015-02-26 17:32:56 +0000
> +++ lib/lp/code/model/tests/test_gitrepository.py 2015-03-04 19:09:38 +0000
> @@ -660,6 +660,37 @@
> self.assertIsNone(
> self.repository_set.getByPath(self.factory.makePerson(), path))
>
> + def test_getRepositories(self):
> + # getRepositories returns a collection of repositories for the given
> + # target.
> + project = self.factory.makeProduct()
> + repositories = [
> + self.factory.makeGitRepository(target=project) for _ in range(5)]
> + self.assertContentEqual(
> + repositories, self.repository_set.getRepositories(None, project))
> +
> + def test_getRepositories_inaccessible(self):
> + # getRepositories only returns repositories that the given user can
> + # see.
> + person = self.factory.makePerson()
> + project = self.factory.makeProduct()
> + public_repositories = [
> + self.factory.makeGitRepository(owner=person, target=project)
> + for _ in range(3)]
> + other_person = self.factory.makePerson()
> + private_repository = self.factory.makeGitRepository(
> + owner=other_person, target=project,
> + information_type=InformationType.USERDATA)
> + self.assertContentEqual(
> + public_repositories,
> + self.repository_set.getRepositories(None, project))
> + self.assertContentEqual(
> + public_repositories,
> + self.repository_set.getRepositories(person, project))
> + self.assertContentEqual(
> + public_repositories + [private_repository],
> + self.repository_set.getRepositories(other_person, project))
> +
> def test_setDefaultRepository_refuses_person(self):
> # setDefaultRepository refuses if the target is a person.
> person = self.factory.makePerson()
>
> === modified file 'lib/lp/registry/model/distributionsourcepackage.py'
> --- lib/lp/registry/model/distributionsourcepackage.py 2015-02-26 11:34:47 +0000
> +++ lib/lp/registry/model/distributionsourcepackage.py 2015-03-04 19:09:38 +0000
> @@ -43,7 +43,6 @@
> HasBranchesMixin,
> HasMergeProposalsMixin,
> )
> -from lp.code.model.hasgitrepositories import HasGitRepositoriesMixin
> from lp.registry.interfaces.distributionsourcepackage import (
> IDistributionSourcePackage,
> )
> @@ -120,7 +119,7 @@
> HasBranchesMixin,
> HasCustomLanguageCodesMixin,
> HasMergeProposalsMixin,
> - HasDriversMixin, HasGitRepositoriesMixin):
> + HasDriversMixin):
> """This is a "Magic Distribution Source Package". It is not an
> SQLObject, but instead it represents a source package with a particular
> name in a particular distribution. You can then ask it all sorts of
>
> === modified file 'lib/lp/registry/model/person.py'
> --- lib/lp/registry/model/person.py 2015-02-26 14:39:37 +0000
> +++ lib/lp/registry/model/person.py 2015-03-04 19:09:38 +0000
> @@ -146,7 +146,6 @@
> HasMergeProposalsMixin,
> HasRequestedReviewsMixin,
> )
> -from lp.code.model.hasgitrepositories import HasGitRepositoriesMixin
> from lp.registry.enums import (
> EXCLUSIVE_TEAM_POLICY,
> INCLUSIVE_TEAM_POLICY,
> @@ -477,7 +476,7 @@
> class Person(
> SQLBase, HasBugsBase, HasSpecificationsMixin, HasTranslationImportsMixin,
> HasBranchesMixin, HasMergeProposalsMixin, HasRequestedReviewsMixin,
> - QuestionsPersonMixin, HasGitRepositoriesMixin):
> + QuestionsPersonMixin):
> """A Person."""
>
> implements(IPerson, IHasIcon, IHasLogo, IHasMugshot)
>
> === modified file 'lib/lp/registry/model/product.py'
> --- lib/lp/registry/model/product.py 2015-02-26 14:39:37 +0000
> +++ lib/lp/registry/model/product.py 2015-03-04 19:09:38 +0000
> @@ -124,7 +124,6 @@
> HasCodeImportsMixin,
> HasMergeProposalsMixin,
> )
> -from lp.code.model.hasgitrepositories import HasGitRepositoriesMixin
> from lp.code.model.sourcepackagerecipe import SourcePackageRecipe
> from lp.code.model.sourcepackagerecipedata import SourcePackageRecipeData
> from lp.registry.enums import (
> @@ -362,7 +361,7 @@
> OfficialBugTagTargetMixin, HasBranchesMixin,
> HasCustomLanguageCodesMixin, HasMergeProposalsMixin,
> HasCodeImportsMixin, InformationTypeMixin,
> - TranslationPolicyMixin, HasGitRepositoriesMixin):
> + TranslationPolicyMixin):
> """A Product."""
>
> implements(
>
> === modified file 'lib/lp/registry/tests/test_personmerge.py'
> --- lib/lp/registry/tests/test_personmerge.py 2015-02-23 19:47:01 +0000
> +++ lib/lp/registry/tests/test_personmerge.py 2015-03-04 19:09:38 +0000
> @@ -13,6 +13,7 @@
>
> from lp.app.enums import InformationType
> from lp.app.interfaces.launchpad import ILaunchpadCelebrities
> +from lp.code.interfaces.gitrepository import IGitRepositorySet
> from lp.registry.interfaces.accesspolicy import (
> IAccessArtifactGrantSource,
> IAccessPolicyGrantSource,
> @@ -279,7 +280,8 @@
> self._do_premerge(repository.owner, person)
> login_person(person)
> duplicate, person = self._do_merge(duplicate, person)
> - repositories = person.getGitRepositories()
> + repository_set = getUtility(IGitRepositorySet)
> + repositories = repository_set.getRepositories(None, person)
> self.assertEqual(1, repositories.count())
>
> def test_merge_with_duplicated_git_repositories(self):
> @@ -295,7 +297,9 @@
> self._do_premerge(duplicate, mergee)
> login_person(mergee)
> duplicate, mergee = self._do_merge(duplicate, mergee)
> - repositories = [r.name for r in mergee.getGitRepositories()]
> + repository_set = getUtility(IGitRepositorySet)
> + repositories = [
> + r.name for r in repository_set.getRepositories(None, mergee)]
> self.assertEqual(2, len(repositories))
> self.assertContentEqual([u'foo', u'foo-1'], repositories)
>
>
> === modified file 'lib/lp/registry/tests/test_product.py'
> --- lib/lp/registry/tests/test_product.py 2015-02-26 11:34:47 +0000
> +++ lib/lp/registry/tests/test_product.py 2015-03-04 19:09:38 +0000
> @@ -843,11 +843,11 @@
> 'bugtracker', 'canUserAlterAnswerContact', 'codehosting_usage',
> 'coming_sprints', 'commercial_subscription',
> 'commercial_subscription_is_due', 'createBug',
> - 'createCustomLanguageCode', 'createGitRepository',
> - 'custom_language_codes', 'date_next_suggest_packaging',
> - 'datecreated', 'description', 'development_focus',
> - 'development_focusID', 'direct_answer_contacts',
> - 'distrosourcepackages', 'downloadurl', 'driver',
> + 'createCustomLanguageCode', 'custom_language_codes',
> + 'date_next_suggest_packaging', 'datecreated', 'description',
> + 'development_focus', 'development_focusID',
> + 'direct_answer_contacts', 'distrosourcepackages',
> + 'downloadurl', 'driver',
> 'enable_bugfiling_duplicate_search', 'findReferencedOOPS',
> 'findSimilarFAQs', 'findSimilarQuestions', 'freshmeatproject',
> 'getAllowedBugInformationTypes',
> @@ -858,10 +858,10 @@
> 'getCustomLanguageCode', 'getDefaultBugInformationType',
> 'getDefaultSpecificationInformationType',
> 'getEffectiveTranslationPermission', 'getExternalBugTracker',
> - 'getFAQ', 'getFirstEntryToImport', 'getGitRepositories',
> - 'getLinkedBugWatches', 'getMergeProposals', 'getMilestone',
> - 'getMilestonesAndReleases', 'getQuestion', 'getQuestionLanguages',
> - 'getPackage', 'getRelease', 'getSeries', 'getSubscription',
> + 'getFAQ', 'getFirstEntryToImport', 'getLinkedBugWatches',
> + 'getMergeProposals', 'getMilestone', 'getMilestonesAndReleases',
> + 'getQuestion', 'getQuestionLanguages', 'getPackage', 'getRelease',
> + 'getSeries', 'getSubscription',
> 'getSubscriptions', 'getSupportedLanguages', 'getTimeline',
> 'getTopContributors', 'getTopContributorsGroupedByCategory',
> 'getTranslationGroups', 'getTranslationImportQueueEntries',
>
--
https://code.launchpad.net/~cjwatson/launchpad/git-simplify-hasgitrepositories/+merge/251809
Your team Launchpad code reviewers is subscribed to branch lp:launchpad.
References