mirror of
https://git.launchpad.net/ubuntu-dev-tools
synced 2025-03-16 01:21:07 +00:00
archive: use UCA Project to find valid UCA release names
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
This commit is contained in:
parent
04ae04e17b
commit
db181f4aa6
@ -44,7 +44,7 @@ import debian.deb822
|
|||||||
from contextlib import closing
|
from contextlib import closing
|
||||||
|
|
||||||
from ubuntutools.config import UDTConfig
|
from ubuntutools.config import UDTConfig
|
||||||
from ubuntutools.lp.lpapicache import (Launchpad, Distribution, PersonTeam,
|
from ubuntutools.lp.lpapicache import (Launchpad, Distribution, PersonTeam, Project,
|
||||||
SourcePackagePublishingHistory)
|
SourcePackagePublishingHistory)
|
||||||
from ubuntutools.lp.udtexceptions import (PackageNotFoundException,
|
from ubuntutools.lp.udtexceptions import (PackageNotFoundException,
|
||||||
SeriesNotFoundException,
|
SeriesNotFoundException,
|
||||||
@ -633,8 +633,9 @@ class PersonalPackageArchiveSourcePackage(UbuntuSourcePackage):
|
|||||||
|
|
||||||
class UbuntuCloudArchiveSourcePackage(PersonalPackageArchiveSourcePackage):
|
class UbuntuCloudArchiveSourcePackage(PersonalPackageArchiveSourcePackage):
|
||||||
"Download / unpack an Ubuntu Cloud Archive source package"
|
"Download / unpack an Ubuntu Cloud Archive source package"
|
||||||
_ppateam = 'ubuntu-cloud-archive'
|
TEAM = 'ubuntu-cloud-archive'
|
||||||
_ppas = None
|
PROJECT = 'cloud-archive'
|
||||||
|
VALID_POCKETS = ['updates', 'proposed', 'staging']
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
series = kwargs.pop('series', None)
|
series = kwargs.pop('series', None)
|
||||||
@ -649,24 +650,69 @@ class UbuntuCloudArchiveSourcePackage(PersonalPackageArchiveSourcePackage):
|
|||||||
self.masters = ["http://ubuntu-cloud.archive.canonical.com/ubuntu/"]
|
self.masters = ["http://ubuntu-cloud.archive.canonical.com/ubuntu/"]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def getDevelSeries(cls):
|
@functools.lru_cache
|
||||||
return cls.ppas()[0]
|
def getUbuntuCloudArchiveProject(cls):
|
||||||
|
return Project(cls.PROJECT)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def getUbuntuCloudArchiveReleaseNames(cls):
|
||||||
|
"""Get list of the main UCA release names
|
||||||
|
|
||||||
|
The list will be sorted in descending chronological order.
|
||||||
|
"""
|
||||||
|
return [s.name for s in cls.getUbuntuCloudArchiveProject().series]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def ppas(cls):
|
def ppas(cls):
|
||||||
if not cls._ppas:
|
"""DEPRECATED: use getUbuntuCloudArchiveReleaseNames()"""
|
||||||
ppas = PersonTeam.fetch(cls._ppateam).getPPAs().keys()
|
return cls.getUbuntuCloudArchiveReleaseNames()
|
||||||
ppas = filter(lambda p: p.endswith('-staging'), ppas)
|
|
||||||
ppas = map(lambda p: p.rsplit('-', 1)[0], ppas)
|
|
||||||
ppas = sorted(ppas, reverse=True)
|
|
||||||
if not ppas:
|
|
||||||
raise SeriesNotFoundException('Internal Error: No UCA series found...?')
|
|
||||||
cls._ppas = ppas
|
|
||||||
return list(cls._ppas)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def isValidRelease(cls, release):
|
def isValidRelease(cls, release):
|
||||||
return release in cls.ppas()
|
return release in cls.getUbuntuCloudArchiveReleaseNames()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def getDevelSeries(cls):
|
||||||
|
"""Get the current UCA devel release name"""
|
||||||
|
return cls.getUbuntuCloudArchiveReleaseNames()[0]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@functools.lru_cache
|
||||||
|
def getUbuntuCloudArchiveTeam(cls):
|
||||||
|
return PersonTeam.fetch(cls.TEAM)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@functools.lru_cache
|
||||||
|
def getUbuntuCloudArchivePPAs(cls, release=None, pocket=None):
|
||||||
|
""" Get sorted list of UCA ppa Archive objects
|
||||||
|
|
||||||
|
If release and/or pocket are specified, the list will be
|
||||||
|
filtered to return only matching ppa(s).
|
||||||
|
|
||||||
|
This list will only contain ppas relevant to UCA releases;
|
||||||
|
it will not contain 'other' ppas, e.g. 'cloud-tools-next'.
|
||||||
|
"""
|
||||||
|
if not any((release, pocket)):
|
||||||
|
all_ppas = cls.getUbuntuCloudArchiveTeam().getPPAs()
|
||||||
|
ppas = []
|
||||||
|
for r in cls.getUbuntuCloudArchiveReleaseNames():
|
||||||
|
for p in cls.VALID_POCKETS:
|
||||||
|
name = f"{r}-{p}"
|
||||||
|
if name in all_ppas:
|
||||||
|
ppas.append(all_ppas[name])
|
||||||
|
return ppas
|
||||||
|
|
||||||
|
# Use recursive call without params to get the lru-cached list of ppas returned above
|
||||||
|
ppas = cls.getUbuntuCloudArchivePPAs()
|
||||||
|
if release:
|
||||||
|
ppas = list(filter(lambda p: p.name.partition('-')[0] == release, ppas))
|
||||||
|
if pocket:
|
||||||
|
ppas = list(filter(lambda p: p.name.partition('-')[2] == pocket, ppas))
|
||||||
|
if not ppas:
|
||||||
|
rname = release or '*'
|
||||||
|
pname = pocket or '*'
|
||||||
|
raise SeriesNotFoundException(f"UCA release '{rname}-{pname}' not found")
|
||||||
|
return ppas
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def lp_spph(self):
|
def lp_spph(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user