Merge lp:~cjwatson/launchpad/phone-overlay-translations into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 17602
Proposed branch: lp:~cjwatson/launchpad/phone-overlay-translations
Merge into: lp:launchpad
Diff against target: 198 lines (+106/-11)
2 files modified
lib/lp/archivepublisher/rosetta_translations.py (+26/-5)
lib/lp/archivepublisher/tests/test_rosetta_translations.py (+80/-6)
To merge this branch: bzr merge lp:~cjwatson/launchpad/phone-overlay-translations
Reviewer Review Type Date Requested Status
William Grant code Approve
Review via email: mp+263819@code.launchpad.net

Commit message

Redirect translation uploads to ~ci-train-ppa-service/ubuntu/stable-phone-overlay vivid to ubuntu-rtm 15.04.

Description of the change

Redirect translation uploads to ~ci-train-ppa-service/ubuntu/stable-phone-overlay vivid to ubuntu-rtm 15.04, as previously discussed and requested by the landing team.

This shouldn't be landed until the 15.04 series actually exists in ubuntu-rtm, of course, but we might as well agree on the approach and code in advance of that.

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

Ew, but it works.

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/archivepublisher/rosetta_translations.py'
--- lib/lp/archivepublisher/rosetta_translations.py 2013-10-24 04:49:59 +0000
+++ lib/lp/archivepublisher/rosetta_translations.py 2015-07-04 00:45:49 +0000
@@ -1,4 +1,4 @@
1# Copyright 2009-2013 Canonical Ltd. This software is licensed under the1# Copyright 2009-2015 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4"""The processing of Rosetta translations tarballs.4"""The processing of Rosetta translations tarballs.
@@ -19,6 +19,7 @@
19from lp.app.interfaces.launchpad import ILaunchpadCelebrities19from lp.app.interfaces.launchpad import ILaunchpadCelebrities
20from lp.archivepublisher.customupload import CustomUpload20from lp.archivepublisher.customupload import CustomUpload
21from lp.archivepublisher.debversion import Version21from lp.archivepublisher.debversion import Version
22from lp.registry.interfaces.distribution import IDistributionSet
22from lp.registry.interfaces.pocket import PackagePublishingPocket23from lp.registry.interfaces.pocket import PackagePublishingPocket
23from lp.soyuz.interfaces.archive import MAIN_ARCHIVE_PURPOSES24from lp.soyuz.interfaces.archive import MAIN_ARCHIVE_PURPOSES
24from lp.soyuz.interfaces.packagetranslationsuploadjob import (25from lp.soyuz.interfaces.packagetranslationsuploadjob import (
@@ -26,6 +27,14 @@
26 )27 )
2728
2829
30# Translations uploaded to certain specialised PPAs are redirected to
31# specialised distroseries instead.
32REDIRECTED_PPAS = {
33 "~ci-train-ppa-service/ubuntu/stable-phone-overlay":
34 {"vivid": ("ubuntu-rtm", "15.04")},
35 }
36
37
29class RosettaTranslationsUpload(CustomUpload):38class RosettaTranslationsUpload(CustomUpload):
30 """Rosetta Translations tarball upload.39 """Rosetta Translations tarball upload.
3140
@@ -45,17 +54,29 @@
45 else:54 else:
46 self.package_name = packageupload.package_name55 self.package_name = packageupload.package_name
4756
48 # Ignore translations not with main distribution purposes.57 # Ignore translations not with main distribution purposes and not in
49 if packageupload.archive.purpose not in MAIN_ARCHIVE_PURPOSES:58 # redirected PPAs.
59 distroseries = None
60 if packageupload.archive.purpose in MAIN_ARCHIVE_PURPOSES:
61 distroseries = packageupload.distroseries
62 elif packageupload.archive.reference in REDIRECTED_PPAS:
63 redirect = REDIRECTED_PPAS[packageupload.archive.reference]
64 if packageupload.distroseries.name in redirect:
65 distro_name, distroseries_name = redirect[
66 packageupload.distroseries.name]
67 distro = getUtility(IDistributionSet).getByName(distro_name)
68 distroseries = distro[distroseries_name]
69
70 if distroseries is None:
50 if self.logger is not None:71 if self.logger is not None:
51 self.logger.debug(72 self.logger.debug(
52 "Skipping translations since its purpose is not "73 "Skipping translations since its purpose is not "
53 "in MAIN_ARCHIVE_PURPOSES.")74 "in MAIN_ARCHIVE_PURPOSES and the archive is not "
75 "whitelisted.")
54 return76 return
5577
56 # If the distroseries is 11.10 (oneiric) or later, the valid names78 # If the distroseries is 11.10 (oneiric) or later, the valid names
57 # check is not required. (See bug 788685.)79 # check is not required. (See bug 788685.)
58 distroseries = packageupload.distroseries
59 do_names_check = Version(distroseries.version) < Version('11.10')80 do_names_check = Version(distroseries.version) < Version('11.10')
6081
61 latest_publication = self._findSourcePublication(packageupload)82 latest_publication = self._findSourcePublication(packageupload)
6283
=== modified file 'lib/lp/archivepublisher/tests/test_rosetta_translations.py'
--- lib/lp/archivepublisher/tests/test_rosetta_translations.py 2014-07-08 09:53:50 +0000
+++ lib/lp/archivepublisher/tests/test_rosetta_translations.py 2015-07-04 00:45:49 +0000
@@ -1,4 +1,4 @@
1# Copyright 2013 Canonical Ltd. This software is licensed under the1# Copyright 2013-2015 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).2# GNU Affero General Public License version 3 (see the file LICENSE).
33
4"""Test rosetta-translations custom uploads.4"""Test rosetta-translations custom uploads.
@@ -7,15 +7,19 @@
7high-level tests of rosetta-translations upload and queue manipulation.7high-level tests of rosetta-translations upload and queue manipulation.
8"""8"""
99
10from storm.expr import Desc
10import transaction11import transaction
12from zope.component import getUtility
11from zope.security.proxy import removeSecurityProxy13from zope.security.proxy import removeSecurityProxy
12from zope.component import getUtility
1314
15from lp.app.errors import NotFoundError
14from lp.archivepublisher.rosetta_translations import (16from lp.archivepublisher.rosetta_translations import (
15 process_rosetta_translations,17 process_rosetta_translations,
16 RosettaTranslationsUpload,18 RosettaTranslationsUpload,
17 )19 )
20from lp.registry.interfaces.distribution import IDistributionSet
18from lp.registry.interfaces.pocket import PackagePublishingPocket21from lp.registry.interfaces.pocket import PackagePublishingPocket
22from lp.services.database.interfaces import IStore
19from lp.services.tarfile_helpers import LaunchpadWriteTarFile23from lp.services.tarfile_helpers import LaunchpadWriteTarFile
20from lp.soyuz.enums import (24from lp.soyuz.enums import (
21 ArchivePurpose,25 ArchivePurpose,
@@ -29,7 +33,11 @@
29from lp.soyuz.model.packagetranslationsuploadjob import (33from lp.soyuz.model.packagetranslationsuploadjob import (
30 PackageTranslationsUploadJob,34 PackageTranslationsUploadJob,
31 )35 )
32from lp.testing import TestCaseWithFactory, person_logged_in36from lp.soyuz.model.queue import PackageUpload
37from lp.testing import (
38 person_logged_in,
39 TestCaseWithFactory,
40 )
33from lp.testing.layers import LaunchpadZopelessLayer41from lp.testing.layers import LaunchpadZopelessLayer
3442
3543
@@ -138,14 +146,43 @@
138146
139 job.run()147 job.run()
140148
141 from storm.expr import Desc
142 from lp.soyuz.model.queue import PackageUpload
143 from lp.services.database.interfaces import IStore
144 upload = IStore(PackageUpload).find(PackageUpload).order_by(149 upload = IStore(PackageUpload).find(PackageUpload).order_by(
145 Desc(PackageUpload.id)).first()150 Desc(PackageUpload.id)).first()
146151
147 return spr, upload, libraryfilealias152 return spr, upload, libraryfilealias
148153
154 def ensureDistroSeries(self, distribution_name, distroseries_name):
155 distribution = getUtility(IDistributionSet).getByName(
156 distribution_name)
157 if distribution is None:
158 distribution = self.factory.makeDistribution(
159 name=distribution_name)
160 try:
161 distroseries = distribution[distroseries_name]
162 except NotFoundError:
163 distroseries = self.factory.makeDistroSeries(
164 distribution=distribution, name=distroseries_name)
165 return distroseries
166
167 def makeJobElementsForPPA(self, owner_name, distribution_name,
168 distroseries_name, archive_name):
169 owner = self.factory.makePerson(name=owner_name)
170 distroseries = self.ensureDistroSeries(
171 distribution_name, distroseries_name)
172 archive = self.factory.makeArchive(
173 owner=owner, distribution=distroseries.distribution,
174 name=archive_name, purpose=ArchivePurpose.PPA)
175 sourcepackage_version = "3.8.2-1ubuntu1"
176 filename = "foo_%s_i386_translations.tar.gz" % sourcepackage_version
177 spph = self.makeAndPublishSourcePackage(
178 sourcepackagename="foo", distroseries=distroseries,
179 archive=archive)
180 packageupload = removeSecurityProxy(self.factory.makePackageUpload(
181 distroseries=distroseries, archive=archive))
182 packageupload.addSource(spph.sourcepackagerelease)
183 libraryfilealias = self.makeTranslationsLFA(filename=filename)
184 return spph.sourcepackagerelease, packageupload, libraryfilealias
185
149 def test_parsePath(self):186 def test_parsePath(self):
150 filename = "foobar_3.8.2-1ubuntu1_i386_translations.tar.gz"187 filename = "foobar_3.8.2-1ubuntu1_i386_translations.tar.gz"
151 parsed_path = RosettaTranslationsUpload.parsePath(filename)188 parsed_path = RosettaTranslationsUpload.parsePath(filename)
@@ -236,3 +273,40 @@
236 self.assertEqual(spr.upload_distroseries, jobs[0].distroseries)273 self.assertEqual(spr.upload_distroseries, jobs[0].distroseries)
237 self.assertEqual(libraryfilealias, jobs[0].libraryfilealias)274 self.assertEqual(libraryfilealias, jobs[0].libraryfilealias)
238 self.assertEqual(spr.sourcepackagename, jobs[0].sourcepackagename)275 self.assertEqual(spr.sourcepackagename, jobs[0].sourcepackagename)
276
277 def test_correct_job_is_created_from_redirected_ppa(self):
278 spr, packageupload, libraryfilealias = self.makeJobElementsForPPA(
279 owner_name="ci-train-ppa-service", distribution_name="ubuntu",
280 distroseries_name="vivid", archive_name="stable-phone-overlay")
281 self.ensureDistroSeries("ubuntu-rtm", "15.04")
282 transaction.commit()
283 process_rosetta_translations(packageupload, libraryfilealias)
284
285 jobs = list(PackageTranslationsUploadJob.iterReady())
286 self.assertEqual(1, len(jobs))
287
288 self.assertEqual("ubuntu-rtm 15.04", str(jobs[0].distroseries))
289 self.assertEqual(libraryfilealias, jobs[0].libraryfilealias)
290 self.assertEqual(spr.sourcepackagename, jobs[0].sourcepackagename)
291
292 def test_unredirected_series_in_redirected_ppa_is_skipped(self):
293 spr, packageupload, libraryfilealias = self.makeJobElementsForPPA(
294 owner_name="ci-train-ppa-service", distribution_name="ubuntu",
295 distroseries_name="wily", archive_name="stable-phone-overlay")
296 self.ensureDistroSeries("ubuntu-rtm", "15.04")
297 transaction.commit()
298 process_rosetta_translations(packageupload, libraryfilealias)
299
300 jobs = list(PackageTranslationsUploadJob.iterReady())
301 self.assertEqual(0, len(jobs))
302
303 def test_unredirected_ppa_is_skipped(self):
304 spr, packageupload, libraryfilealias = self.makeJobElementsForPPA(
305 owner_name="ci-train-ppa-service", distribution_name="ubuntu",
306 distroseries_name="vivid", archive_name="landing-001")
307 self.ensureDistroSeries("ubuntu-rtm", "15.04")
308 transaction.commit()
309 process_rosetta_translations(packageupload, libraryfilealias)
310
311 jobs = list(PackageTranslationsUploadJob.iterReady())
312 self.assertEqual(0, len(jobs))