Merge lp:~al-maisan/launchpad/relsets-463195 into lp:launchpad/db-devel

Proposed by Muharem Hrnjadovic
Status: Merged
Merged at revision: not available
Proposed branch: lp:~al-maisan/launchpad/relsets-463195
Merge into: lp:launchpad/db-devel
Diff against target: 143 lines
4 files modified
lib/canonical/launchpad/interfaces/_schema_circular_imports.py (+2/-0)
lib/lp/soyuz/interfaces/packageset.py (+10/-0)
lib/lp/soyuz/model/packageset.py (+9/-0)
lib/lp/soyuz/tests/test_packageset.py (+68/-2)
To merge this branch: bzr merge lp:~al-maisan/launchpad/relsets-463195
Reviewer Review Type Date Requested Status
Abel Deuring (community) code Approve
Review via email: mp+14169@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Muharem Hrnjadovic (al-maisan) wrote :

Hello there!

The branch at hand enables a user to find related package sets. The added IPackageset.relatedSets() method returns (for a given package set P) a collection of package sets to which P is related by way of a shared package set group.

Tests to run:

    bin/test -vvt packageset

Revision history for this message
Abel Deuring (adeuring) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/canonical/launchpad/interfaces/_schema_circular_imports.py'
2--- lib/canonical/launchpad/interfaces/_schema_circular_imports.py 2009-10-13 14:46:17 +0000
3+++ lib/canonical/launchpad/interfaces/_schema_circular_imports.py 2009-10-29 14:30:26 +0000
4@@ -277,6 +277,8 @@
5 IPackageset, 'getSourcesSharedBy', 'other_package_set', IPackageset)
6 patch_plain_parameter_type(
7 IPackageset, 'getSourcesNotSharedBy', 'other_package_set', IPackageset)
8+patch_collection_return_type(
9+ IPackageset, 'relatedSets', IPackageset)
10
11 # IPackageUpload
12 IPackageUpload['pocket'].vocabulary = PackagePublishingPocket
13
14=== modified file 'lib/lp/soyuz/interfaces/packageset.py'
15--- lib/lp/soyuz/interfaces/packageset.py 2009-10-27 23:40:24 +0000
16+++ lib/lp/soyuz/interfaces/packageset.py 2009-10-29 14:30:26 +0000
17@@ -217,6 +217,16 @@
18 names.
19 """
20
21+ @operation_returns_collection_of(Interface)
22+ @export_read_operation()
23+ def relatedSets():
24+ """Get all package sets related to this one.
25+
26+ Return all package sets that are related to this one.
27+
28+ :return: A (potentially empty) sequence of `IPackageset` instances.
29+ """
30+
31
32 class IPackagesetEdit(Interface):
33 """A writeable interface for package sets."""
34
35=== modified file 'lib/lp/soyuz/model/packageset.py'
36--- lib/lp/soyuz/model/packageset.py 2009-10-27 15:42:04 +0000
37+++ lib/lp/soyuz/model/packageset.py 2009-10-29 14:30:26 +0000
38@@ -295,6 +295,15 @@
39 clauses = (Packageset, In(Packageset.name, names))
40 self._api_add_or_remove(clauses, self._removeDirectSuccessors)
41
42+ def relatedSets(self):
43+ """See `IPackageset`."""
44+ store = IStore(Packageset)
45+ result_set = store.find(
46+ Packageset,
47+ Packageset.packagesetgroup == self.packagesetgroup,
48+ Packageset.id != self.id)
49+ return _order_result_set(result_set)
50+
51
52 class PackagesetSet:
53 """See `IPackagesetSet`."""
54
55=== modified file 'lib/lp/soyuz/tests/test_packageset.py'
56--- lib/lp/soyuz/tests/test_packageset.py 2009-10-27 22:27:52 +0000
57+++ lib/lp/soyuz/tests/test_packageset.py 2009-10-29 14:30:26 +0000
58@@ -14,13 +14,13 @@
59 DuplicatePackagesetName, IPackagesetSet)
60
61
62-class TestPackagesetSetNew(TestCaseWithFactory):
63+class TestPackagesetSet(TestCaseWithFactory):
64
65 layer = LaunchpadZopelessLayer
66
67 def setUp(self):
68 """Setup a distribution with multiple distroseries."""
69- super(TestPackagesetSetNew, self).setUp()
70+ super(TestPackagesetSet, self).setUp()
71 self.distribution = getUtility(IDistributionSet).getByName(
72 'ubuntu')
73 self.distroseries_current = self.distribution.currentseries
74@@ -119,3 +119,69 @@
75 pset_found = getUtility(IPackagesetSet).getByName(
76 'kernel', distroseries=self.distroseries_experimental)
77 self.assertEqual(pset2, pset_found)
78+
79+
80+class TestPackageset(TestCaseWithFactory):
81+
82+ layer = LaunchpadZopelessLayer
83+
84+ def setUp(self):
85+ """Setup a distribution with multiple distroseries."""
86+ super(TestPackageset, self).setUp()
87+ self.distribution = getUtility(IDistributionSet).getByName(
88+ 'ubuntu')
89+ self.distroseries_current = self.distribution.currentseries
90+ self.distroseries_experimental = self.factory.makeDistroRelease(
91+ distribution = self.distribution, name="experimental",
92+ status=DistroSeriesStatus.EXPERIMENTAL)
93+ self.distroseries_experimental2 = self.factory.makeDistroRelease(
94+ distribution = self.distribution, name="experimental2",
95+ status=DistroSeriesStatus.EXPERIMENTAL)
96+
97+ self.person1 = self.factory.makePerson(
98+ name='hacker', displayname=u'Happy Hacker')
99+
100+ self.packageset_set = getUtility(IPackagesetSet)
101+
102+ def test_no_related_sets(self):
103+ # If the package set is the only one in the group the result set
104+ # returned by relatedSets() is empty.
105+ packageset = self.packageset_set.new(
106+ u'kernel', u'Contains all OS kernel packages', self.person1)
107+
108+ self.failUnlessEqual(packageset.relatedSets().count(), 0)
109+
110+ def test_related_set_found(self):
111+ # Creating a new package set while specifying a `related_set` should
112+ # have the effect that the former ends up in the same group as the
113+ # latter.
114+
115+ # The original package set.
116+ pset1 = self.packageset_set.new(
117+ u'kernel', u'Contains all OS kernel packages', self.person1)
118+
119+ # A related package set.
120+ pset2 = self.packageset_set.new(
121+ u'kernel', u'A related package set.', self.person1,
122+ distroseries=self.distroseries_experimental, related_set=pset1)
123+ self.assertEqual(pset1.packagesetgroup, pset2.packagesetgroup)
124+
125+ # An unrelated package set with the same name.
126+ pset3 = self.packageset_set.new(
127+ u'kernel', u'Unrelated package set.', self.person1,
128+ distroseries=self.distroseries_experimental2)
129+ self.assertNotEqual(pset2.packagesetgroup, pset3.packagesetgroup)
130+
131+ # Make sure 'pset2' is related to 'pset1'.
132+ related = pset1.relatedSets()
133+ self.assertEqual(related.count(), 1)
134+ self.assertEqual(related[0], pset2)
135+
136+ # And the other way around ..
137+ related = pset2.relatedSets()
138+ self.assertEqual(related.count(), 1)
139+ self.assertEqual(related[0], pset1)
140+
141+ # Unsurprisingly, the unrelated package set is not associated with any
142+ # other package set.
143+ self.failUnlessEqual(pset3.relatedSets().count(), 0)

Subscribers

People subscribed via source and target branches

to status/vote changes: