Merge lp:~laney/ubuntu-archive-tools/update-output-helper into lp:ubuntu-archive-tools
- update-output-helper
- Merge into trunk
Status: | Rejected |
---|---|
Rejected by: | Steve Langasek |
Proposed branch: | lp:~laney/ubuntu-archive-tools/update-output-helper |
Merge into: | lp:ubuntu-archive-tools |
Diff against target: |
1237 lines (+701/-4) (has conflicts) 23 files modified
architecture-mismatches (+4/-0) bootstrap-package (+95/-0) branch-livefses (+8/-0) checkrdepends (+9/-0) component-mismatches (+22/-0) copy-package (+46/-0) copy-proposed-kernel (+15/-0) cron.NBS (+4/-0) manage-builders (+81/-4) manage-chroot (+36/-0) nbs-report (+4/-0) package-subscribers (+14/-0) phased-updater (+18/-0) pocket-mismatches (+4/-0) priority-mismatches (+5/-0) publish-image-set (+4/-0) queuediff (+4/-0) retry-autopkgtest-regressions (+129/-0) sru-remove (+4/-0) sru-report (+45/-0) sru-review (+8/-0) ubuntu-changes (+8/-0) update-output-helper (+134/-0) Text conflict in architecture-mismatches Text conflict in bootstrap-package Text conflict in branch-livefses Text conflict in checkrdepends Text conflict in component-mismatches Text conflict in copy-package Text conflict in copy-proposed-kernel Text conflict in cron.NBS Text conflict in manage-builders Text conflict in manage-chroot Text conflict in nbs-report Text conflict in package-subscribers Text conflict in phased-updater Text conflict in pocket-mismatches Text conflict in priority-mismatches Text conflict in publish-image-set Text conflict in queuediff Text conflict in retry-autopkgtest-regressions Text conflict in sru-remove Text conflict in sru-report Text conflict in sru-review Text conflict in ubuntu-changes |
To merge this branch: | bzr merge lp:~laney/ubuntu-archive-tools/update-output-helper |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Steve Langasek | Disapprove | ||
Review via email: mp+267970@code.launchpad.net |
Commit message
Description of the change
This is a script which constructs a view of the archive that more or less corresponds to one that britney is trying to create. You can use that to analyse why britney is saying that packages aren't able to migrate.
- 973. By Colin Watson
-
[r=cjwatson] Add the team looking after ippusbxd in main.
- 974. By Colin Watson
-
manage-chroot: Log in anonymously for get/info.
- 975. By Colin Watson
-
[r=cjwatson] sru-report: list kernel family packages in the -proposed cleanup section
- 976. By Colin Watson
-
[r=cjwatson] Add the pkg-ime team which is subscribed to a couple of packages in main.
Iain Lane (laney) wrote : | # |
- 977. By Martin Pitt
-
Add retry-autopkgte
st-regressions This generates a set of run-autopkgtest commands (from britney2-ubuntu branch)
to re-run all autopkgtests which regressed. - 978. By Martin Pitt
-
sru-report: Update YAML parsing for autopkgtest regressions
- 979. By Colin Watson
-
copy-package: Fix same-destination check: identical archives compare unequal (thanks, launchpadlib), so compare archive references.
- 980. By Colin Watson
-
branch-livefses: Revert r956 and materialise the livefses collection up-front instead.
- 981. By Colin Watson
-
wily → xenial / vivid → wily
- 982. By Colin Watson
-
copy-package: Make success output less misleading.
- 983. By Colin Watson
-
Add s390x to various reports for xenial.
- 984. By Martin Pitt
-
retry-autopkgte
st-regressions: Stop assuming number of info URLs in YAML excuses - 985. By Colin Watson
-
copy-package: Pass source series/pocket to Archive.
copyPackage. - 986. By Martin Pitt
-
copy-package: Add sponsor option
- 987. By Steve Langasek
-
Merge lp:~brian-murray/ubuntu-archive-tools/link-to-autopkgtest-page
- 988. By Colin Watson
-
component-
mismatches: remove unused code - 989. By Colin Watson
-
bootstrap-package: new tool to bootstrap a single package using injected build-dependencies
- 990. By Steve Langasek
-
Merge lp:~brian-murray/ubuntu-archive-tools/unicode-traceback
- 991. By William Grant
-
manage-builders: Update column widths to better match modern data.
- 992. By William Grant
-
manage-builders: Increase Cleaning warning threshold from 5 to 10 minutes, as mass resets can be slow.
- 993. By William Grant
-
[r=wgrant] manage-builders: Add --set-vm-host option.
- 994. By Colin Watson
-
manage-builders: add --quiet option
- 995. By Martin Pitt
-
retry-autopkgte
st-regressions: Add --all-proposed option when running under $ALL_PROPOSED - 996. By Adam Conrad
-
copy-proposed-
kernel: Use new kernel security PPA for --security - 997. By Steve Langasek
- 998. By Colin Watson
-
manage-builders: add --set-virtual and --set-non-virtual options
- 999. By Colin Watson
-
bootstrap-package: allow bootstrapping builds that are still "Needs building"
- 1000. By Martin Pitt
-
retry-autopkgte
st-regressions: Use argparse - 1001. By Martin Pitt
-
retry-autopkgte
st-regressions: Add --state option This is useful to retry all RUNNING tests in case test queues got
flushed for maintenance. - 1002. By Martin Pitt
-
retry-autopkgte
st-regressions: Add --ci-train option - 1003. By Martin Pitt
-
retry-autopkgte
st-regressions: Add --max-age option - 1004. By Martin Pitt
-
retry-autopkgte
st-regressions: Add --min-age option - 1005. By Steve Langasek
-
Merge lp:~brian-murray/ubuntu-archive-tools/mir-bug-creation-improvements
- 1006. By Steve Langasek
-
Explicitly spell out the bug statuses we look for when searching MIR bugs to include wontfix, so that previously-rejected MIRs are visible on the report.
- 1007. By Steve Langasek
-
Re-merge with trunk
- 1008. By Steve Langasek
-
Drop incomplete with/without response from bug status list, already encompassed by 'incomplete' - thanks, Brian\!
- 1009. By Adam Conrad
-
priority-
mismatches: Remove s390-tools workarounds - 1010. By Steve Langasek
-
Merge lp:~brian-murray/ubuntu-archive-tools/unsubbed-dev-release
- 1011. By Colin Watson
-
auto-sync, kernel-overrides, orphaned-sources: stop relying on {Packages,
Sources} .bz2; use .gz for now because I'm lazy - 1012. By Colin Watson
-
package-
subscribers: remove unused import - 1013. By Colin Watson
-
xenial → yakkety; wily → xenial
- 1014. By Steve Langasek
-
Recognize maas-maintainers as a main team subscriber
- 1015. By Martin Pitt
-
retry-autopkgte
st-regressions: Fix crash on None age, add missing parenthesis - 1016. By Steve Langasek
-
When opening bugs, use the right status - Incomplete (without response) - so that they'll be indexed on the package bug page; 'Incomplete' is a legacy status that shouldn't be used
- 1017. By Steve Langasek
-
Add ubuntu-openstack team to list of known main owners
- 1018. By Steve Langasek
-
Add 'cloudware' as an owning team for packages on the cloud images
- 1019. By Steve Langasek
-
remove cloudware again, this is a private team that we can't query
- 1020. By Steve Langasek
-
Add support for a -e option, to allow specifying the exact version of a
package to review in the queue (rather than forcing you to manually process
everything when more than one version is present). - 1021. By Steve Langasek
-
Merge lp:~brian-murray/ubuntu-archive-tools/phasing-ignore-dpkg-errors
- 1022. By Steve Langasek
-
Merge lp:~brian-murray/ubuntu-archive-tools/sru-report-table-id
- 1023. By Iain Lane
-
merge
- 1024. By Iain Lane
-
xz
- 1025. By Iain Lane
- 1026. By Iain Lane
-
update-
output- helper: Handle sources which produce binaries of a different version These have "Source: sourcename (sourceversion)" in their stanza in the Packages
file.bash was doing interesting things when trying to handle the arguments to
grep-dctrl as a string (it was insisting on tokenising the '(' in "source
(version)" into their own arguments, despite all my pleading), so force its
hand by using an array.
Steve Langasek (vorlon) wrote : | # |
Superseded now by https:/
Unmerged revisions
- 1026. By Iain Lane
-
update-
output- helper: Handle sources which produce binaries of a different version These have "Source: sourcename (sourceversion)" in their stanza in the Packages
file.bash was doing interesting things when trying to handle the arguments to
grep-dctrl as a string (it was insisting on tokenising the '(' in "source
(version)" into their own arguments, despite all my pleading), so force its
hand by using an array. - 1025. By Iain Lane
- 1024. By Iain Lane
-
xz
- 1023. By Iain Lane
-
merge
Preview Diff
1 | === modified file 'architecture-mismatches' |
2 | --- architecture-mismatches 2017-03-18 07:19:41 +0000 |
3 | +++ architecture-mismatches 2019-03-05 10:27:11 +0000 |
4 | @@ -186,7 +186,11 @@ |
5 | |
6 | suite = options.suite |
7 | components = ["main", "restricted", "universe", "multiverse"] |
8 | +<<<<<<< TREE |
9 | arches = ["amd64", "arm64", "armhf", "i386", "ppc64el", "s390x"] |
10 | +======= |
11 | + arches = ["amd64", "arm64", "armhf", "i386", "powerpc", "ppc64el", "s390x"] |
12 | +>>>>>>> MERGE-SOURCE |
13 | |
14 | if options.output_file is not None: |
15 | sys.stdout = open('%s.new' % options.output_file, 'w') |
16 | |
17 | === modified file 'auto-sync' |
18 | === modified file 'bootstrap-package' |
19 | --- bootstrap-package 2017-09-29 12:48:41 +0000 |
20 | +++ bootstrap-package 2019-03-05 10:27:11 +0000 |
21 | @@ -1,3 +1,4 @@ |
22 | +<<<<<<< TREE |
23 | #! /usr/bin/python |
24 | |
25 | # Copyright (C) 2016 Canonical Ltd. |
26 | @@ -91,3 +92,97 @@ |
27 | |
28 | if __name__ == "__main__": |
29 | main() |
30 | +======= |
31 | +#! /usr/bin/python |
32 | + |
33 | +# Copyright (C) 2016 Canonical Ltd. |
34 | +# Author: Colin Watson <cjwatson@ubuntu.com> |
35 | + |
36 | +# This program is free software: you can redistribute it and/or modify |
37 | +# it under the terms of the GNU General Public License as published by |
38 | +# the Free Software Foundation; version 3 of the License. |
39 | +# |
40 | +# This program is distributed in the hope that it will be useful, |
41 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
42 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
43 | +# GNU General Public License for more details. |
44 | +# |
45 | +# You should have received a copy of the GNU General Public License |
46 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
47 | + |
48 | +"""Bootstrap a package build using injected build-dependencies.""" |
49 | + |
50 | +from __future__ import print_function |
51 | +import sys |
52 | + |
53 | +from optparse import ( |
54 | + OptionParser, |
55 | + SUPPRESS_HELP, |
56 | + ) |
57 | + |
58 | +from launchpadlib.launchpad import Launchpad |
59 | + |
60 | +import lputils |
61 | + |
62 | + |
63 | +def bootstrap_package(options, package): |
64 | + source = lputils.find_latest_published_source(options, package) |
65 | + arch_tags = [a.architecture_tag for a in options.architectures] |
66 | + for build in source.getBuilds(): |
67 | + if build.arch_tag in arch_tags: |
68 | + if (build.buildstate != "Needs building" and |
69 | + not build.can_be_retried): |
70 | + print("%s cannot be retried" % build.web_link, file=sys.stderr) |
71 | + elif options.dry_run: |
72 | + print("Would bootstrap %s" % build.web_link) |
73 | + else: |
74 | + print("Bootstrapping %s" % build.web_link) |
75 | + build.external_dependencies = ( |
76 | + "deb http://archive-team.internal/bootstrap/%s %s main" % |
77 | + (build.arch_tag, source.distro_series.name)) |
78 | + build.lp_save() |
79 | + build.retry() |
80 | + |
81 | + |
82 | +def bootstrap_packages(options, packages): |
83 | + for package in packages: |
84 | + bootstrap_package(options, package) |
85 | + |
86 | + |
87 | +def main(): |
88 | + parser = OptionParser( |
89 | + usage="usage: %prog [options] package [...]", |
90 | + epilog=lputils.ARCHIVE_REFERENCE_DESCRIPTION) |
91 | + parser.add_option( |
92 | + "-l", "--launchpad", dest="launchpad_instance", default="production") |
93 | + parser.add_option( |
94 | + "-n", "--dry-run", default=False, action="store_true", |
95 | + help="only show what would be done") |
96 | + parser.add_option("-A", "--archive", help="bootstrap in ARCHIVE") |
97 | + parser.add_option( |
98 | + "-s", "--suite", metavar="SUITE", help="bootstrap in SUITE") |
99 | + parser.add_option( |
100 | + "-a", "--architecture", dest="architectures", action="append", |
101 | + metavar="ARCHITECTURE", |
102 | + help="architecture tag (may be given multiple times)") |
103 | + parser.add_option( |
104 | + "-d", "--distribution", default="ubuntu", help=SUPPRESS_HELP) |
105 | + parser.add_option( |
106 | + "-e", "--version", |
107 | + metavar="VERSION", help="package version (default: current version)") |
108 | + |
109 | + options, args = parser.parse_args() |
110 | + |
111 | + options.launchpad = Launchpad.login_with( |
112 | + "bootstrap-package", options.launchpad_instance, version="devel") |
113 | + lputils.setup_location(options, default_pocket="Proposed") |
114 | + |
115 | + if not args: |
116 | + parser.error("You must specify some packages to bootstrap.") |
117 | + |
118 | + bootstrap_packages(options, args) |
119 | + |
120 | + |
121 | +if __name__ == "__main__": |
122 | + main() |
123 | +>>>>>>> MERGE-SOURCE |
124 | |
125 | === modified file 'branch-livefses' |
126 | --- branch-livefses 2018-05-02 13:30:38 +0000 |
127 | +++ branch-livefses 2019-03-05 10:27:11 +0000 |
128 | @@ -30,12 +30,20 @@ |
129 | livefs.distro_series == options.source_series): |
130 | print("Branching %s for %s ..." % ( |
131 | livefs.web_link, options.dest_series.name)) |
132 | +<<<<<<< TREE |
133 | new_livefs = options.launchpad.livefses.new( |
134 | owner=owner, distro_series=options.dest_series, |
135 | name=livefs.name, metadata=livefs.metadata) |
136 | new_livefs.require_virtualized = livefs.require_virtualized |
137 | new_livefs.relative_build_score = livefs.relative_build_score |
138 | new_livefs.lp_save() |
139 | +======= |
140 | + new_livefs = options.launchpad.livefses.new( |
141 | + owner=owner, distro_series=options.dest_series, |
142 | + name=livefs.name, metadata=livefs.metadata) |
143 | + new_livefs.require_virtualized = livefs.require_virtualized |
144 | + new_livefs.lp_save() |
145 | +>>>>>>> MERGE-SOURCE |
146 | print(" %s" % new_livefs.web_link) |
147 | |
148 | |
149 | |
150 | === modified file 'checkrdepends' |
151 | --- checkrdepends 2018-10-30 10:59:16 +0000 |
152 | +++ checkrdepends 2019-03-05 10:27:11 +0000 |
153 | @@ -28,7 +28,11 @@ |
154 | |
155 | |
156 | default_base = '/home/ubuntu-archive/mirror/ubuntu' |
157 | +<<<<<<< TREE |
158 | default_suite = 'disco' |
159 | +======= |
160 | +default_suite = 'yakkety' |
161 | +>>>>>>> MERGE-SOURCE |
162 | components = ('main', 'restricted', 'universe', 'multiverse') |
163 | |
164 | # Cut-down RE from deb822.PkgRelation. |
165 | @@ -59,10 +63,15 @@ |
166 | return ('armhf',) |
167 | elif suite in ('trusty', 'vivid', 'wily'): |
168 | return ('arm64', 'armhf', 'powerpc', 'ppc64el') |
169 | +<<<<<<< TREE |
170 | elif suite in ('xenial', 'yakkety'): |
171 | return ('arm64', 'armhf', 'powerpc', 'ppc64el', 's390x') |
172 | else: |
173 | return ('arm64', 'armhf', 'ppc64el', 's390x') |
174 | +======= |
175 | + else: |
176 | + return ('arm64', 'armhf', 'powerpc', 'ppc64el', 's390x') |
177 | +>>>>>>> MERGE-SOURCE |
178 | |
179 | |
180 | def read_tag_file(path): |
181 | |
182 | === modified file 'component-mismatches' |
183 | --- component-mismatches 2018-03-09 04:11:21 +0000 |
184 | +++ component-mismatches 2019-03-05 10:27:11 +0000 |
185 | @@ -141,8 +141,13 @@ |
186 | for suite in options.suites: |
187 | for component in components_with_di: |
188 | for arch in [ |
189 | +<<<<<<< TREE |
190 | "i386", "amd64", "armhf", "arm64", "ppc64el", |
191 | "s390x"]: |
192 | +======= |
193 | + "i386", "amd64", "powerpc", "armhf", "arm64", "ppc64el", |
194 | + "s390x"]: |
195 | +>>>>>>> MERGE-SOURCE |
196 | binaries_path = "%s/dists/%s/%s/binary-%s/Packages.gz" % ( |
197 | options.archive_dir, suite, component, arch) |
198 | for section in apt_pkg.TagFile(decompress_open(binaries_path)): |
199 | @@ -183,8 +188,13 @@ |
200 | # ideally supported+build-depends too, but Launchpad's |
201 | # cron.germinate doesn't save this |
202 | |
203 | +<<<<<<< TREE |
204 | for arch in ["i386", "amd64", "armhf", "arm64", "ppc64el", |
205 | "s390x"]: |
206 | +======= |
207 | + for arch in ["i386", "amd64", "powerpc", "armhf", "arm64", "ppc64el", |
208 | + "s390x"]: |
209 | +>>>>>>> MERGE-SOURCE |
210 | for seed in seeds: |
211 | filename = "%s/%s_%s_%s_%s" % ( |
212 | options.germinate_path, seed, flavour, options.suite, arch) |
213 | @@ -405,10 +415,17 @@ |
214 | fc = "white" |
215 | # Need to use & otherwise the svg will have a syntax error |
216 | url = ("https://launchpad.net/ubuntu/+source/%s/+filebug?" |
217 | +<<<<<<< TREE |
218 | "field.title=%s&field.status=Incomplete" |
219 | "&field.tags=%s" % |
220 | (quote_plus(name), quote_plus("[MIR] %s" % name), |
221 | quote_plus(suite))) |
222 | +======= |
223 | + "field.title=%s&field.status=Incomplete+(without+response)" |
224 | + "&field.tags=%s" % |
225 | + (quote_plus(name), quote_plus("[MIR] %s" % name), |
226 | + quote_plus(suite))) |
227 | +>>>>>>> MERGE-SOURCE |
228 | fd.write(' fillcolor="%s"' % fc) |
229 | if url: |
230 | fd.write(' URL="%s"' % url) |
231 | @@ -811,8 +828,13 @@ |
232 | ''' |
233 | result = defaultdict(list) |
234 | mir_team = options.launchpad.people['ubuntu-mir'] |
235 | +<<<<<<< TREE |
236 | bug_statuses = ("New", "Incomplete", "Won't Fix", "Confirmed", "Triaged", |
237 | "In Progress", "Fix Committed", "Fix Released") |
238 | +======= |
239 | + bug_statuses = ("New", "Incomplete", "Won't Fix", "Confirmed", "Triaged", |
240 | + "In Progress", "Fix Committed") |
241 | +>>>>>>> MERGE-SOURCE |
242 | for source in sources: |
243 | tasks = options.distro.getSourcePackage(name=source).searchTasks( |
244 | bug_subscriber=mir_team, status=bug_statuses) |
245 | |
246 | === modified file 'copy-package' |
247 | --- copy-package 2018-01-05 12:28:17 +0000 |
248 | +++ copy-package 2019-03-05 10:27:11 +0000 |
249 | @@ -66,10 +66,17 @@ |
250 | print("\t%s" % binary.display_name) |
251 | num_copies += 1 |
252 | |
253 | +<<<<<<< TREE |
254 | print("Candidate copy target: %s" % args.destination.archive) |
255 | if args.sponsoree: |
256 | print("Sponsored for: %s" % args.sponsoree) |
257 | if args.dry_run: |
258 | +======= |
259 | + print("Candidate copy target: %s" % options.destination.archive) |
260 | + if options.sponsoree: |
261 | + print("Sponsored for: %s" % options.sponsoree) |
262 | + if options.dry_run: |
263 | +>>>>>>> MERGE-SOURCE |
264 | print("Dry run; no packages copied.") |
265 | else: |
266 | if not args.confirm_all: |
267 | @@ -79,6 +86,7 @@ |
268 | try: |
269 | args.destination.archive.copyPackage( |
270 | source_name=package, version=source.source_package_version, |
271 | +<<<<<<< TREE |
272 | from_archive=args.archive, |
273 | from_series=args.series.name, |
274 | from_pocket=args.pocket, |
275 | @@ -89,6 +97,18 @@ |
276 | auto_approve=args.auto_approve, |
277 | silent=args.silent, |
278 | sponsored=args.sponsoree) |
279 | +======= |
280 | + from_archive=options.archive, |
281 | + from_series=options.series.name, |
282 | + from_pocket=options.pocket, |
283 | + to_series=options.destination.series.name, |
284 | + to_pocket=options.destination.pocket, |
285 | + include_binaries=options.include_binaries, |
286 | + unembargo=options.unembargo, |
287 | + auto_approve=options.auto_approve, |
288 | + silent=options.silent, |
289 | + sponsored=options.sponsoree) |
290 | +>>>>>>> MERGE-SOURCE |
291 | |
292 | print("%d %s requested." % ( |
293 | num_copies, "copy" if num_copies == 1 else "copies")) |
294 | @@ -148,9 +168,16 @@ |
295 | "When a package cannot be copied, normally this script exits " |
296 | "with a non-zero status. With --skip-missing instead, the " |
297 | "error is printed and copying continues")) |
298 | +<<<<<<< TREE |
299 | parser.add_argument( |
300 | "--sponsor", metavar="USERNAME", dest="sponsoree", default=None, |
301 | help="Sponsor the sync for USERNAME (a Launchpad username).") |
302 | +======= |
303 | + parser.add_option("--sponsor", metavar="USERNAME", |
304 | + dest="sponsoree", default=None, |
305 | + help="Sponsor the sync for USERNAME (a Launchpad " |
306 | + "username).") |
307 | +>>>>>>> MERGE-SOURCE |
308 | |
309 | # Deprecated in favour of --to and --from. |
310 | parser.add_argument( |
311 | @@ -234,11 +261,20 @@ |
312 | |
313 | # TODO some equivalent of canModifySuite check? |
314 | |
315 | +<<<<<<< TREE |
316 | if (not args.force_same_destination and |
317 | args.distribution == args.destination.distribution and |
318 | args.suite == args.destination.suite and |
319 | args.pocket == args.destination.pocket and |
320 | args.archive.reference == args.destination.archive.reference): |
321 | +======= |
322 | + if (not options.force_same_destination and |
323 | + options.distribution == options.destination.distribution and |
324 | + options.suite == options.destination.suite and |
325 | + options.pocket == options.destination.pocket and |
326 | + options.archive.reference == |
327 | + options.destination.archive.reference): |
328 | +>>>>>>> MERGE-SOURCE |
329 | parser.error("copy destination must differ from source") |
330 | |
331 | if args.sponsoree: |
332 | @@ -248,7 +284,17 @@ |
333 | parser.error( |
334 | "Person to sponsor for not found: %s" % args.sponsoree) |
335 | |
336 | +<<<<<<< TREE |
337 | if copy_packages(args): |
338 | +======= |
339 | + if options.sponsoree: |
340 | + try: |
341 | + options.sponsoree = options.launchpad.people[options.sponsoree] |
342 | + except KeyError: |
343 | + parser.error("Person to sponsor for not found: %s" % options.sponsoree) |
344 | + |
345 | + if copy_packages(options, args): |
346 | +>>>>>>> MERGE-SOURCE |
347 | return 0 |
348 | else: |
349 | return 1 |
350 | |
351 | === modified file 'copy-proposed-kernel' |
352 | --- copy-proposed-kernel 2018-08-14 08:31:43 +0000 |
353 | +++ copy-proposed-kernel 2019-03-05 10:27:11 +0000 |
354 | @@ -28,6 +28,7 @@ |
355 | |
356 | from launchpadlib.launchpad import Launchpad |
357 | |
358 | +<<<<<<< TREE |
359 | |
360 | parser = argparse.ArgumentParser(description='Copy a proposed kernel to the apropriate archive pocket') |
361 | parser.add_argument('--dry-run', action='store_true', help='Do everything but actually copy the package') |
362 | @@ -67,6 +68,20 @@ |
363 | security = True |
364 | |
365 | (release, pkg) = (args.series, args.source) |
366 | +======= |
367 | +args = sys.argv[1:] |
368 | +if args[0] == '--security': |
369 | + args = args[1:] |
370 | + ppa_name = '~canonical-kernel-security-team/ubuntu/ppa' |
371 | + security = True |
372 | +else: |
373 | + ppa_name = '~canonical-kernel-team/ubuntu/ppa' |
374 | + security = False |
375 | +if len(args) != 2: |
376 | + sys.stderr.write('Usage: %s [--security] <release> <sourcepackage>\n' % sys.argv[0]) |
377 | + sys.exit(1) |
378 | +(release, pkg) = args[0:] |
379 | +>>>>>>> MERGE-SOURCE |
380 | |
381 | launchpad = Launchpad.login_with( |
382 | 'ubuntu-archive-tools', 'production', version='devel') |
383 | |
384 | === modified file 'cron.NBS' |
385 | --- cron.NBS 2018-10-30 10:59:16 +0000 |
386 | +++ cron.NBS 2019-03-05 10:27:11 +0000 |
387 | @@ -20,7 +20,11 @@ |
388 | |
389 | MIRROR=$HOME/mirror |
390 | DISTRIBUTION="${DISTRIBUTION:-ubuntu}" |
391 | +<<<<<<< TREE |
392 | RELEASE="${RELEASE:-disco}" |
393 | +======= |
394 | +RELEASE="${RELEASE:-yakkety}" |
395 | +>>>>>>> MERGE-SOURCE |
396 | OUTDIR="${OUTDIR:-$HOME/public_html/NBS}" |
397 | OUTFILE="${OUTFILE:-$HOME/public_html/nbs.html}" |
398 | |
399 | |
400 | === modified file 'manage-builders' |
401 | --- manage-builders 2018-12-21 17:53:51 +0000 |
402 | +++ manage-builders 2019-03-05 10:27:11 +0000 |
403 | @@ -61,10 +61,17 @@ |
404 | "-l", "--lp-instance", dest="lp_instance", default="production", |
405 | help="use the specified Launchpad instance (default: production)") |
406 | |
407 | -parser.add_argument( |
408 | - "-q", "--quiet", dest="quiet", action="store_true", default=None, |
409 | - help="only display errors") |
410 | -parser.add_argument( |
411 | +<<<<<<< TREE |
412 | +parser.add_argument( |
413 | + "-q", "--quiet", dest="quiet", action="store_true", default=None, |
414 | + help="only display errors") |
415 | +parser.add_argument( |
416 | +======= |
417 | +parser.add_option( |
418 | + "-q", "--quiet", dest="quiet", action="store_true", default=None, |
419 | + help="only display errors") |
420 | +parser.add_option( |
421 | +>>>>>>> MERGE-SOURCE |
422 | "-v", "--verbose", dest="verbose", action="store_true", default=None, |
423 | help="display more detail") |
424 | |
425 | @@ -116,6 +123,7 @@ |
426 | parser.add_argument( |
427 | "--set-failnotes", dest="set_failnotes", default=None, |
428 | help="set the builder's failnotes") |
429 | +<<<<<<< TREE |
430 | virtual_group = parser.add_mutually_exclusive_group() |
431 | virtual_group.add_argument( |
432 | "--set-virtual", dest="set_virtual", action="store_true", default=None, |
433 | @@ -136,6 +144,31 @@ |
434 | help="set the builder's VM host") |
435 | |
436 | args = parser.parse_args() |
437 | +======= |
438 | +parser.add_option( |
439 | + "--set-virtual", dest="set_virtual", action="store_true", default=None, |
440 | + help="mark the builder as virtual") |
441 | +parser.add_option( |
442 | + "--set-non-virtual", dest="set_non_virtual", |
443 | + action="store_true", default=None, |
444 | + help="mark the builder as non-virtual") |
445 | +parser.add_option( |
446 | + "--set-vm-host", dest="set_vm_host", default=None, |
447 | + help="set the builder's VM host") |
448 | + |
449 | +(options, args) = parser.parse_args() |
450 | + |
451 | +if args: |
452 | + parser.error( |
453 | + "manage-builders does not take positional arguments. Did you mean to " |
454 | + "use -b?") |
455 | +if options.manual and options.auto: |
456 | + parser.error("--manual and --auto are mutually exclusive") |
457 | +if options.enable and options.disable: |
458 | + parser.error("--enable and --disable are mutually exclusive") |
459 | +if options.set_virtual and options.set_non_virtual: |
460 | + parser.error("--set-virtual and --set-non-virtual are mutually exclusive") |
461 | +>>>>>>> MERGE-SOURCE |
462 | |
463 | changes = {} |
464 | if args.manual: |
465 | @@ -147,6 +180,7 @@ |
466 | if args.disable or args.reset: |
467 | # In the --reset case, we'll re-enable it manually after applying this. |
468 | changes['builderok'] = False |
469 | +<<<<<<< TREE |
470 | if args.set_failnotes is not None: |
471 | changes['failnotes'] = args.set_failnotes or None |
472 | if args.set_virtual: |
473 | @@ -159,6 +193,16 @@ |
474 | changes['active'] = False |
475 | if args.set_vm_host is not None: |
476 | changes['vm_host'] = args.set_vm_host or None |
477 | +======= |
478 | +if options.set_failnotes is not None: |
479 | + changes['failnotes'] = options.set_failnotes or None |
480 | +if options.set_virtual: |
481 | + changes['virtualized'] = True |
482 | +if options.set_non_virtual: |
483 | + changes['virtualized'] = False |
484 | +if options.set_vm_host is not None: |
485 | + changes['vm_host'] = options.set_vm_host or None |
486 | +>>>>>>> MERGE-SOURCE |
487 | |
488 | lp = Launchpad.login_with( |
489 | 'manage-builders', args.lp_instance, version='devel') |
490 | @@ -240,7 +284,11 @@ |
491 | |
492 | count_changed = count_unchanged = 0 |
493 | |
494 | +<<<<<<< TREE |
495 | if changes and not args.quiet: |
496 | +======= |
497 | +if changes and not options.quiet: |
498 | +>>>>>>> MERGE-SOURCE |
499 | print('Updating %d builders.' % len(candidates)) |
500 | |
501 | if args.verbose: |
502 | @@ -251,7 +299,11 @@ |
503 | list(group) for _, group in groupby(candidates, clump_sort_key)] |
504 | |
505 | for clump in builder_clumps: |
506 | +<<<<<<< TREE |
507 | if not changes and not args.quiet: |
508 | +======= |
509 | + if not changes and not options.quiet: |
510 | +>>>>>>> MERGE-SOURCE |
511 | if clump != builder_clumps[0]: |
512 | print() |
513 | exemplar = clump[0] |
514 | @@ -276,11 +328,22 @@ |
515 | changed = True |
516 | if changed: |
517 | count_changed += 1 |
518 | +<<<<<<< TREE |
519 | if not args.quiet: |
520 | print('* %s' % candidate.name) |
521 | +======= |
522 | + candidate.lp_save() |
523 | + if not options.quiet: |
524 | + print('* %s' % candidate.name) |
525 | +>>>>>>> MERGE-SOURCE |
526 | elif changes: |
527 | +<<<<<<< TREE |
528 | if not args.quiet: |
529 | print(' %s' % candidate.name) |
530 | +======= |
531 | + if not options.quiet: |
532 | + print(' %s' % candidate.name) |
533 | +>>>>>>> MERGE-SOURCE |
534 | count_unchanged += 1 |
535 | else: |
536 | duration = get_clean_status_duration(candidate) |
537 | @@ -291,7 +354,13 @@ |
538 | else: |
539 | failnote = 'no failnotes' |
540 | status = 'DISABLED: %s' % failnote |
541 | +<<<<<<< TREE |
542 | elif is_cleaning(candidate): |
543 | +======= |
544 | + elif (candidate.current_build_link is None |
545 | + and candidate.clean_status in ('Dirty', 'Cleaning') |
546 | + and duration > timedelta(minutes=10)): |
547 | +>>>>>>> MERGE-SOURCE |
548 | # Idle builders that have been dirty or cleaning for more |
549 | # than ten minutes are a little suspicious. |
550 | status = '%s %s' % ( |
551 | @@ -318,8 +387,16 @@ |
552 | dirty_flag, 'M' if candidate.manual else ' ', |
553 | 'X' if not candidate.builderok else ' ', |
554 | status)) |
555 | +<<<<<<< TREE |
556 | elif not args.quiet: |
557 | +======= |
558 | + elif not options.quiet: |
559 | +>>>>>>> MERGE-SOURCE |
560 | print(' %-20s %s' % (candidate.name, status)) |
561 | |
562 | +<<<<<<< TREE |
563 | if changes and not args.quiet: |
564 | +======= |
565 | +if changes and not options.quiet: |
566 | +>>>>>>> MERGE-SOURCE |
567 | print("Changed: %d. Unchanged: %d." % (count_changed, count_unchanged)) |
568 | |
569 | === modified file 'manage-chroot' |
570 | --- manage-chroot 2019-02-20 07:41:07 +0000 |
571 | +++ manage-chroot 2019-03-05 10:27:11 +0000 |
572 | @@ -160,6 +160,7 @@ |
573 | help="do not ask for confirmation") |
574 | parser.add_argument( |
575 | "-d", "--distribution", default="ubuntu", |
576 | +<<<<<<< TREE |
577 | metavar="DISTRIBUTION", help="manage base images for DISTRIBUTION") |
578 | parser.add_argument( |
579 | "-s", "--suite", "--series", dest="suite", metavar="SUITE", |
580 | @@ -209,6 +210,41 @@ |
581 | args.build_url, web_host)) |
582 | |
583 | return commands[args.command](args) |
584 | +======= |
585 | + metavar="DISTRIBUTION", help="manage chroots for DISTRIBUTION") |
586 | + parser.add_option( |
587 | + "-s", "--series", dest="suite", metavar="SERIES", |
588 | + help="manage chroots for SERIES") |
589 | + parser.add_option( |
590 | + "-a", "--architecture", metavar="ARCHITECTURE", |
591 | + help="manage chroots for ARCHITECTURE") |
592 | + parser.add_option( |
593 | + "-f", "--filepath", metavar="PATH", help="Chroot file path") |
594 | + options, args = parser.parse_args() |
595 | + |
596 | + if options.architecture is None: |
597 | + parser.error("You must specify an architecture.") |
598 | + if not args: |
599 | + parser.error( |
600 | + "You must specify a command (%s)." % ", ".join(sorted(commands))) |
601 | + command = args[0] |
602 | + if command not in commands: |
603 | + parser.error( |
604 | + "Unrecognised command: %s (valid: %s)" % |
605 | + (command, ", ".join(sorted(commands)))) |
606 | + if command == "set" and options.filepath is None: |
607 | + parser.error("The set command requires a chroot file path (-f).") |
608 | + |
609 | + if command in ("get", "info"): |
610 | + login_method = Launchpad.login_anonymously |
611 | + else: |
612 | + login_method = Launchpad.login_with |
613 | + options.launchpad = login_method( |
614 | + "manage-chroot", options.launchpad_instance, version="devel") |
615 | + lputils.setup_location(options) |
616 | + |
617 | + return commands[command](options) |
618 | +>>>>>>> MERGE-SOURCE |
619 | |
620 | |
621 | if __name__ == '__main__': |
622 | |
623 | === modified file 'nbs-report' |
624 | --- nbs-report 2018-10-30 10:59:16 +0000 |
625 | +++ nbs-report 2019-03-05 10:27:11 +0000 |
626 | @@ -209,7 +209,11 @@ |
627 | usage="%prog <checkrdepends output directory>", |
628 | description="Generate an HTML report of current NBS binary packages.") |
629 | parser.add_option('-d', '--distribution', default='ubuntu') |
630 | +<<<<<<< TREE |
631 | parser.add_option('-s', '--suite', default='disco') |
632 | +======= |
633 | + parser.add_option('-s', '--suite', default='yakkety') |
634 | +>>>>>>> MERGE-SOURCE |
635 | parser.add_option( |
636 | '--csv-file', help='record CSV time series data in this file') |
637 | options, args = parser.parse_args() |
638 | |
639 | === modified file 'package-subscribers' |
640 | --- package-subscribers 2018-12-10 22:55:06 +0000 |
641 | +++ package-subscribers 2019-03-05 10:27:11 +0000 |
642 | @@ -120,15 +120,29 @@ |
643 | 'foundations-bugs', |
644 | 'kernel-packages', |
645 | 'kubuntu-bugs', |
646 | +<<<<<<< TREE |
647 | 'landscape', |
648 | 'maas-maintainers', |
649 | +======= |
650 | + 'lubuntu-packaging', |
651 | + 'maas-maintainers', |
652 | +>>>>>>> MERGE-SOURCE |
653 | 'mir-team', |
654 | 'pkg-ime', |
655 | 'snappy-dev', |
656 | 'translators-packages', |
657 | +<<<<<<< TREE |
658 | 'ubuntu-openstack', |
659 | 'ubuntu-printing', |
660 | 'ubuntu-security', |
661 | +======= |
662 | + 'ubuntu-apps-bugs', |
663 | + 'ubuntu-openstack', |
664 | + 'ubuntu-phonedations-bugs', |
665 | + 'ubuntu-printing', |
666 | + 'ubuntu-sdk-bugs', |
667 | + 'ubuntu-security-bugs', |
668 | +>>>>>>> MERGE-SOURCE |
669 | 'ubuntu-server', |
670 | ] |
671 | |
672 | |
673 | === modified file 'phased-updater' |
674 | --- phased-updater 2018-09-18 14:07:35 +0000 |
675 | +++ phased-updater 2019-03-05 10:27:11 +0000 |
676 | @@ -258,10 +258,18 @@ |
677 | signer) |
678 | continue |
679 | signer_email = get_primary_email(signer) |
680 | +<<<<<<< TREE |
681 | signer_name = signer.name |
682 | # use the changes file as a backup method for determining email addresses |
683 | changes_file_url = spph.changesFileUrl() |
684 | try: |
685 | +======= |
686 | + if not signer_email: |
687 | + signer_name = '' |
688 | + # if we can't determine their email use the changes file |
689 | + changes_file_url = spph.changesFileUrl() |
690 | + # need to handle a 404 here |
691 | +>>>>>>> MERGE-SOURCE |
692 | changes_file = urlopen(changes_file_url) |
693 | for line in changes_file.readlines(): |
694 | line = line.strip() |
695 | @@ -327,6 +335,7 @@ |
696 | # add signer, problem, pkg, version to notifications csv file |
697 | with codecs.open(NOTIFICATIONS, 'a', encoding='utf-8') as notify_file: |
698 | for bucket in spph_buckets[rname][spph]['buckets']: |
699 | +<<<<<<< TREE |
700 | notify_file.write('%s, %s, %s, %s\n' % \ |
701 | (signer_name, bucket, |
702 | pkg, version)) |
703 | @@ -334,6 +343,11 @@ |
704 | notify_file.write('%s, %s, %s, %s\n' % \ |
705 | (creator.name, bucket, |
706 | pkg, version)) |
707 | +======= |
708 | + notify_file.write('%s, %s, %s, %s\n' % \ |
709 | + (signer_name.encode('utf-8'), |
710 | + bucket, pkg, version)) |
711 | +>>>>>>> MERGE-SOURCE |
712 | if 'rate' in spph_buckets[rname][spph]: |
713 | # see if they have been emailed about the increased rate |
714 | # for this package version before |
715 | @@ -367,10 +381,14 @@ |
716 | # notifications csv |
717 | with codecs.open(NOTIFICATIONS, 'a', encoding='utf-8') as notify_file: |
718 | notify_file.write('%s, increased-rate, %s, %s\n' % |
719 | +<<<<<<< TREE |
720 | (signer_name, pkg, version)) |
721 | if creator_email: |
722 | notify_file.write('%s, increased-rate, %s, %s\n' % |
723 | (creator.name, pkg, version)) |
724 | +======= |
725 | + (signer.name, pkg, version)) |
726 | +>>>>>>> MERGE-SOURCE |
727 | |
728 | |
729 | def new_buckets(archive, release, src_pkg, version): |
730 | |
731 | === modified file 'pocket-mismatches' |
732 | --- pocket-mismatches 2017-03-27 15:58:27 +0000 |
733 | +++ pocket-mismatches 2019-03-05 10:27:11 +0000 |
734 | @@ -182,7 +182,11 @@ |
735 | for series in launchpad.distributions["ubuntu"].series |
736 | if series.status in ("Supported", "Current Stable Release")]) |
737 | components = ["main", "restricted", "universe", "multiverse"] |
738 | +<<<<<<< TREE |
739 | arches = ["amd64", "arm64", "armhf", "i386", "ppc64el", "s390x"] |
740 | +======= |
741 | + arches = ["amd64", "arm64", "armhf", "i386", "powerpc", "ppc64el", "s390x"] |
742 | +>>>>>>> MERGE-SOURCE |
743 | |
744 | if options.output_file is not None: |
745 | sys.stdout = open('%s.new' % options.output_file, 'w') |
746 | |
747 | === modified file 'priority-mismatches' |
748 | --- priority-mismatches 2018-06-05 21:13:33 +0000 |
749 | +++ priority-mismatches 2019-03-05 10:27:11 +0000 |
750 | @@ -287,7 +287,12 @@ |
751 | |
752 | changes = 0 |
753 | if options.architecture is None: |
754 | +<<<<<<< TREE |
755 | for arch in ('amd64', 'arm64', 'armhf', 'i386', 'ppc64el', 's390x'): |
756 | +======= |
757 | + for arch in ('amd64', 'arm64', 'armhf', 'i386', 'powerpc', 'ppc64el', |
758 | + 's390x'): |
759 | +>>>>>>> MERGE-SOURCE |
760 | print(arch) |
761 | print('=' * len(arch)) |
762 | print() |
763 | |
764 | === modified file 'publish-image-set' |
765 | --- publish-image-set 2019-02-15 16:39:05 +0000 |
766 | +++ publish-image-set 2019-03-05 10:27:11 +0000 |
767 | @@ -54,8 +54,12 @@ |
768 | '(alternate|desktop|dvd|server(?: subiquity)?|mobile|base|active|wubi)(?: preinstalled)? ' |
769 | '(i386|amd64$|amd64\+mac|armel$|armel\+dove|armel\+omap$|armel\+omap4|' |
770 | 'armel\+ac100|armel\+mx5|armhf$|armhf\+omap$|armhf\+omap4|armhf\+ac100|' |
771 | +<<<<<<< TREE |
772 | 'armhf\+mx5|armhf\+nexus7|armhf\+raspi2|armhf\+raspi3|arm64$|arm64\+raspi3|' |
773 | 'powerpc|ppc64el|s390x)', re.I) |
774 | +======= |
775 | + 'armhf\+mx5|armhf\+nexus7|arm64|powerpc|ppc64el|s390x)', re.I) |
776 | +>>>>>>> MERGE-SOURCE |
777 | |
778 | # map an image type from the ISO tracker to a source directory for |
779 | # publish-release |
780 | |
781 | === modified file 'queuediff' |
782 | --- queuediff 2018-10-30 10:59:16 +0000 |
783 | +++ queuediff 2019-03-05 10:27:11 +0000 |
784 | @@ -41,7 +41,11 @@ |
785 | from launchpadlib.launchpad import Launchpad |
786 | |
787 | |
788 | +<<<<<<< TREE |
789 | default_release = 'cosmic' |
790 | +======= |
791 | +default_release = 'xenial' |
792 | +>>>>>>> MERGE-SOURCE |
793 | |
794 | lp = None |
795 | |
796 | |
797 | === modified file 'retry-autopkgtest-regressions' |
798 | --- retry-autopkgtest-regressions 2018-10-30 10:59:16 +0000 |
799 | +++ retry-autopkgtest-regressions 2019-03-05 10:27:11 +0000 |
800 | @@ -1,3 +1,4 @@ |
801 | +<<<<<<< TREE |
802 | #!/usr/bin/python3 |
803 | # Generate a list of autopkgtest request.cgi URLs to |
804 | # re-run all autopkgtests which regressed |
805 | @@ -190,3 +191,131 @@ |
806 | params += extra_params |
807 | url = request_url + '?' + urllib.parse.urlencode(params) |
808 | print(url) |
809 | +======= |
810 | +#!/usr/bin/python3 |
811 | +# Generate a set of run-autopkgtest commands (from britney2-ubuntu branch) to |
812 | +# re-run all autopkgtests which regressed |
813 | +# Run with ALL_PROPOSED=1 to generate run-autopkgtest commands with |
814 | +# --all-proposed, i. e. with disabling apt pinning to the trigger. |
815 | + |
816 | +# Copyright (C) 2015 Canonical Ltd. |
817 | +# Author: Martin Pitt <martin.pitt@ubuntu.com> |
818 | + |
819 | +# This library is free software; you can redistribute it and/or |
820 | +# modify it under the terms of the GNU Lesser General Public |
821 | +# License as published by the Free Software Foundation; either |
822 | +# version 2.1 of the License, or (at your option) any later version. |
823 | + |
824 | +# This library is distributed in the hope that it will be useful, |
825 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
826 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
827 | +# Lesser General Public License for more details. |
828 | + |
829 | +# You should have received a copy of the GNU Lesser General Public |
830 | +# License along with this library; if not, write to the Free Software |
831 | +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 |
832 | +# USA |
833 | + |
834 | +import urllib.request |
835 | +import argparse |
836 | +import yaml |
837 | + |
838 | +default_series = 'yakkety' |
839 | +args = None |
840 | + |
841 | + |
842 | +def parse_args(): |
843 | + parser = argparse.ArgumentParser('Generate run-autopkgtest commands to re-run regressions') |
844 | + parser.add_argument('-s', '--series', default=default_series, |
845 | + help='Ubuntu series (default: %(default)s)') |
846 | + parser.add_argument('--ci-train', metavar='SILONAME', |
847 | + help='Run for CI train silo, e. g. "landing-012"') |
848 | + parser.add_argument('--all-proposed', action='store_true', |
849 | + help='generate run-autopkgtest commands with ' |
850 | + '--all-proposed, i. e. with disabling apt pinning') |
851 | + parser.add_argument('--state', default='REGRESSION', |
852 | + help='generate commands for given test state (default: %(default)s)') |
853 | + parser.add_argument('--max-age', type=float, metavar='DAYS', |
854 | + help='only consider candiates which are at most ' |
855 | + 'this number of days old (float allowed)') |
856 | + parser.add_argument('--min-age', type=float, metavar='DAYS', |
857 | + help='only consider candiates which are at least ' |
858 | + 'this number of days old (float allowed)') |
859 | + return parser.parse_args() |
860 | + |
861 | + |
862 | +def get_regressions(excuses_url, release, retry_state, min_age, max_age): |
863 | + '''Return dictionary with regressions |
864 | + |
865 | + Return dict: release → arch → pkg → [trigger, ...] |
866 | + ''' |
867 | + # load YAML excuses |
868 | + with urllib.request.urlopen(excuses_url) as f: |
869 | + excuses = yaml.load(f) |
870 | + regressions = {} |
871 | + for excuse in excuses['sources']: |
872 | + # excuses are sorted by ascending age |
873 | + if min_age is not None and excuse['age'] is not None and excuse['age'] < min_age: |
874 | + continue |
875 | + if max_age is not None and excuse['age'] is not None and excuse['age'] > max_age: |
876 | + break |
877 | + for pkg, archinfo in excuse.get('tests', {}).get('autopkgtest', {}).items(): |
878 | + pkg = pkg.split()[0] # strip off version |
879 | + trigger = excuse['source'] + '/' + excuse['new-version'] |
880 | + for arch, state in archinfo.items(): |
881 | + if state[0] == retry_state: |
882 | + regressions.setdefault(release, {}).setdefault( |
883 | + arch, {}).setdefault(pkg, []).append(trigger) |
884 | + |
885 | + return regressions |
886 | + |
887 | + |
888 | +def get_rerun_map(regressions, release): |
889 | + '''Return dictionary with tests to re-run |
890 | + |
891 | + Return dict: release → arch → trigger_args → pkgs |
892 | + ''' |
893 | + rerun_map = {} |
894 | + for release, archmap in regressions.items(): |
895 | + for arch, triggermap in archmap.items(): |
896 | + # accumulate non-kernel triggers into one request, but run kernel |
897 | + # triggers separately |
898 | + for pkg, pkgtriggers in triggermap.items(): |
899 | + triggers = [] |
900 | + for trigger in pkgtriggers: |
901 | + if trigger.startswith('linux-meta'): |
902 | + rerun_map.setdefault(release, {}).setdefault( |
903 | + arch, {}).setdefault('--trigger=' + trigger, []).append(pkg) |
904 | + else: |
905 | + triggers.append(trigger) |
906 | + |
907 | + if triggers: |
908 | + trigstr = ' '.join(['--trigger=' + t for t in triggers]) |
909 | + rerun_map.setdefault(release, {}).setdefault( |
910 | + arch, {}).setdefault(trigstr, set()).add(pkg) |
911 | + |
912 | + return rerun_map |
913 | + |
914 | + |
915 | +args = parse_args() |
916 | + |
917 | +extra_opts = '' |
918 | +if args.all_proposed: |
919 | + extra_opts += '--all-proposed ' |
920 | + |
921 | +if args.ci_train: |
922 | + excuses_url = 'https://requests.ci-train.ubuntu.com/static/britney/' \ |
923 | + '%s/%s/excuses.yaml' % (args.series, args.ci_train) |
924 | + extra_opts += '--ppa ci-train-ppa-service/stable-phone-overlay ' \ |
925 | + '--ppa ci-train-ppa-service/%s ' % args.ci_train |
926 | +else: |
927 | + excuses_url = 'http://people.canonical.com/~ubuntu-archive/proposed-migration/%s/update_excuses.yaml' % args.series |
928 | +regressions = get_regressions(excuses_url, args.series, args.state, |
929 | + args.min_age, args.max_age) |
930 | +rerun_map = get_rerun_map(regressions, args.series) |
931 | +for release, archmap in rerun_map.items(): |
932 | + for arch, trigmap in archmap.items(): |
933 | + for trigger_args, pkgs in trigmap.items(): |
934 | + print('run-autopkgtest %s-s %s -a %s %s' % (extra_opts, release, arch, trigger_args), |
935 | + ' '.join(pkgs)) |
936 | +>>>>>>> MERGE-SOURCE |
937 | |
938 | === modified file 'sru-remove' |
939 | --- sru-remove 2018-10-30 10:59:16 +0000 |
940 | +++ sru-remove 2019-03-05 10:27:11 +0000 |
941 | @@ -117,7 +117,11 @@ |
942 | |
943 | if __name__ == '__main__': |
944 | |
945 | +<<<<<<< TREE |
946 | default_release = 'cosmic' |
947 | +======= |
948 | + default_release = 'xenial' |
949 | +>>>>>>> MERGE-SOURCE |
950 | removal_comment = ('The package was removed due to its SRU bug(s) ' |
951 | 'not being verified in a timely fashion.') |
952 | |
953 | |
954 | === modified file 'sru-report' |
955 | --- sru-report 2019-02-01 05:39:42 +0000 |
956 | +++ sru-report 2019-03-05 10:27:11 +0000 |
957 | @@ -269,12 +269,19 @@ |
958 | if not srus[release]: |
959 | continue |
960 | print('''<h3>%s</h3> |
961 | +<<<<<<< TREE |
962 | <table id='%s'> |
963 | <tr><th>Package</th><th>-release</th><th>-updates</th> |
964 | <th>-proposed (signer, creator)</th> |
965 | <th>changelog bugs</th><th>days</th></tr>''' % (release, release)) |
966 | +======= |
967 | +<table id='%s'> |
968 | + <tr><th>Package</th><th>-release</th><th>-updates</th><th>-proposed</th> |
969 | + <th>changelog bugs</th><th>days</th></tr>''' % (release, release)) |
970 | +>>>>>>> MERGE-SOURCE |
971 | for pkg, pub in sorted(pkg_index[release].iteritems(), |
972 | key=itemgetter(1)): |
973 | +<<<<<<< TREE |
974 | # skip everything that shows up on the kernel SRU reports |
975 | if (pkg in ('linux', 'linux-hwe', 'linux-hwe-edge', |
976 | 'linux-kvm', 'linux-oem', |
977 | @@ -296,6 +303,17 @@ |
978 | if (pkg.startswith('kde-l10n-') and pkg != 'kde-l10n-de'): |
979 | continue |
980 | |
981 | +======= |
982 | + # skip everything that shows up on the kernel SRU reports |
983 | + if (pkg in ('linux', 'linux-keystone', |
984 | + 'linux-armadaxp', 'linux-ti-omap4') or |
985 | + pkg.startswith('linux-signed') or |
986 | + pkg.startswith('linux-meta') or |
987 | + pkg.startswith('linux-lts') or |
988 | + pkg.startswith('linux-backports-modules')): |
989 | + continue |
990 | + |
991 | +>>>>>>> MERGE-SOURCE |
992 | rpkg = srus[release][pkg] |
993 | pkgurl = '%s/ubuntu/+source/%s/' % (lp_url, pkg) |
994 | age = (datetime.datetime.now() - rpkg['published'].replace( |
995 | @@ -641,6 +659,17 @@ |
996 | distro_series=releases[release]): |
997 | pkg = published.source_package_name |
998 | |
999 | +<<<<<<< TREE |
1000 | +======= |
1001 | + # for langpack updates, only keep -en as a representative |
1002 | + if (pkg.startswith('language-pack-') and |
1003 | + pkg not in ('language-pack-en', 'language-pack-en-base')): |
1004 | + continue |
1005 | + |
1006 | + if (pkg.startswith('kde-l10n-') and pkg != 'kde-l10n-de'): |
1007 | + continue |
1008 | + |
1009 | +>>>>>>> MERGE-SOURCE |
1010 | srus[release][pkg] = current_versions(releases[release], pkg) |
1011 | srus[release][pkg]['bugs'] = match_srubugs( |
1012 | srus[release][pkg]['changesfiles']) |
1013 | @@ -661,6 +690,7 @@ |
1014 | if pkg in pkg_excuses: |
1015 | for excuse in excuses_data['sources']: |
1016 | if excuse['source'] == pkg: |
1017 | +<<<<<<< TREE |
1018 | if 'autopkgtest' not in excuse['policy_info']: |
1019 | continue |
1020 | for testpkg in excuse['policy_info']['autopkgtest']: |
1021 | @@ -674,6 +704,21 @@ |
1022 | testpkg_idx = testpkg_name[0] |
1023 | autopkg_url = 'http://autopkgtest.ubuntu.com/packages/%s/%s/%s/%s' % (testpkg_idx, testpkg_name, release, arch) |
1024 | srus[release][pkg]['autopkg_fails'].append('Regression in autopkgtest for <a href="%s">%s (%s)</a>: <a href="%s">test log</a>' % (autopkg_url, testpkg_name, arch, link)) |
1025 | +======= |
1026 | + if 'autopkgtest' not in excuse['tests']: |
1027 | + continue |
1028 | + for testpkg in excuse['tests']['autopkgtest']: |
1029 | + for arch in excuse['tests']['autopkgtest'][testpkg]: |
1030 | + if excuse['tests']['autopkgtest'][testpkg][arch][0] == 'REGRESSION': |
1031 | + link = excuse['tests']['autopkgtest'][testpkg][arch][1] |
1032 | + testpkg_name = testpkg.split(' ')[0] |
1033 | + if testpkg_name.startswith('lib'): |
1034 | + testpkg_idx = testpkg_name[:3] |
1035 | + else: |
1036 | + testpkg_idx = testpkg_name[0] |
1037 | + autopkg_url = 'http://autopkgtest.ubuntu.com/packages/%s/%s/%s/%s/' % (testpkg_idx, testpkg_name, release, arch) |
1038 | + srus[release][pkg]['autopkg_fails'].append('Regression in autopkgtest for <a href="%s">%s (%s)</a>: <a href="%s">test log</a>' % (autopkg_url, testpkg, arch, link)) |
1039 | +>>>>>>> MERGE-SOURCE |
1040 | |
1041 | return srus |
1042 | |
1043 | |
1044 | === modified file 'sru-review' |
1045 | --- sru-review 2018-10-30 10:59:16 +0000 |
1046 | +++ sru-review 2019-03-05 10:27:11 +0000 |
1047 | @@ -130,7 +130,11 @@ |
1048 | uploads = [upload for upload in |
1049 | series.getPackageUploads(archive=archive, exact_match=True, |
1050 | name=sourcepkg, pocket='Proposed', |
1051 | +<<<<<<< TREE |
1052 | status=queue, version=version)] |
1053 | +======= |
1054 | + status=options.queue, version=version)] |
1055 | +>>>>>>> MERGE-SOURCE |
1056 | if len(uploads) == 0: |
1057 | print('ERROR: Queue does not have an upload of this source.', |
1058 | file=sys.stderr) |
1059 | @@ -255,7 +259,11 @@ |
1060 | |
1061 | if __name__ == '__main__': |
1062 | |
1063 | +<<<<<<< TREE |
1064 | default_release = 'cosmic' |
1065 | +======= |
1066 | + default_release = 'xenial' |
1067 | +>>>>>>> MERGE-SOURCE |
1068 | ppa_url = ('https://launchpad.net/~%s/+archive/ubuntu/%s/+packages?' |
1069 | 'field.series_filter=%s') |
1070 | |
1071 | |
1072 | === modified file 'ubuntu-changes' |
1073 | --- ubuntu-changes 2018-10-30 10:59:16 +0000 |
1074 | +++ ubuntu-changes 2019-03-05 10:27:11 +0000 |
1075 | @@ -14,7 +14,11 @@ |
1076 | # You should have received a copy of the GNU General Public License |
1077 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
1078 | |
1079 | +<<<<<<< TREE |
1080 | DIST="${DIST:-disco}" |
1081 | +======= |
1082 | +DIST="${DIST:-yakkety}" |
1083 | +>>>>>>> MERGE-SOURCE |
1084 | |
1085 | MADISON="$(rmadison -a source -s "$DIST" "$1")" |
1086 | [ "$MADISON" ] || exit 1 |
1087 | @@ -51,7 +55,11 @@ |
1088 | target="${target%;}" |
1089 | target="${target%%-*}" |
1090 | case $target in |
1091 | +<<<<<<< TREE |
1092 | warty|hoary|breezy|dapper|edgy|feisty|gutsy|hardy|intrepid|jaunty|karmic|lucid|maverick|natty|oneiric|precise|quantal|raring|saucy|trusty|utopic|vivid|wily|xenial|yakkety|zesty|artful|bionic|cosmic|disco|devel) |
1093 | +======= |
1094 | + warty|hoary|breezy|dapper|edgy|feisty|gutsy|hardy|intrepid|jaunty|karmic|lucid|maverick|natty|oneiric|precise|quantal|raring|saucy|trusty|utopic|vivid|wily|xenial|yakkety|devel) |
1095 | +>>>>>>> MERGE-SOURCE |
1096 | ;; |
1097 | *) |
1098 | exit 0 |
1099 | |
1100 | === added file 'update-output-helper' |
1101 | --- update-output-helper 1970-01-01 00:00:00 +0000 |
1102 | +++ update-output-helper 2019-03-05 10:27:11 +0000 |
1103 | @@ -0,0 +1,134 @@ |
1104 | +#!/bin/bash |
1105 | + |
1106 | +# Run me like this: |
1107 | +# Download all the Packages files |
1108 | +# update-output-helper -u |
1109 | +# Create a worldview that britney is trying to mutate us to |
1110 | +# update-output-helper package/version package2/version2/ ... |
1111 | +# outputs an apt-get commandline to use |
1112 | +# Then call apt with this world view |
1113 | +# <apt-get command> update |
1114 | +# <apt-get command> --dry-run install <some uninstallable package> |
1115 | +# and you can drill down as normal to find which package(s) need fixing |
1116 | + |
1117 | +set -e |
1118 | + |
1119 | +GETOPT=$(getopt --options uh --long update,help -n "${0}" -- "$@") |
1120 | + |
1121 | +eval set -- "${GETOPT}" |
1122 | + |
1123 | +ARCH=${ARCH:-$(dpkg-architecture -qDEB_HOST_ARCH)} |
1124 | +CACHEDIR=${XDG_CACHE_HOME:-$HOME/.cache}/brapt |
1125 | +APTDIR=${CACHEDIR}/aptroot |
1126 | +RELEASE=$(ubuntu-distro-info --devel) |
1127 | +RELEASE_PACKAGES="${CACHEDIR}/Packages_${RELEASE}" |
1128 | +PROPOSED_PACKAGES="${CACHEDIR}/Packages_${RELEASE}-proposed" |
1129 | + |
1130 | +[ ! -d "${CACHEDIR}" ] && mkdir -p "${CACHEDIR}" |
1131 | +[ ! -d "${APTDIR}" ] && mkdir -p "${APTDIR}" |
1132 | + |
1133 | +ensure_programs() { |
1134 | + if [ $# -gt 0 ] && ! type "${1}" >/dev/null 2>/dev/null; then |
1135 | + echo "Required program $1 not found." |
1136 | + exit 1 |
1137 | + fi |
1138 | + |
1139 | + shift |
1140 | + |
1141 | + if [ $# -gt 0 ]; then |
1142 | + ensure_programs $* |
1143 | + fi |
1144 | +} |
1145 | + |
1146 | +ensure_apt_structure() { |
1147 | + mkdir -p "${APTDIR}/etc/apt/preferences.d" \ |
1148 | + "${APTDIR}/var/cache/apt/archives/partial" \ |
1149 | + "${APTDIR}/var/lib/apt/lists" |
1150 | + [ ! -e "etc/apt/sources.list" ] && \ |
1151 | + echo "deb [allow-insecure=yes] file://${APTDIR} ./" > "${APTDIR}/etc/apt/sources.list" |
1152 | + touch "${APTDIR}/status" |
1153 | +} |
1154 | + |
1155 | +update() { |
1156 | + case ${ARCH} in |
1157 | + i386|amd64) |
1158 | + local MIRROR="http://archive.ubuntu.com/ubuntu" |
1159 | + ;; |
1160 | + *) |
1161 | + local MIRROR="http://ports.ubuntu.com" |
1162 | + ;; |
1163 | + esac |
1164 | + |
1165 | + local COMPONENTS=(main universe multiverse restricted) |
1166 | + for series in "${RELEASE}" "${RELEASE}-proposed"; do |
1167 | + local FILE="${CACHEDIR}/Packages_${series}" |
1168 | + [ -e "${FILE}" ] && rm "${FILE}" |
1169 | + for component in "${COMPONENTS[@]}"; do |
1170 | + local URL="${MIRROR}/dists/${series}/${component}/binary-${ARCH}/Packages.xz" |
1171 | + echo "Downloading ${URL}" |
1172 | + wget -q -O - "${URL}" | xzcat >> "${CACHEDIR}/Packages_${series}" |
1173 | + done |
1174 | + done |
1175 | +} |
1176 | + |
1177 | +while true; do |
1178 | + case "$1" in |
1179 | + -u|--update) |
1180 | + update |
1181 | + shift |
1182 | + ;; |
1183 | + -h|--help) |
1184 | + echo "Usage: $0 [-u] package/version ..." |
1185 | + shift |
1186 | + ;; |
1187 | + --) |
1188 | + shift |
1189 | + break |
1190 | + ;; |
1191 | + *) |
1192 | + echo "Error" |
1193 | + exit 1; |
1194 | + ;; |
1195 | + esac |
1196 | +done |
1197 | + |
1198 | +if [ $# -eq 0 ]; then |
1199 | + exit 0 |
1200 | +fi |
1201 | + |
1202 | +PROPOSED_PATTERN=() |
1203 | +RELEASE_PATTERN=() |
1204 | + |
1205 | +while [ $# -gt 0 ]; do |
1206 | + PKG=${1%/*} |
1207 | + VERSION=${1#*/} |
1208 | + shift |
1209 | + |
1210 | + if [ "${PKG}" = "${VERSION}" ]; then |
1211 | + echo "Error: ${PKG} is not in the format PACKAGE/VERSION" >&2 |
1212 | + exit 1 |
1213 | + fi |
1214 | + |
1215 | + if [ $# -gt 0 ]; then |
1216 | + O="-o " |
1217 | + else |
1218 | + O= |
1219 | + fi |
1220 | + |
1221 | + PKGVER="${PKG} (${VERSION})" |
1222 | + # Select: Packages from the right source/version or Packages with different binary version ("Source: sourcepackage (sourceversion)") |
1223 | + PROPOSED_PATTERN+=('(' -X -S ${PKG} -a -FVersion ${VERSION} ')' -o '(' -X -S "${PKGVER}" ')' ${O}) |
1224 | + # Remove: Packages from the right source/wrong version or Packages from the right source/wrong version (binary has different version to source) |
1225 | + RELEASE_PATTERN+=('(' -X -S ${PKG} -a -! -FVersion ${VERSION} ')' -o '(' '(' -e -S "${PKG} " ')' -a '(' -! -X -S "${PKGVER}" ')' ')' ${O}) |
1226 | +done |
1227 | + |
1228 | +ensure_programs wget grep-dctrl xzcat |
1229 | + |
1230 | +ensure_apt_structure |
1231 | + |
1232 | +cat ${RELEASE_PACKAGES[@]} | grep-dctrl -v "${RELEASE_PATTERN[@]}" > ${APTDIR}/Packages |
1233 | +cat ${PROPOSED_PACKAGES[@]} | grep-dctrl "${PROPOSED_PATTERN[@]}" >> ${APTDIR}/Packages |
1234 | + |
1235 | +apt-get -oDir=${APTDIR} -oDir::State::status=${APTDIR}/status update |
1236 | + |
1237 | +echo "apt-get -oDir=${APTDIR} -oDir::State::status=${APTDIR}/status --dry-run install <some broken package> ..." |
I should fix this to make it a wrapper (or something similar) before we merge - the interface is a bit weird currently.