Merge lp:~julian-edwards/launchpad/sync-needs-feature-flag into lp:launchpad

Proposed by Julian Edwards
Status: Merged
Approved by: Julian Edwards
Approved revision: no longer in the source branch.
Merged at revision: 13006
Proposed branch: lp:~julian-edwards/launchpad/sync-needs-feature-flag
Merge into: lp:launchpad
Diff against target: 130 lines (+36/-0)
3 files modified
lib/lp/registry/browser/distroseries.py (+3/-0)
lib/lp/registry/browser/tests/test_distroseries.py (+29/-0)
lib/lp/services/features/flags.py (+4/-0)
To merge this branch: bzr merge lp:~julian-edwards/launchpad/sync-needs-feature-flag
Reviewer Review Type Date Requested Status
Martin Pool (community) Needs Fixing
Julian Edwards (community) Approve
Review via email: mp+60398@code.launchpad.net

Commit message

[bug=779991] [r=julian-edwards][no-qa] Put derived distro syncs behind a feature flag as they are not quite ready for prime time.

Description of the change

= Summary =
Put derived distro syncs behind a feature flag as they are not quite ready for prime time.

== Tests ==
bin/test -cvv test_distroseries TestDistroSeriesLocalDifferencesFunctional

== Demo and Q/A ==

= Launchpad lint =

Checking for conflicts and issues in changed files.

Linting changed files:
  lib/lp/registry/browser/tests/test_distroseries.py
  lib/lp/services/features/flags.py
  lib/lp/registry/browser/distroseries.py

./lib/lp/registry/browser/distroseries.py
     844: E225 missing whitespace around operator
     848: E225 missing whitespace around operator
     852: E225 missing whitespace around operator
     856: E225 missing whitespace around operator
     864: E251 no spaces around keyword / parameter equals
     885: E251 no spaces around keyword / parameter equals

To post a comment you must log in.
Revision history for this message
Julian Edwards (julian-edwards) :
review: Approve
Revision history for this message
Martin Pool (mbp) wrote :

  review needsfixing

+ ('soyuz.derived-series-sync.enabled',

Those should be underscores not dashes, to be consistent with (most)
of the others.
Martin

review: Needs Fixing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/registry/browser/distroseries.py'
2--- lib/lp/registry/browser/distroseries.py 2011-05-05 20:19:07 +0000
3+++ lib/lp/registry/browser/distroseries.py 2011-05-09 15:52:54 +0000
4@@ -804,6 +804,9 @@
5 This method is used as a condition for the above sync action, as
6 well as directly in the template.
7 """
8+ if not getFeatureFlag('soyuz.derived_series_sync.enabled'):
9+ return False
10+
11 archive = self.context.main_archive
12 has_perm = (self.user is not None and (
13 archive.hasAnyPermission(self.user) or
14
15=== modified file 'lib/lp/registry/browser/tests/test_distroseries.py'
16--- lib/lp/registry/browser/tests/test_distroseries.py 2011-05-07 16:03:41 +0000
17+++ lib/lp/registry/browser/tests/test_distroseries.py 2011-05-09 15:52:54 +0000
18@@ -88,6 +88,13 @@
19 }))
20
21
22+def set_derived_series_sync_feature_flag(test_case):
23+ test_case.useFixture(FeatureFixture({
24+ u'soyuz.derived_series_sync.enabled': u'on',
25+ u'soyuz.derived-series-ui.enabled': u'on',
26+ }))
27+
28+
29 class TestDistroSeriesView(TestCaseWithFactory):
30 """Test the distroseries +index view."""
31
32@@ -1054,12 +1061,27 @@
33 # synced package.
34 derived_series = self._setUpDSD()[0]
35 person = self._setUpPersonWithPerm(derived_series)
36+ set_derived_series_sync_feature_flag(self)
37 with person_logged_in(person):
38 view = create_initialized_view(
39 derived_series, '+localpackagediffs')
40
41 self.assertTrue(view.canPerformSync())
42
43+ def test_canPerformSync_non_anon_feature_disabled(self):
44+ # Logged-in users with a permission on the destination archive
45+ # are not presented with options to perform syncs when the
46+ # feature flag is not enabled.
47+ self.assertIs(
48+ None, getFeatureFlag('soyuz.derived_series_sync.enabled'))
49+ derived_series = self._setUpDSD()[0]
50+ person = self._setUpPersonWithPerm(derived_series)
51+ with person_logged_in(person):
52+ view = create_initialized_view(
53+ derived_series, '+localpackagediffs')
54+
55+ self.assertFalse(view.canPerformSync())
56+
57 def _syncAndGetView(self, derived_series, person, sync_differences,
58 difference_type=None, view_name='+localpackagediffs'):
59 # A helper to get the POST'ed sync view.
60@@ -1076,6 +1098,7 @@
61 # An error is raised when a sync is requested without any selection.
62 derived_series = self._setUpDSD()[0]
63 person = self._setUpPersonWithPerm(derived_series)
64+ set_derived_series_sync_feature_flag(self)
65 view = self._syncAndGetView(derived_series, person, [])
66
67 self.assertEqual(1, len(view.errors))
68@@ -1086,6 +1109,7 @@
69 # An error is raised when an invalid difference is selected.
70 derived_series = self._setUpDSD('my-src-name')[0]
71 person = self._setUpPersonWithPerm(derived_series)
72+ set_derived_series_sync_feature_flag(self)
73 view = self._syncAndGetView(
74 derived_series, person, ['some-other-name'])
75
76@@ -1100,6 +1124,7 @@
77 # sync packages.
78 derived_series = self._setUpDSD('my-src-name')[0]
79 person = self._setUpPersonWithPerm(derived_series)
80+ set_derived_series_sync_feature_flag(self)
81 view = self._syncAndGetView(
82 derived_series, person, ['my-src-name'])
83
84@@ -1137,6 +1162,7 @@
85 'my-src-name')
86 person, another_component = self.makePersonWithComponentPermission(
87 derived_series.main_archive)
88+ set_derived_series_sync_feature_flag(self)
89 view = self._syncAndGetView(
90 derived_series, person, ['my-src-name'])
91
92@@ -1193,6 +1219,7 @@
93 self.assertIs(None, pubs)
94
95 # Now, sync the source from the parent using the form.
96+ set_derived_series_sync_feature_flag(self)
97 view = self._syncAndGetView(
98 derived_series, person, ['my-src-name'])
99
100@@ -1213,6 +1240,7 @@
101 'my-src-name', difference_type=missing, versions=versions)
102 person, another_component = self.makePersonWithComponentPermission(
103 derived_series.main_archive)
104+ set_derived_series_sync_feature_flag(self)
105 view = self._syncAndGetView(
106 derived_series, person, ['my-src-name'],
107 view_name='+missingpackages')
108@@ -1234,6 +1262,7 @@
109 derived_series, parent_series, sourcepackagename = self._setUpDSD(
110 'my-src-name', distribution=ubuntu, versions=versions)
111 ubuntu_security = getUtility(IPersonSet).getByName('ubuntu-security')
112+ set_derived_series_sync_feature_flag(self)
113 with person_logged_in(ubuntu_security):
114 self.assertTrue(
115 check_permission(
116
117=== modified file 'lib/lp/services/features/flags.py'
118--- lib/lp/services/features/flags.py 2011-05-07 20:29:57 +0000
119+++ lib/lp/services/features/flags.py 2011-05-09 15:52:54 +0000
120@@ -69,6 +69,10 @@
121 'boolean',
122 'Enables derivative distributions pages.',
123 ''),
124+ ('soyuz.derived-series-sync.enabled',
125+ 'boolean',
126+ 'Enables syncing of packages on derivative distributions pages.',
127+ ''),
128 ('soyuz.derived_series_jobs.enabled',
129 'boolean',
130 "Compute package differences for derived distributions.",