Merge lp:~cjwatson/launchpad/das-filter-initialize-ds into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 19062
Proposed branch: lp:~cjwatson/launchpad/das-filter-initialize-ds
Merge into: lp:launchpad
Prerequisite: lp:~cjwatson/launchpad/das-filter-honour
Diff against target: 142 lines (+78/-4)
3 files modified
database/schema/security.cfg (+1/-1)
lib/lp/soyuz/scripts/initialize_distroseries.py (+25/-3)
lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py (+52/-0)
To merge this branch: bzr merge lp:~cjwatson/launchpad/das-filter-initialize-ds
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+372264@code.launchpad.net

Commit message

Copy forward DistroArchSeriesFilter rows when initialising a new distro series.

To post a comment you must log in.
Revision history for this message
William Grant (wgrant) :
review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'database/schema/security.cfg'
--- database/schema/security.cfg 2019-09-27 11:42:24 +0000
+++ database/schema/security.cfg 2019-09-27 12:36:02 +0000
@@ -1064,7 +1064,7 @@
1064public.distributionsourcepackage = SELECT, INSERT1064public.distributionsourcepackage = SELECT, INSERT
1065public.distributionsourcepackagecache = SELECT, INSERT, UPDATE1065public.distributionsourcepackagecache = SELECT, INSERT, UPDATE
1066public.distroarchseries = SELECT, INSERT1066public.distroarchseries = SELECT, INSERT
1067public.distroarchseriesfilter = SELECT1067public.distroarchseriesfilter = SELECT, INSERT
1068public.distroseries = SELECT, UPDATE1068public.distroseries = SELECT, UPDATE
1069public.distroseriesdifference = SELECT, INSERT, UPDATE1069public.distroseriesdifference = SELECT, INSERT, UPDATE
1070public.distroseriesparent = SELECT, INSERT, UPDATE1070public.distroseriesparent = SELECT, INSERT, UPDATE
10711071
=== modified file 'lib/lp/soyuz/scripts/initialize_distroseries.py'
--- lib/lp/soyuz/scripts/initialize_distroseries.py 2019-04-16 10:29:22 +0000
+++ lib/lp/soyuz/scripts/initialize_distroseries.py 2019-09-27 12:36:02 +0000
@@ -693,8 +693,8 @@
693 Packageset,693 Packageset,
694 Packageset.distroseries_id.is_in(self.derivation_parent_ids))694 Packageset.distroseries_id.is_in(self.derivation_parent_ids))
695 parent_to_child = {}695 parent_to_child = {}
696 # Create the packagesets and any archivepermissions if we're not696 # Create the packagesets and any archivepermissions and filters if
697 # copying cross-distribution.697 # we're not copying cross-distribution.
698 parent_distro_ids = [698 parent_distro_ids = [
699 parent.distribution.id for parent in self.derivation_parents]699 parent.distribution.id for parent in self.derivation_parents]
700 for parent_ps in packagesets:700 for parent_ps in packagesets:
@@ -718,7 +718,7 @@
718 new_owner, distroseries=self.distroseries,718 new_owner, distroseries=self.distroseries,
719 related_set=parent_ps)719 related_set=parent_ps)
720 parent_to_child[parent_ps] = child_ps720 parent_to_child[parent_ps] = child_ps
721 # Copy archivepermissions if we're not copying721 # Copy archivepermissions and filters if we're not copying
722 # cross-distribution.722 # cross-distribution.
723 if (self.distroseries.distribution ==723 if (self.distroseries.distribution ==
724 parent_ps.distroseries.distribution):724 parent_ps.distroseries.distribution):
@@ -730,6 +730,28 @@
730 """ % sqlvalues(730 """ % sqlvalues(
731 self.distroseries.main_archive, child_ps.id,731 self.distroseries.main_archive, child_ps.id,
732 parent_ps.id))732 parent_ps.id))
733 self._store.execute("""
734 INSERT INTO DistroArchSeriesFilter
735 (distroarchseries, packageset, sense,
736 creator, date_created, date_last_modified)
737 SELECT
738 newdas.id AS distroarchseries,
739 %s AS packageset, dasf.sense, dasf.creator,
740 CURRENT_TIMESTAMP AT TIME ZONE 'UTC',
741 CURRENT_TIMESTAMP AT TIME ZONE 'UTC'
742 FROM DistroArchSeriesFilter AS dasf
743 LEFT JOIN DistroArchSeries AS olddas ON
744 dasf.distroarchseries = olddas.id
745 LEFT JOIN DistroArchSeries AS newdas ON
746 newdas.distroseries = %s
747 AND newdas.architecturetag = olddas.architecturetag
748 WHERE
749 dasf.packageset = %s
750 AND olddas.distroseries = %s
751 AND newdas.id IS NOT NULL
752 """ % sqlvalues(
753 child_ps.id, self.distroseries.id,
754 parent_ps.id, parent_ps.distroseries.id))
733 # Copy the relations between sets, and the contents.755 # Copy the relations between sets, and the contents.
734 for old_series_ps, new_series_ps in parent_to_child.items():756 for old_series_ps, new_series_ps in parent_to_child.items():
735 old_series_sets = old_series_ps.setsIncluded(757 old_series_sets = old_series_ps.setsIncluded(
736758
=== modified file 'lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py'
--- lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py 2019-04-16 10:29:22 +0000
+++ lib/lp/soyuz/scripts/tests/test_initialize_distroseries.py 2019-09-27 12:36:02 +0000
@@ -5,6 +5,7 @@
55
6__metaclass__ = type6__metaclass__ = type
77
8from testtools.matchers import MatchesStructure
8import transaction9import transaction
9from zope.component import getUtility10from zope.component import getUtility
1011
@@ -22,6 +23,7 @@
22from lp.services.database.interfaces import IStore23from lp.services.database.interfaces import IStore
23from lp.soyuz.enums import (24from lp.soyuz.enums import (
24 ArchivePurpose,25 ArchivePurpose,
26 DistroArchSeriesFilterSense,
25 IndexCompressionType,27 IndexCompressionType,
26 PackageUploadStatus,28 PackageUploadStatus,
27 SourcePackageFormat,29 SourcePackageFormat,
@@ -829,6 +831,56 @@
829 releaser, pocket=PackagePublishingPocket.RELEASE,831 releaser, pocket=PackagePublishingPocket.RELEASE,
830 distroseries=series))832 distroseries=series))
831833
834 def test_intra_distro_filter_copying(self):
835 # If child.distribution equals parent.distribution, we also copy any
836 # DAS filters.
837 parent, parent_das1 = self.setupParent(proc='386', arch_tag='i386')
838 _, parent_das2 = self.setupParent(
839 parent=parent, proc='amd64', arch_tag='amd64')
840 _, parent_das3 = self.setupParent(
841 parent=parent, proc='hppa', arch_tag='hppa')
842 parent_dasf1 = self.factory.makeDistroArchSeriesFilter(
843 distroarchseries=parent_das1,
844 sense=DistroArchSeriesFilterSense.INCLUDE)
845 parent_dasf2 = self.factory.makeDistroArchSeriesFilter(
846 distroarchseries=parent_das2,
847 sense=DistroArchSeriesFilterSense.EXCLUDE)
848 # Create child series in the same distribution.
849 child = self.factory.makeDistroSeries(
850 distribution=parent.distribution, previous_series=parent)
851 self._fullInitialize([parent], child=child)
852
853 # The child series has corresponding packagesets and DAS filters.
854 parent_set1 = parent_dasf1.packageset
855 parent_set2 = parent_dasf2.packageset
856 child_set1 = getUtility(IPackagesetSet).getByName(
857 child, parent_set1.name)
858 child_set2 = getUtility(IPackagesetSet).getByName(
859 child, parent_set2.name)
860 self.assertEqual(parent_set1.description, child_set1.description)
861 self.assertEqual(parent_set2.description, child_set2.description)
862 self.assertEqual(parent_set1, child_set1.relatedSets().one())
863 self.assertEqual(parent_set2, child_set2.relatedSets().one())
864 self.assertThat(
865 child['i386'].getFilter(), MatchesStructure.byEquality(
866 packageset=child_set1,
867 sense=DistroArchSeriesFilterSense.INCLUDE,
868 creator=parent_dasf1.creator))
869 self.assertThat(
870 child['amd64'].getFilter(), MatchesStructure.byEquality(
871 packageset=child_set2,
872 sense=DistroArchSeriesFilterSense.EXCLUDE,
873 creator=parent_dasf2.creator))
874 self.assertIsNone(child['hppa'].getFilter())
875
876 def test_no_cross_distro_filter_copying(self):
877 # No cross-distro DAS filter copying should happen.
878 parent, parent_das = self.setupParent()
879 self.factory.makeDistroArchSeriesFilter(distroarchseries=parent_das)
880 child = self._fullInitialize([parent])
881 for child_das in child.architectures:
882 self.assertIsNone(child_das.getFilter())
883
832 def test_packageset_owner_preserved_within_distro(self):884 def test_packageset_owner_preserved_within_distro(self):
833 # When initializing a new series within a distro, the copied885 # When initializing a new series within a distro, the copied
834 # packagesets have ownership preserved.886 # packagesets have ownership preserved.