mirror of
https://git.launchpad.net/ubuntu-dev-tools
synced 2025-03-12 23:51:08 +00:00
ubuntutools: add --status param to pull-pkg
Allow specifying what package statuses should be searched for. By default search only for Pending and Published, unless a specific version number is being searched for.
This commit is contained in:
parent
0f61836b10
commit
7c097b19ba
@ -142,6 +142,7 @@ class SourcePackage(object):
|
||||
quiet = kwargs.get('quiet', False)
|
||||
series = kwargs.get('series')
|
||||
pocket = kwargs.get('pocket')
|
||||
status = kwargs.get('status')
|
||||
verify_signature = kwargs.get('verify_signature', False)
|
||||
|
||||
assert (package is not None or dscfile is not None)
|
||||
@ -154,6 +155,7 @@ class SourcePackage(object):
|
||||
self.quiet = quiet
|
||||
self._series = series
|
||||
self._pocket = pocket
|
||||
self._status = status
|
||||
self._dsc_source = dscfile
|
||||
self._verify_signature = verify_signature
|
||||
|
||||
@ -201,6 +203,8 @@ class SourcePackage(object):
|
||||
# We always want to search all series, if not specified
|
||||
params['search_all_series'] = True
|
||||
|
||||
params['status'] = self._status
|
||||
|
||||
try:
|
||||
self._spph = archive.getSourcePackage(self.source,
|
||||
wrapper=self.spph_class,
|
||||
|
@ -38,7 +38,8 @@ from lazr.restfulclient.resource import Entry
|
||||
from ubuntutools.version import Version
|
||||
from ubuntutools.lp import (service, api_version)
|
||||
from ubuntutools.misc import (host_architecture,
|
||||
DEFAULT_POCKETS, POCKETS)
|
||||
DEFAULT_POCKETS, POCKETS,
|
||||
DEFAULT_STATUSES, STATUSES)
|
||||
from ubuntutools.lp.udtexceptions import (AlreadyLoggedInError,
|
||||
ArchiveNotFoundException,
|
||||
ArchSeriesNotFoundException,
|
||||
@ -373,6 +374,11 @@ class Archive(BaseWrapper):
|
||||
specific version, it defaults to all pockets. Pocket strings must
|
||||
be capitalized.
|
||||
|
||||
status may be a string or a list. If no version is provided, it
|
||||
defaults to only 'Pending' and 'Published'; if searching for a
|
||||
specific version, it defaults to all statuses. Status strings must
|
||||
be capitalized.
|
||||
|
||||
wrapper is the class to return an instance of; defaults to
|
||||
SourcePackagePublishingHistory.
|
||||
|
||||
@ -380,7 +386,6 @@ class Archive(BaseWrapper):
|
||||
search only the latest devel series, and if True all series
|
||||
will be searched, in reverse order, starting with the latest
|
||||
devel series. Defaults to False.
|
||||
status is optional, to restrict search to a given status only.
|
||||
|
||||
If the requested source package doesn't exist a
|
||||
PackageNotFoundException is raised.
|
||||
@ -413,6 +418,11 @@ class Archive(BaseWrapper):
|
||||
specific version, it defaults to all pockets. Pocket strings must
|
||||
be capitalized.
|
||||
|
||||
status may be a string or a list. If no version is provided, it
|
||||
defaults to only 'Pending' and 'Published'; if searching for a
|
||||
specific version, it defaults to all statuses. Status strings must
|
||||
be capitalized.
|
||||
|
||||
wrapper is the class to return an instance of; defaults to
|
||||
BinaryPackagePublishingHistory.
|
||||
|
||||
@ -420,7 +430,6 @@ class Archive(BaseWrapper):
|
||||
search only the latest devel series, and if True all series
|
||||
will be searched, in reverse order, starting with the latest
|
||||
devel series. Defaults to False.
|
||||
status is optional, to restrict search to a given status only.
|
||||
|
||||
If the requested binary package doesn't exist a
|
||||
PackageNotFoundException is raised.
|
||||
@ -460,6 +469,21 @@ class Archive(BaseWrapper):
|
||||
if p not in POCKETS:
|
||||
raise PocketDoesNotExistError("Pocket '%s' does not exist." % p)
|
||||
|
||||
if not status:
|
||||
if version:
|
||||
# check ALL statuses if specific version
|
||||
statuses = STATUSES
|
||||
else:
|
||||
# otherwise, only check 'Pending' and 'Published'
|
||||
statuses = DEFAULT_STATUSES
|
||||
elif isinstance(status, str):
|
||||
statuses = (status,)
|
||||
else:
|
||||
statuses = tuple(status)
|
||||
|
||||
for s in statuses:
|
||||
if s not in STATUSES:
|
||||
raise ValueError("Status '%s' is not valid." % s)
|
||||
|
||||
dist = Distribution(self.distribution_link)
|
||||
|
||||
@ -499,7 +523,7 @@ class Archive(BaseWrapper):
|
||||
if archtag is None:
|
||||
archtag = host_architecture()
|
||||
|
||||
index = (name, getattr(series, 'name', None), archtag, pockets, status, version)
|
||||
index = (name, getattr(series, 'name', None), archtag, pockets, statuses, version)
|
||||
|
||||
if index in cache:
|
||||
return cache[index]
|
||||
@ -517,6 +541,8 @@ class Archive(BaseWrapper):
|
||||
if len(pockets) == 1:
|
||||
params['pocket'] = pockets[0]
|
||||
|
||||
if len(statuses) == 1:
|
||||
params['status'] = statuses[0]
|
||||
|
||||
if version:
|
||||
params['version'] = version
|
||||
@ -540,6 +566,9 @@ class Archive(BaseWrapper):
|
||||
err_msg = 'pocket %s not in (%s)' % (record.pocket, ','.join(pockets))
|
||||
Logger.debug(skipmsg + err_msg)
|
||||
continue
|
||||
if record.status not in statuses:
|
||||
err_msg = 'status %s not in (%s)' % (record.status, ','.join(statuses))
|
||||
Logger.debug(skipmsg + err_msg)
|
||||
continue
|
||||
r = wrapper(record)
|
||||
if binary and archtag and archtag != r.arch:
|
||||
@ -587,6 +616,10 @@ class Archive(BaseWrapper):
|
||||
msg += "-%s" % pockets[0]
|
||||
elif len(pockets) != len(POCKETS):
|
||||
msg += " for pockets " + ', '.join(pockets)
|
||||
if len(statuses) == 1:
|
||||
msg += " with status %s" % statuses[0]
|
||||
elif len(statuses) != len(STATUSES):
|
||||
msg += " with status in " + ', '.join(statuses)
|
||||
if version_with_epoch:
|
||||
msg += " (did you forget the epoch? try %s)" % version_with_epoch
|
||||
raise PackageNotFoundException(msg)
|
||||
|
@ -35,6 +35,9 @@ from ubuntutools.lp.udtexceptions import PocketDoesNotExistError
|
||||
DEFAULT_POCKETS = ('Release', 'Security', 'Updates', 'Proposed')
|
||||
POCKETS = DEFAULT_POCKETS + ('Backports',)
|
||||
|
||||
DEFAULT_STATUSES = ('Pending', 'Published')
|
||||
STATUSES = DEFAULT_STATUSES + ('Superseded', 'Deleted', 'Obsolete')
|
||||
|
||||
_system_distribution_chain = []
|
||||
|
||||
|
||||
|
@ -40,7 +40,7 @@ from ubuntutools.lp.udtexceptions import (SeriesNotFoundException,
|
||||
PocketDoesNotExistError,
|
||||
InvalidDistroValueError)
|
||||
from ubuntutools.logger import Logger
|
||||
from ubuntutools.misc import (split_release_pocket, host_architecture)
|
||||
from ubuntutools.misc import (split_release_pocket, host_architecture, STATUSES)
|
||||
|
||||
PULL_SOURCE = 'source'
|
||||
PULL_DEBS = 'debs'
|
||||
@ -114,7 +114,11 @@ class PullPkg(object):
|
||||
help_default_arch = ("Get binary packages for arch")
|
||||
help_default_arch += ("(default: %s)" % self._default_arch)
|
||||
|
||||
parser = ArgumentParser()
|
||||
epilog = ("Note on --status: if a version is provided, all status types "
|
||||
"will be searched; if no version is provided, by default only "
|
||||
"'Pending' and 'Published' status will be searched.")
|
||||
|
||||
parser = ArgumentParser(epilog=epilog)
|
||||
parser.add_argument('-v', '--verbose', action='store_true',
|
||||
help="Print verbose/debug messages")
|
||||
parser.add_argument('-d', '--download-only', action='store_true',
|
||||
@ -125,6 +129,8 @@ class PullPkg(object):
|
||||
help="Don't read config files or environment variables")
|
||||
parser.add_argument('--no-verify-signature', action='store_true',
|
||||
help="Don't fail if dsc signature can't be verified")
|
||||
parser.add_argument('-s', '--status', action='append', default=[],
|
||||
help="Search for packages with specific status(es)")
|
||||
parser.add_argument('-a', '--arch', default=self._default_arch,
|
||||
help=help_default_arch)
|
||||
parser.add_argument('-p', '--pull', default=self._default_pull,
|
||||
@ -265,6 +271,7 @@ class PullPkg(object):
|
||||
assert 'download_only' in options
|
||||
assert 'no_conf' in options
|
||||
assert 'no_verify_signature' in options
|
||||
assert 'status' in options
|
||||
# type string
|
||||
assert 'pull' in options
|
||||
assert 'distro' in options
|
||||
@ -316,6 +323,8 @@ class PullPkg(object):
|
||||
|
||||
params['verify_signature'] = not options['no_verify_signature']
|
||||
|
||||
params['status'] = STATUSES if 'all' in options['status'] else options['status']
|
||||
|
||||
return (pull, distro, params)
|
||||
|
||||
def pull(self, args=None):
|
||||
|
Loading…
x
Reference in New Issue
Block a user