Merge lp:~laney/ubuntu-archive-tools/update-output-helper into lp:ubuntu-archive-tools

Proposed by Iain Lane
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
Reviewer Review Type Date Requested Status
Steve Langasek Disapprove
Review via email: mp+267970@code.launchpad.net

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.

To post a comment you must log in.
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.

Revision history for this message
Iain Lane (laney) wrote :

I should fix this to make it a wrapper (or something similar) before we merge - the interface is a bit weird currently.

977. By Martin Pitt

Add retry-autopkgtest-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-autopkgtest-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-autopkgtest-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

Merge lp:~brian-murray/ubuntu-archive-tools/add-snappy-dev

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-autopkgtest-regressions: Use argparse

1001. By Martin Pitt

retry-autopkgtest-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-autopkgtest-regressions: Add --ci-train option

1003. By Martin Pitt

retry-autopkgtest-regressions: Add --max-age option

1004. By Martin Pitt

retry-autopkgtest-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-autopkgtest-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

merge lp:~vorlon/ubuntu-archive-tools/update-output-helper

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.

Revision history for this message
Steve Langasek (vorlon) wrote :
review: Disapprove

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

merge lp:~vorlon/ubuntu-archive-tools/update-output-helper

1024. By Iain Lane

xz

1023. By Iain Lane

merge

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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 &amp; otherwise the svg will have a syntax error
216 url = ("https://launchpad.net/ubuntu/+source/%s/+filebug?"
217+<<<<<<< TREE
218 "field.title=%s&amp;field.status=Incomplete"
219 "&amp;field.tags=%s" %
220 (quote_plus(name), quote_plus("[MIR] %s" % name),
221 quote_plus(suite)))
222+=======
223+ "field.title=%s&amp;field.status=Incomplete+(without+response)"
224+ "&amp;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> ..."

Subscribers

People subscribed via source and target branches