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
1=== modified file 'lib/lp/archivepublisher/rosetta_translations.py'
2--- lib/lp/archivepublisher/rosetta_translations.py 2013-10-24 04:49:59 +0000
3+++ lib/lp/archivepublisher/rosetta_translations.py 2015-07-04 00:45:49 +0000
4@@ -1,4 +1,4 @@
5-# Copyright 2009-2013 Canonical Ltd. This software is licensed under the
6+# Copyright 2009-2015 Canonical Ltd. This software is licensed under the
7 # GNU Affero General Public License version 3 (see the file LICENSE).
8
9 """The processing of Rosetta translations tarballs.
10@@ -19,6 +19,7 @@
11 from lp.app.interfaces.launchpad import ILaunchpadCelebrities
12 from lp.archivepublisher.customupload import CustomUpload
13 from lp.archivepublisher.debversion import Version
14+from lp.registry.interfaces.distribution import IDistributionSet
15 from lp.registry.interfaces.pocket import PackagePublishingPocket
16 from lp.soyuz.interfaces.archive import MAIN_ARCHIVE_PURPOSES
17 from lp.soyuz.interfaces.packagetranslationsuploadjob import (
18@@ -26,6 +27,14 @@
19 )
20
21
22+# Translations uploaded to certain specialised PPAs are redirected to
23+# specialised distroseries instead.
24+REDIRECTED_PPAS = {
25+ "~ci-train-ppa-service/ubuntu/stable-phone-overlay":
26+ {"vivid": ("ubuntu-rtm", "15.04")},
27+ }
28+
29+
30 class RosettaTranslationsUpload(CustomUpload):
31 """Rosetta Translations tarball upload.
32
33@@ -45,17 +54,29 @@
34 else:
35 self.package_name = packageupload.package_name
36
37- # Ignore translations not with main distribution purposes.
38- if packageupload.archive.purpose not in MAIN_ARCHIVE_PURPOSES:
39+ # Ignore translations not with main distribution purposes and not in
40+ # redirected PPAs.
41+ distroseries = None
42+ if packageupload.archive.purpose in MAIN_ARCHIVE_PURPOSES:
43+ distroseries = packageupload.distroseries
44+ elif packageupload.archive.reference in REDIRECTED_PPAS:
45+ redirect = REDIRECTED_PPAS[packageupload.archive.reference]
46+ if packageupload.distroseries.name in redirect:
47+ distro_name, distroseries_name = redirect[
48+ packageupload.distroseries.name]
49+ distro = getUtility(IDistributionSet).getByName(distro_name)
50+ distroseries = distro[distroseries_name]
51+
52+ if distroseries is None:
53 if self.logger is not None:
54 self.logger.debug(
55 "Skipping translations since its purpose is not "
56- "in MAIN_ARCHIVE_PURPOSES.")
57+ "in MAIN_ARCHIVE_PURPOSES and the archive is not "
58+ "whitelisted.")
59 return
60
61 # If the distroseries is 11.10 (oneiric) or later, the valid names
62 # check is not required. (See bug 788685.)
63- distroseries = packageupload.distroseries
64 do_names_check = Version(distroseries.version) < Version('11.10')
65
66 latest_publication = self._findSourcePublication(packageupload)
67
68=== modified file 'lib/lp/archivepublisher/tests/test_rosetta_translations.py'
69--- lib/lp/archivepublisher/tests/test_rosetta_translations.py 2014-07-08 09:53:50 +0000
70+++ lib/lp/archivepublisher/tests/test_rosetta_translations.py 2015-07-04 00:45:49 +0000
71@@ -1,4 +1,4 @@
72-# Copyright 2013 Canonical Ltd. This software is licensed under the
73+# Copyright 2013-2015 Canonical Ltd. This software is licensed under the
74 # GNU Affero General Public License version 3 (see the file LICENSE).
75
76 """Test rosetta-translations custom uploads.
77@@ -7,15 +7,19 @@
78 high-level tests of rosetta-translations upload and queue manipulation.
79 """
80
81+from storm.expr import Desc
82 import transaction
83+from zope.component import getUtility
84 from zope.security.proxy import removeSecurityProxy
85-from zope.component import getUtility
86
87+from lp.app.errors import NotFoundError
88 from lp.archivepublisher.rosetta_translations import (
89 process_rosetta_translations,
90 RosettaTranslationsUpload,
91 )
92+from lp.registry.interfaces.distribution import IDistributionSet
93 from lp.registry.interfaces.pocket import PackagePublishingPocket
94+from lp.services.database.interfaces import IStore
95 from lp.services.tarfile_helpers import LaunchpadWriteTarFile
96 from lp.soyuz.enums import (
97 ArchivePurpose,
98@@ -29,7 +33,11 @@
99 from lp.soyuz.model.packagetranslationsuploadjob import (
100 PackageTranslationsUploadJob,
101 )
102-from lp.testing import TestCaseWithFactory, person_logged_in
103+from lp.soyuz.model.queue import PackageUpload
104+from lp.testing import (
105+ person_logged_in,
106+ TestCaseWithFactory,
107+ )
108 from lp.testing.layers import LaunchpadZopelessLayer
109
110
111@@ -138,14 +146,43 @@
112
113 job.run()
114
115- from storm.expr import Desc
116- from lp.soyuz.model.queue import PackageUpload
117- from lp.services.database.interfaces import IStore
118 upload = IStore(PackageUpload).find(PackageUpload).order_by(
119 Desc(PackageUpload.id)).first()
120
121 return spr, upload, libraryfilealias
122
123+ def ensureDistroSeries(self, distribution_name, distroseries_name):
124+ distribution = getUtility(IDistributionSet).getByName(
125+ distribution_name)
126+ if distribution is None:
127+ distribution = self.factory.makeDistribution(
128+ name=distribution_name)
129+ try:
130+ distroseries = distribution[distroseries_name]
131+ except NotFoundError:
132+ distroseries = self.factory.makeDistroSeries(
133+ distribution=distribution, name=distroseries_name)
134+ return distroseries
135+
136+ def makeJobElementsForPPA(self, owner_name, distribution_name,
137+ distroseries_name, archive_name):
138+ owner = self.factory.makePerson(name=owner_name)
139+ distroseries = self.ensureDistroSeries(
140+ distribution_name, distroseries_name)
141+ archive = self.factory.makeArchive(
142+ owner=owner, distribution=distroseries.distribution,
143+ name=archive_name, purpose=ArchivePurpose.PPA)
144+ sourcepackage_version = "3.8.2-1ubuntu1"
145+ filename = "foo_%s_i386_translations.tar.gz" % sourcepackage_version
146+ spph = self.makeAndPublishSourcePackage(
147+ sourcepackagename="foo", distroseries=distroseries,
148+ archive=archive)
149+ packageupload = removeSecurityProxy(self.factory.makePackageUpload(
150+ distroseries=distroseries, archive=archive))
151+ packageupload.addSource(spph.sourcepackagerelease)
152+ libraryfilealias = self.makeTranslationsLFA(filename=filename)
153+ return spph.sourcepackagerelease, packageupload, libraryfilealias
154+
155 def test_parsePath(self):
156 filename = "foobar_3.8.2-1ubuntu1_i386_translations.tar.gz"
157 parsed_path = RosettaTranslationsUpload.parsePath(filename)
158@@ -236,3 +273,40 @@
159 self.assertEqual(spr.upload_distroseries, jobs[0].distroseries)
160 self.assertEqual(libraryfilealias, jobs[0].libraryfilealias)
161 self.assertEqual(spr.sourcepackagename, jobs[0].sourcepackagename)
162+
163+ def test_correct_job_is_created_from_redirected_ppa(self):
164+ spr, packageupload, libraryfilealias = self.makeJobElementsForPPA(
165+ owner_name="ci-train-ppa-service", distribution_name="ubuntu",
166+ distroseries_name="vivid", archive_name="stable-phone-overlay")
167+ self.ensureDistroSeries("ubuntu-rtm", "15.04")
168+ transaction.commit()
169+ process_rosetta_translations(packageupload, libraryfilealias)
170+
171+ jobs = list(PackageTranslationsUploadJob.iterReady())
172+ self.assertEqual(1, len(jobs))
173+
174+ self.assertEqual("ubuntu-rtm 15.04", str(jobs[0].distroseries))
175+ self.assertEqual(libraryfilealias, jobs[0].libraryfilealias)
176+ self.assertEqual(spr.sourcepackagename, jobs[0].sourcepackagename)
177+
178+ def test_unredirected_series_in_redirected_ppa_is_skipped(self):
179+ spr, packageupload, libraryfilealias = self.makeJobElementsForPPA(
180+ owner_name="ci-train-ppa-service", distribution_name="ubuntu",
181+ distroseries_name="wily", archive_name="stable-phone-overlay")
182+ self.ensureDistroSeries("ubuntu-rtm", "15.04")
183+ transaction.commit()
184+ process_rosetta_translations(packageupload, libraryfilealias)
185+
186+ jobs = list(PackageTranslationsUploadJob.iterReady())
187+ self.assertEqual(0, len(jobs))
188+
189+ def test_unredirected_ppa_is_skipped(self):
190+ spr, packageupload, libraryfilealias = self.makeJobElementsForPPA(
191+ owner_name="ci-train-ppa-service", distribution_name="ubuntu",
192+ distroseries_name="vivid", archive_name="landing-001")
193+ self.ensureDistroSeries("ubuntu-rtm", "15.04")
194+ transaction.commit()
195+ process_rosetta_translations(packageupload, libraryfilealias)
196+
197+ jobs = list(PackageTranslationsUploadJob.iterReady())
198+ self.assertEqual(0, len(jobs))