43
43
'"ubuntu/partner" for a partner or copy archive.')
46
def setup_location(options, default_pocket="Release"):
46
def setup_location(args, default_pocket="Release"):
48
if getattr(options, "archive", False):
48
if getattr(args, "archive", False):
49
49
# Try parsing an archive reference first.
50
archive = options.launchpad.archives.getByReference(
51
reference=options.archive)
50
archive = args.launchpad.archives.getByReference(
51
reference=args.archive)
52
52
if archive is None:
53
raise AssertionError("No such archive: %s" % options.archive)
53
raise AssertionError("No such archive: %s" % args.archive)
55
55
# Otherwise derive the archive from the deprecated
56
56
# -d/--ppa/--ppa-name/--partner options.
57
if isinstance(options.distribution, Entry):
58
distro = options.distribution
57
if isinstance(args.distribution, Entry):
58
distro = args.distribution
60
distro = options.launchpad.distributions[options.distribution]
61
if getattr(options, "partner", False):
60
distro = args.launchpad.distributions[args.distribution]
61
if getattr(args, "partner", False):
63
63
archive for archive in distro.archives
64
64
if archive.name == "partner"][0]
65
elif getattr(options, "ppa", None):
66
archive = options.launchpad.people[options.ppa].getPPAByName(
67
distribution=distro, name=options.ppa_name)
65
elif getattr(args, "ppa", None):
66
archive = args.launchpad.people[args.ppa].getPPAByName(
67
distribution=distro, name=args.ppa_name)
69
69
archive = distro.main_archive
71
options.archive = archive
72
options.distribution = archive.distribution
74
if "-" in options.suite:
75
options.series, options.pocket = options.suite.rsplit("-", 1)
76
options.pocket = options.pocket.title()
77
if options.pocket not in known_pockets:
78
options.series = options.suite
79
options.pocket = "Release"
71
args.archive = archive
72
args.distribution = archive.distribution
75
args.series, args.pocket = args.suite.rsplit("-", 1)
76
args.pocket = args.pocket.title()
77
if args.pocket not in known_pockets:
78
args.series = args.suite
79
args.pocket = "Release"
81
options.series = options.suite
82
options.pocket = "Release"
83
options.series = options.distribution.getSeries(
84
name_or_version=options.series)
81
args.series = args.suite
82
args.pocket = "Release"
83
args.series = args.distribution.getSeries(name_or_version=args.series)
86
options.series = options.distribution.current_series
87
options.pocket = default_pocket
88
if options.pocket == "Release":
89
options.suite = options.series.name
85
args.series = args.distribution.current_series
86
args.pocket = default_pocket
87
if args.pocket == "Release":
88
args.suite = args.series.name
91
options.suite = "%s-%s" % (
92
options.series.name, options.pocket.lower())
90
args.suite = "%s-%s" % (args.series.name, args.pocket.lower())
94
if getattr(options, "architecture", None) is not None:
95
options.architectures = [options.series.getDistroArchSeries(
96
archtag=options.architecture)]
97
elif getattr(options, "architectures", None) is not None:
98
options.architectures = sorted(
99
[a for a in options.series.architectures
100
if a.architecture_tag in options.architectures],
92
if getattr(args, "architecture", None) is not None:
93
args.architectures = [args.series.getDistroArchSeries(
94
archtag=args.architecture)]
95
elif getattr(args, "architectures", None) is not None:
96
args.architectures = sorted(
97
[a for a in args.series.architectures
98
if a.architecture_tag in args.architectures],
101
99
key=attrgetter("architecture_tag"))
103
options.architectures = sorted(
104
options.series.architectures, key=attrgetter("architecture_tag"))
101
args.architectures = sorted(
102
args.series.architectures, key=attrgetter("architecture_tag"))
107
105
def find_newest_publication(method, version_attr, **kwargs):
134
132
return newest_pending
137
def find_latest_published_binaries(options, package):
135
def find_latest_published_binaries(args, package):
138
136
target_binaries = []
139
for architecture in options.architectures:
137
for architecture in args.architectures:
140
138
binary = find_newest_publication(
141
options.archive.getPublishedBinaries, "binary_package_version",
142
binary_name=package, version=options.version,
143
distro_arch_series=architecture, pocket=options.pocket,
139
args.archive.getPublishedBinaries, "binary_package_version",
140
binary_name=package, version=args.version,
141
distro_arch_series=architecture, pocket=args.pocket,
144
142
exact_match=True)
145
143
if binary is not None:
146
144
target_binaries.append(binary)
147
145
if not target_binaries:
148
146
raise PackageMissing(
149
147
"Could not find binaries for '%s/%s' in %s" %
150
(package, options.version, options.suite))
148
(package, args.version, args.suite))
151
149
return target_binaries
154
def find_latest_published_source(options, package):
152
def find_latest_published_source(args, package):
155
153
source = find_newest_publication(
156
options.archive.getPublishedSources, "source_package_version",
157
source_name=package, version=options.version,
158
distro_series=options.series, pocket=options.pocket, exact_match=True)
154
args.archive.getPublishedSources, "source_package_version",
155
source_name=package, version=args.version,
156
distro_series=args.series, pocket=args.pocket, exact_match=True)
159
157
if source is None:
160
158
raise PackageMissing(
161
159
"Could not find source '%s/%s' in %s" %
162
(package, options.version, options.suite))
160
(package, args.version, args.suite))