Merge lp:~cjwatson/launchpad/remove-unembargo-package into lp:launchpad
- remove-unembargo-package
- Merge into devel
Proposed by
Colin Watson
Status: | Merged |
---|---|
Approved by: | Steve Kowalik |
Approved revision: | no longer in the source branch. |
Merged at revision: | 15506 |
Proposed branch: | lp:~cjwatson/launchpad/remove-unembargo-package |
Merge into: | lp:launchpad |
Diff against target: |
341 lines (+48/-208) 3 files modified
lib/lp/soyuz/scripts/packagecopier.py (+0/-72) lib/lp/soyuz/scripts/tests/test_copypackage.py (+48/-117) scripts/ftpmaster-tools/unembargo-package.py (+0/-19) |
To merge this branch: | bzr merge lp:~cjwatson/launchpad/remove-unembargo-package |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Steve Kowalik (community) | code | Approve | |
Review via email: mp+112044@code.launchpad.net |
Commit message
Remove unembargo-
Description of the change
Following https:/
I've QAed the new method on dogfood, but I still need to do a smoke-test on production with the security team, currently planned for Wednesday. I won't land this at least until that's done.
To post a comment you must log in.
Revision history for this message
Steve Kowalik (stevenk) : | # |
review:
Approve
(code)
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'lib/lp/soyuz/scripts/packagecopier.py' | |||
2 | --- lib/lp/soyuz/scripts/packagecopier.py 2012-06-26 00:46:41 +0000 | |||
3 | +++ lib/lp/soyuz/scripts/packagecopier.py 2012-06-26 09:53:26 +0000 | |||
4 | @@ -7,7 +7,6 @@ | |||
5 | 7 | 7 | ||
6 | 8 | __all__ = [ | 8 | __all__ = [ |
7 | 9 | 'PackageCopier', | 9 | 'PackageCopier', |
8 | 10 | 'UnembargoSecurityPackage', | ||
9 | 11 | 'CopyChecker', | 10 | 'CopyChecker', |
10 | 12 | 'check_copy_permissions', | 11 | 'check_copy_permissions', |
11 | 13 | 'do_copy', | 12 | 'do_copy', |
12 | @@ -1080,74 +1079,3 @@ | |||
13 | 1080 | raise SoyuzScriptError( | 1079 | raise SoyuzScriptError( |
14 | 1081 | "Can not sync between the same locations: '%s' to '%s'" % ( | 1080 | "Can not sync between the same locations: '%s' to '%s'" % ( |
15 | 1082 | self.location, self.destination)) | 1081 | self.location, self.destination)) |
16 | 1083 | |||
17 | 1084 | |||
18 | 1085 | class UnembargoSecurityPackage(PackageCopier): | ||
19 | 1086 | """`SoyuzScript` that unembargoes security packages and their builds. | ||
20 | 1087 | |||
21 | 1088 | Security builds are done in the ubuntu-security private PPA. | ||
22 | 1089 | When they are ready to be unembargoed, this script will copy | ||
23 | 1090 | them from the PPA to the Ubuntu archive and re-upload any files | ||
24 | 1091 | from the restricted librarian into the non-restricted one. | ||
25 | 1092 | |||
26 | 1093 | This script simply wraps up PackageCopier with some nicer options. | ||
27 | 1094 | |||
28 | 1095 | An assumption is made, to reduce the number of command line options, | ||
29 | 1096 | that packages are always copied between the same distroseries. The user | ||
30 | 1097 | can, however, select which target pocket to unembargo into. This is | ||
31 | 1098 | useful to the security team when there are major version upgrades | ||
32 | 1099 | and they want to stage it through -proposed first for testing. | ||
33 | 1100 | """ | ||
34 | 1101 | |||
35 | 1102 | usage = ("%prog [-d <distribution>] [-s <suite>] [--ppa <private ppa>] " | ||
36 | 1103 | "<package(s)>") | ||
37 | 1104 | description = ("Unembargo packages in a private PPA by copying to the " | ||
38 | 1105 | "specified location and re-uploading any files to the " | ||
39 | 1106 | "unrestricted librarian.") | ||
40 | 1107 | |||
41 | 1108 | def add_my_options(self): | ||
42 | 1109 | """Add -d, -s, dry-run and confirmation options.""" | ||
43 | 1110 | SoyuzScript.add_distro_options(self) | ||
44 | 1111 | SoyuzScript.add_transaction_options(self) | ||
45 | 1112 | |||
46 | 1113 | self.parser.add_option( | ||
47 | 1114 | "-p", "--ppa", dest="archive_owner_name", | ||
48 | 1115 | default="ubuntu-security", action="store", | ||
49 | 1116 | help="Private PPA owner's name.") | ||
50 | 1117 | |||
51 | 1118 | self.parser.add_option( | ||
52 | 1119 | "--ppa-name", dest="archive_name", | ||
53 | 1120 | default="ppa", action="store", | ||
54 | 1121 | help="Private PPA name.") | ||
55 | 1122 | |||
56 | 1123 | def setUpCopierOptions(self): | ||
57 | 1124 | """Set up options needed by PackageCopier.""" | ||
58 | 1125 | # Set up the options for PackageCopier that are needed in addition | ||
59 | 1126 | # to the ones that this class sets up. | ||
60 | 1127 | self.options.to_partner = False | ||
61 | 1128 | self.options.to_ppa = False | ||
62 | 1129 | self.options.partner_archive = None | ||
63 | 1130 | self.options.include_binaries = True | ||
64 | 1131 | self.options.unembargo = True | ||
65 | 1132 | self.options.to_distribution = self.options.distribution_name | ||
66 | 1133 | # The PackageCopier parent class uses options.suite as the source | ||
67 | 1134 | # suite, so we need to override it to remove the pocket since PPAs | ||
68 | 1135 | # are pocket-less. | ||
69 | 1136 | self.options.to_suite = self.options.suite | ||
70 | 1137 | self.options.suite = self.options.suite.split("-")[0] | ||
71 | 1138 | self.options.version = None | ||
72 | 1139 | self.options.component = None | ||
73 | 1140 | |||
74 | 1141 | def mainTask(self): | ||
75 | 1142 | """Invoke PackageCopier to copy the package(s) and re-upload files.""" | ||
76 | 1143 | self.setUpCopierOptions() | ||
77 | 1144 | |||
78 | 1145 | # Generate the location for PackageCopier after overriding the | ||
79 | 1146 | # options. | ||
80 | 1147 | self.setupLocation() | ||
81 | 1148 | |||
82 | 1149 | # Invoke the package copy operation. | ||
83 | 1150 | copies = PackageCopier.mainTask(self) | ||
84 | 1151 | |||
85 | 1152 | # Return this for the benefit of the test suite. | ||
86 | 1153 | return copies | ||
87 | 1154 | 1082 | ||
88 | === modified file 'lib/lp/soyuz/scripts/tests/test_copypackage.py' | |||
89 | --- lib/lp/soyuz/scripts/tests/test_copypackage.py 2012-06-25 08:35:33 +0000 | |||
90 | +++ lib/lp/soyuz/scripts/tests/test_copypackage.py 2012-06-26 09:53:26 +0000 | |||
91 | @@ -74,7 +74,6 @@ | |||
92 | 74 | do_copy, | 74 | do_copy, |
93 | 75 | PackageCopier, | 75 | PackageCopier, |
94 | 76 | re_upload_file, | 76 | re_upload_file, |
95 | 77 | UnembargoSecurityPackage, | ||
96 | 78 | update_files_privacy, | 77 | update_files_privacy, |
97 | 79 | ) | 78 | ) |
98 | 80 | from lp.soyuz.tests.test_publishing import SoyuzTestPublisher | 79 | from lp.soyuz.tests.test_publishing import SoyuzTestPublisher |
99 | @@ -2915,95 +2914,32 @@ | |||
100 | 2915 | distribution=ubuntu) | 2914 | distribution=ubuntu) |
101 | 2916 | 2915 | ||
102 | 2917 | # Create a source and binary private publication. | 2916 | # Create a source and binary private publication. |
103 | 2918 | hoary = ubuntu.getSeries('hoary') | ||
104 | 2919 | hoary.status = SeriesStatus.CURRENT | ||
105 | 2920 | test_publisher = self.getTestPublisher(hoary) | ||
106 | 2921 | ppa_source = test_publisher.getPubSource( | ||
107 | 2922 | archive=joe_private_ppa, version='1.0', distroseries=hoary) | ||
108 | 2923 | test_publisher.getPubBinaries( | ||
109 | 2924 | pub_source=ppa_source, distroseries=hoary) | ||
110 | 2925 | self.layer.txn.commit() | ||
111 | 2926 | |||
112 | 2927 | # Run the copy package script storing the logged information. | ||
113 | 2928 | copy_helper = self.getCopier( | ||
114 | 2929 | sourcename='foo', from_ppa='joe', | ||
115 | 2930 | include_binaries=True, from_suite='hoary', | ||
116 | 2931 | to_suite='hoary-security', unembargo=True) | ||
117 | 2932 | copied = copy_helper.mainTask() | ||
118 | 2933 | |||
119 | 2934 | # The private files are copied via a direct-copy request. | ||
120 | 2935 | self.assertEqual(len(copied), 3) | ||
121 | 2936 | self.assertEqual( | ||
122 | 2937 | ['INFO FROM: joe: hoary-RELEASE', | ||
123 | 2938 | 'INFO TO: Primary Archive for Ubuntu Linux: hoary-SECURITY', | ||
124 | 2939 | 'INFO Copy candidates:', | ||
125 | 2940 | 'INFO \tfoo 1.0 in hoary', | ||
126 | 2941 | 'INFO \tfoo-bin 1.0 in hoary hppa', | ||
127 | 2942 | 'INFO \tfoo-bin 1.0 in hoary i386', | ||
128 | 2943 | 'INFO Re-uploaded foo_1.0.dsc to librarian', | ||
129 | 2944 | 'INFO Re-uploaded foo_1.0_source.changes to librarian', | ||
130 | 2945 | 'INFO Re-uploaded foo-bin_1.0_all.deb to librarian', | ||
131 | 2946 | 'INFO Re-uploaded foo-bin_1.0_i386.changes to librarian', | ||
132 | 2947 | 'INFO Re-uploaded ' | ||
133 | 2948 | 'buildlog_ubuntu-hoary-i386.foo_1.0_FULLYBUILT.txt.gz to ' | ||
134 | 2949 | 'librarian', | ||
135 | 2950 | 'INFO Copied:', | ||
136 | 2951 | 'INFO \tfoo 1.0 in hoary', | ||
137 | 2952 | 'INFO \tfoo-bin 1.0 in hoary hppa', | ||
138 | 2953 | 'INFO \tfoo-bin 1.0 in hoary i386', | ||
139 | 2954 | 'INFO 3 packages successfully copied.', | ||
140 | 2955 | ], | ||
141 | 2956 | copy_helper.logger.getLogBuffer().splitlines()) | ||
142 | 2957 | |||
143 | 2958 | def testUnembargoing(self): | ||
144 | 2959 | """Test UnembargoSecurityPackage, which wraps PackagerCopier.""" | ||
145 | 2960 | # Set up a private PPA. | ||
146 | 2961 | joe = self.factory.makePerson(name="joe") | ||
147 | 2962 | ubuntu = getUtility(IDistributionSet).getByName('ubuntu') | ||
148 | 2963 | joe_private_ppa = self.factory.makeArchive( | ||
149 | 2964 | owner=joe, name='ppa', private=True, | ||
150 | 2965 | distribution=ubuntu) | ||
151 | 2966 | |||
152 | 2967 | # Setup a SoyuzTestPublisher object, so we can create publication | ||
153 | 2968 | # to be unembargoed. | ||
154 | 2969 | warty = ubuntu.getSeries('warty') | 2917 | warty = ubuntu.getSeries('warty') |
155 | 2970 | test_publisher = self.getTestPublisher(warty) | 2918 | test_publisher = self.getTestPublisher(warty) |
156 | 2971 | |||
157 | 2972 | # Create a source and binary pair to be unembargoed from the PPA. | ||
158 | 2973 | ppa_source = test_publisher.getPubSource( | 2919 | ppa_source = test_publisher.getPubSource( |
161 | 2974 | archive=joe_private_ppa, version='1.1', | 2920 | archive=joe_private_ppa, version='1.1', distroseries=warty, |
160 | 2975 | distroseries=warty, | ||
162 | 2976 | status=PackagePublishingStatus.PUBLISHED) | 2921 | status=PackagePublishingStatus.PUBLISHED) |
163 | 2977 | other_source = test_publisher.getPubSource( | 2922 | other_source = test_publisher.getPubSource( |
164 | 2978 | archive=joe_private_ppa, version='1.1', | 2923 | archive=joe_private_ppa, version='1.1', |
165 | 2979 | sourcename="sourcefordiff", distroseries=warty, | 2924 | sourcename="sourcefordiff", distroseries=warty, |
166 | 2980 | status=PackagePublishingStatus.PUBLISHED) | 2925 | status=PackagePublishingStatus.PUBLISHED) |
167 | 2981 | test_publisher.addFakeChroots(warty) | ||
168 | 2982 | ppa_binaries = test_publisher.getPubBinaries( | 2926 | ppa_binaries = test_publisher.getPubBinaries( |
169 | 2983 | pub_source=ppa_source, distroseries=warty, | 2927 | pub_source=ppa_source, distroseries=warty, |
170 | 2984 | status=PackagePublishingStatus.PUBLISHED) | 2928 | status=PackagePublishingStatus.PUBLISHED) |
171 | 2929 | self.layer.txn.commit() | ||
172 | 2985 | 2930 | ||
173 | 2986 | # Give the new source a private package diff. | 2931 | # Give the new source a private package diff. |
175 | 2987 | sourcepackagerelease = other_source.sourcepackagerelease | 2932 | spr = other_source.sourcepackagerelease |
176 | 2988 | diff_file = test_publisher.addMockFile("diff_file", restricted=True) | 2933 | diff_file = test_publisher.addMockFile("diff_file", restricted=True) |
179 | 2989 | package_diff = sourcepackagerelease.requestDiffTo( | 2934 | package_diff = spr.requestDiffTo(joe, ppa_source.sourcepackagerelease) |
178 | 2990 | joe, ppa_source.sourcepackagerelease) | ||
180 | 2991 | package_diff.diff_content = diff_file | 2935 | package_diff.diff_content = diff_file |
181 | 2992 | 2936 | ||
182 | 2993 | # Prepare a *restricted* buildlog file for the Build instances. | ||
183 | 2994 | fake_buildlog = test_publisher.addMockFile( | ||
184 | 2995 | 'foo_source.buildlog', restricted=True) | ||
185 | 2996 | |||
186 | 2997 | for build in ppa_source.getBuilds(): | ||
187 | 2998 | build.log = fake_buildlog | ||
188 | 2999 | |||
189 | 3000 | # Add a restricted changelog file. | 2937 | # Add a restricted changelog file. |
193 | 3001 | fake_changelog = test_publisher.addMockFile( | 2938 | changelog = test_publisher.addMockFile("changelog", restricted=True) |
194 | 3002 | 'changelog', restricted=True) | 2939 | ppa_source.sourcepackagerelease.changelog = changelog |
192 | 3003 | ppa_source.sourcepackagerelease.changelog = fake_changelog | ||
195 | 3004 | 2940 | ||
198 | 3005 | # Create ancestry environment in the primary archive, so we can | 2941 | # Create ancestry environment in the primary archive, so we can test |
199 | 3006 | # test unembargoed overrides. | 2942 | # unembargoed overrides. |
200 | 3007 | ancestry_source = test_publisher.getPubSource( | 2943 | ancestry_source = test_publisher.getPubSource( |
201 | 3008 | version='1.0', distroseries=warty, | 2944 | version='1.0', distroseries=warty, |
202 | 3009 | status=PackagePublishingStatus.PUBLISHED) | 2945 | status=PackagePublishingStatus.PUBLISHED) |
203 | @@ -3011,7 +2947,7 @@ | |||
204 | 3011 | pub_source=ancestry_source, distroseries=warty, | 2947 | pub_source=ancestry_source, distroseries=warty, |
205 | 3012 | status=PackagePublishingStatus.SUPERSEDED) | 2948 | status=PackagePublishingStatus.SUPERSEDED) |
206 | 3013 | 2949 | ||
208 | 3014 | # Override the published ancestry source to 'universe' | 2950 | # Override the published ancestry source to 'universe'. |
209 | 3015 | universe = getUtility(IComponentSet)['universe'] | 2951 | universe = getUtility(IComponentSet)['universe'] |
210 | 3016 | ancestry_source.component = universe | 2952 | ancestry_source.component = universe |
211 | 3017 | 2953 | ||
212 | @@ -3021,22 +2957,38 @@ | |||
213 | 3021 | 2957 | ||
214 | 3022 | self.layer.txn.commit() | 2958 | self.layer.txn.commit() |
215 | 3023 | 2959 | ||
232 | 3024 | # Now we can invoke the unembargo script and check its results. | 2960 | # Run the copy package script storing the logged information. |
233 | 3025 | test_args = [ | 2961 | copy_helper = self.getCopier( |
234 | 3026 | "--ppa", "joe", | 2962 | sourcename='foo', from_ppa='joe', |
235 | 3027 | "--ppa-name", "ppa", | 2963 | include_binaries=True, from_suite='warty', |
236 | 3028 | "-s", "%s" % ppa_source.distroseries.name + "-security", | 2964 | to_suite='warty-security', unembargo=True) |
237 | 3029 | "foo", | 2965 | copied = copy_helper.mainTask() |
238 | 3030 | ] | 2966 | |
239 | 3031 | 2967 | # The private files are copied via a direct-copy request. | |
240 | 3032 | script = UnembargoSecurityPackage( | 2968 | self.checkCopies(copied, copy_helper.destination.archive, 3) |
241 | 3033 | name='unembargo', test_args=test_args) | 2969 | self.assertEqual( |
242 | 3034 | script.logger = BufferLogger() | 2970 | ['INFO FROM: joe: warty-RELEASE', |
243 | 3035 | 2971 | 'INFO TO: Primary Archive for Ubuntu Linux: warty-SECURITY', | |
244 | 3036 | copied = script.mainTask() | 2972 | 'INFO Copy candidates:', |
245 | 3037 | 2973 | 'INFO \tfoo 1.1 in warty', | |
246 | 3038 | # Check the results. | 2974 | 'INFO \tfoo-bin 1.1 in warty hppa', |
247 | 3039 | self.checkCopies(copied, script.destination.archive, 3) | 2975 | 'INFO \tfoo-bin 1.1 in warty i386', |
248 | 2976 | 'INFO Re-uploaded foo_1.1.dsc to librarian', | ||
249 | 2977 | 'INFO Re-uploaded diff_file to librarian', | ||
250 | 2978 | 'INFO Re-uploaded foo_1.1_source.changes to librarian', | ||
251 | 2979 | 'INFO Re-uploaded changelog to librarian', | ||
252 | 2980 | 'INFO Re-uploaded foo-bin_1.1_all.deb to librarian', | ||
253 | 2981 | 'INFO Re-uploaded foo-bin_1.1_i386.changes to librarian', | ||
254 | 2982 | 'INFO Re-uploaded ' | ||
255 | 2983 | 'buildlog_ubuntu-warty-i386.foo_1.1_FULLYBUILT.txt.gz to ' | ||
256 | 2984 | 'librarian', | ||
257 | 2985 | 'INFO Copied:', | ||
258 | 2986 | 'INFO \tfoo 1.1 in warty', | ||
259 | 2987 | 'INFO \tfoo-bin 1.1 in warty hppa', | ||
260 | 2988 | 'INFO \tfoo-bin 1.1 in warty i386', | ||
261 | 2989 | 'INFO 3 packages successfully copied.', | ||
262 | 2990 | ], | ||
263 | 2991 | copy_helper.logger.getLogBuffer().splitlines()) | ||
264 | 3040 | 2992 | ||
265 | 3041 | # Check that the librarian files are all unrestricted now. | 2993 | # Check that the librarian files are all unrestricted now. |
266 | 3042 | # We must commit the txn for SQL object to see the change. | 2994 | # We must commit the txn for SQL object to see the change. |
267 | @@ -3071,43 +3023,22 @@ | |||
268 | 3071 | published.pocket.title, "Security", | 3023 | published.pocket.title, "Security", |
269 | 3072 | "Expected Security pocket, got %s" % published.pocket.title) | 3024 | "Expected Security pocket, got %s" % published.pocket.title) |
270 | 3073 | 3025 | ||
273 | 3074 | def testUnembargoSuite(self): | 3026 | def testUnembargoStableReleasePocketForbidden(self): |
274 | 3075 | """Test that passing different suites works as expected.""" | 3027 | """Unembargoing into release pocket of stable series is forbidden.""" |
275 | 3076 | # Set up a private PPA. | 3028 | # Set up a private PPA. |
276 | 3077 | joe = self.factory.makePerson(name="joe") | 3029 | joe = self.factory.makePerson(name="joe") |
277 | 3078 | ubuntu = getUtility(IDistributionSet).getByName('ubuntu') | 3030 | ubuntu = getUtility(IDistributionSet).getByName('ubuntu') |
278 | 3079 | self.factory.makeArchive( | 3031 | self.factory.makeArchive( |
279 | 3080 | owner=joe, name='ppa', private=True, distribution=ubuntu) | 3032 | owner=joe, name='ppa', private=True, distribution=ubuntu) |
280 | 3081 | 3033 | ||
306 | 3082 | test_args = [ | 3034 | copy_helper = self.getCopier( |
307 | 3083 | "--ppa", "joe", | 3035 | sourcename='foo', from_ppa='joe', |
308 | 3084 | "-s", "warty-backports", | 3036 | include_binaries=True, from_suite='warty', |
309 | 3085 | "foo", | 3037 | to_suite='warty', unembargo=True) |
285 | 3086 | ] | ||
286 | 3087 | |||
287 | 3088 | script = UnembargoSecurityPackage( | ||
288 | 3089 | name='unembargo', test_args=test_args) | ||
289 | 3090 | script.setUpCopierOptions() | ||
290 | 3091 | script.setupLocation() | ||
291 | 3092 | script.setupDestination() | ||
292 | 3093 | script.destination.distroseries.status = SeriesStatus.CURRENT | ||
293 | 3094 | script.checkPrivacyOptions() | ||
294 | 3095 | self.assertEqual("warty-backports", script.options.to_suite) | ||
295 | 3096 | |||
296 | 3097 | # Change the suite to one with the release pocket. It should copy | ||
297 | 3098 | # nothing as you're not allowed to unembargo into the release | ||
298 | 3099 | # pocket of a stable series. | ||
299 | 3100 | test_args[3] = "warty" | ||
300 | 3101 | script = UnembargoSecurityPackage( | ||
301 | 3102 | name='unembargo', test_args=test_args) | ||
302 | 3103 | script.logger = BufferLogger() | ||
303 | 3104 | script.setUpCopierOptions() | ||
304 | 3105 | script.setupLocation() | ||
305 | 3106 | script.setupDestination() | ||
310 | 3107 | self.assertRaisesWithContent( | 3038 | self.assertRaisesWithContent( |
311 | 3108 | SoyuzScriptError, | 3039 | SoyuzScriptError, |
312 | 3109 | "Can't unembargo into suite 'warty' of a distribution.", | 3040 | "Can't unembargo into suite 'warty' of a distribution.", |
314 | 3110 | script.checkPrivacyOptions) | 3041 | copy_helper.mainTask) |
315 | 3111 | 3042 | ||
316 | 3112 | def testCopyClosesBugs(self): | 3043 | def testCopyClosesBugs(self): |
317 | 3113 | """Copying packages closes bugs. | 3044 | """Copying packages closes bugs. |
318 | 3114 | 3045 | ||
319 | === removed file 'scripts/ftpmaster-tools/unembargo-package.py' | |||
320 | --- scripts/ftpmaster-tools/unembargo-package.py 2011-12-29 05:29:36 +0000 | |||
321 | +++ scripts/ftpmaster-tools/unembargo-package.py 1970-01-01 00:00:00 +0000 | |||
322 | @@ -1,19 +0,0 @@ | |||
323 | 1 | #!/usr/bin/python -S | ||
324 | 2 | # | ||
325 | 3 | # Copyright 2009 Canonical Ltd. This software is licensed under the | ||
326 | 4 | # GNU Affero General Public License version 3 (see the file LICENSE). | ||
327 | 5 | |||
328 | 6 | # pylint: disable-msg=W0403 | ||
329 | 7 | """Unembargo a package from the security private PPA.""" | ||
330 | 8 | |||
331 | 9 | import _pythonpath | ||
332 | 10 | |||
333 | 11 | from lp.services.config import config | ||
334 | 12 | from lp.soyuz.scripts.packagecopier import UnembargoSecurityPackage | ||
335 | 13 | |||
336 | 14 | |||
337 | 15 | if __name__ == '__main__': | ||
338 | 16 | script = UnembargoSecurityPackage( | ||
339 | 17 | 'unembargo-package', dbuser=config.archivepublisher.dbuser) | ||
340 | 18 | script.lock_and_run() | ||
341 | 19 |