Merge lp:~robert-ancell/update-manager/ua-focal-merge into lp:~ubuntu-core-dev/update-manager/jammy

Proposed by Robert Ancell
Status: Merged
Merge reported by: Sebastien Bacher
Merged at revision: not available
Proposed branch: lp:~robert-ancell/update-manager/ua-focal-merge
Merge into: lp:~ubuntu-core-dev/update-manager/jammy
Diff against target: 598 lines (+295/-53) (has conflicts)
6 files modified
UpdateManager/Core/UpdateList.py (+54/-13)
UpdateManager/Dialogs.py (+4/-4)
UpdateManager/UpdateManager.py (+99/-32)
UpdateManager/UpdatesAvailable.py (+21/-4)
debian/changelog (+109/-0)
tests/test_meta_release_core.py (+8/-0)
Text conflict in UpdateManager/UpdateManager.py
Text conflict in debian/changelog
Text conflict in tests/test_meta_release_core.py
To merge this branch: bzr merge lp:~robert-ancell/update-manager/ua-focal-merge
Reviewer Review Type Date Requested Status
Ubuntu Core Development Team Pending
Review via email: mp+435931@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Robert Ancell (robert-ancell) wrote :

Merged because this has been uploaded as a SRU.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'UpdateManager/Core/UpdateList.py'
2--- UpdateManager/Core/UpdateList.py 2021-02-05 21:17:38 +0000
3+++ UpdateManager/Core/UpdateList.py 2023-01-18 03:41:43 +0000
4@@ -44,11 +44,12 @@
5
6
7 class UpdateItem():
8- def __init__(self, pkg, name, icon, to_remove):
9+ def __init__(self, pkg, name, icon, to_remove, sensitive=True):
10 self.icon = icon
11 self.name = name
12 self.pkg = pkg
13 self.to_remove = to_remove
14+ self.sensitive = sensitive
15
16 def is_selected(self):
17 if not self.to_remove:
18@@ -60,13 +61,13 @@
19 class UpdateGroup(UpdateItem):
20 _depcache = {}
21
22- def __init__(self, pkg, name, icon, to_remove):
23- UpdateItem.__init__(self, pkg, name, icon, to_remove)
24+ def __init__(self, pkg, name, icon, to_remove, sensitive=True):
25+ UpdateItem.__init__(self, pkg, name, icon, to_remove, sensitive)
26 self._items = set()
27 self._deps = set()
28 self.core_item = None
29 if pkg is not None:
30- self.core_item = UpdateItem(pkg, name, icon, to_remove)
31+ self.core_item = UpdateItem(pkg, name, icon, to_remove, sensitive)
32 self._items.add(self.core_item)
33
34 @property
35@@ -75,10 +76,11 @@
36 all_items.extend(self._items)
37 return sorted(all_items, key=lambda a: a.name.lower())
38
39- def add(self, pkg, cache=None, eventloop_callback=None, to_remove=False):
40+ def add(self, pkg, cache=None, eventloop_callback=None, to_remove=False,
41+ sensitive=True):
42 name = utils.get_package_label(pkg)
43 icon = Gio.ThemedIcon.new("package")
44- self._items.add(UpdateItem(pkg, name, icon, to_remove))
45+ self._items.add(UpdateItem(pkg, name, icon, to_remove, sensitive))
46 # If the pkg is in self._deps, stop here. We have already calculated
47 # the recursive dependencies for this package, no need to do it again.
48 if cache and pkg.name in cache and pkg.name not in self._deps:
49@@ -154,27 +156,29 @@
50
51
52 class UpdateApplicationGroup(UpdateGroup):
53- def __init__(self, pkg, application, to_remove):
54+ def __init__(self, pkg, application, to_remove, sensitive=True):
55 name = application.get_display_name()
56 icon = application.get_icon()
57 super(UpdateApplicationGroup, self).__init__(pkg, name, icon,
58- to_remove)
59+ to_remove, sensitive)
60
61
62 class UpdatePackageGroup(UpdateGroup):
63- def __init__(self, pkg, to_remove):
64+ def __init__(self, pkg, to_remove, sensitive=True):
65 name = utils.get_package_label(pkg)
66 icon = Gio.ThemedIcon.new("package")
67- super(UpdatePackageGroup, self).__init__(pkg, name, icon, to_remove)
68+ super(UpdatePackageGroup, self).__init__(pkg, name, icon, to_remove,
69+ sensitive)
70
71
72 class UpdateSystemGroup(UpdateGroup):
73- def __init__(self, cache, to_remove):
74+ def __init__(self, cache, to_remove, sensitive=True):
75 # Translators: the %s is a distro name, like 'Ubuntu' and 'base' as in
76 # the core components and packages.
77 name = _("%s base") % utils.get_ubuntu_flavor_name(cache=cache)
78 icon = Gio.ThemedIcon.new("distributor-logo")
79- super(UpdateSystemGroup, self).__init__(None, name, icon, to_remove)
80+ super(UpdateSystemGroup, self).__init__(None, name, icon, to_remove,
81+ sensitive)
82
83
84 class UpdateOrigin():
85@@ -216,6 +220,7 @@
86 self.security_groups = []
87 self.kernel_autoremove_groups = []
88 self.duplicate_groups = []
89+ self.ubuntu_pro_groups = []
90 self.num_updates = 0
91 self.random = random.Random()
92 self.ignored_phased_updates = []
93@@ -464,7 +469,8 @@
94
95 return app_groups + pkg_groups
96
97- def update(self, cache, eventloop_callback=None, duplicate_packages=[]):
98+ def update(self, cache, eventloop_callback=None, duplicate_packages=[],
99+ ua_security_packages=[]):
100 self.held_back = []
101
102 # do the upgrade
103@@ -476,6 +482,34 @@
104 kernel_autoremove_pkgs = []
105 duplicate_pkgs = []
106
107+ class FakeUbuntuProPackageCandidate:
108+ def __init__(self, source_name, version, size):
109+ self.source_name = source_name
110+ self.summary = source_name
111+ self.description = source_name
112+ self.version = version
113+ self.size = size
114+ self.downloadable = False
115+ self.record = {}
116+
117+ class FakeUbuntuProPackage:
118+ def __init__(self, package_name, version, size):
119+ self.name = package_name
120+ self.candidate = FakeUbuntuProPackageCandidate(package_name,
121+ version, size)
122+ self.marked_install = False
123+ self.marked_upgrade = False
124+
125+ def mark_install(self):
126+ pass
127+
128+ def mark_delete(self):
129+ pass
130+ fake_ua_packages = []
131+ for (package_name, version, size) in ua_security_packages:
132+ fake_ua_packages.append(FakeUbuntuProPackage(package_name,
133+ version, size))
134+
135 # Find all upgradable packages
136 for pkg in cache:
137 if pkg.is_upgradable or pkg.marked_install:
138@@ -541,3 +575,10 @@
139 cache, kernel_autoremove_pkgs, eventloop_callback, True)
140 self.duplicate_groups = self._make_groups(
141 cache, duplicate_pkgs, eventloop_callback, True)
142+ if len(fake_ua_packages) > 0:
143+ ubuntu_pro_group = UpdateGroup(None,
144+ "Ubuntu Pro (enable in Settings…)",
145+ None, False, False)
146+ for package in fake_ua_packages:
147+ ubuntu_pro_group.add(package)
148+ self.ubuntu_pro_groups = [ubuntu_pro_group]
149
150=== modified file 'UpdateManager/Dialogs.py'
151--- UpdateManager/Dialogs.py 2021-01-05 20:24:02 +0000
152+++ UpdateManager/Dialogs.py 2023-01-18 03:41:43 +0000
153@@ -168,10 +168,10 @@
154 self.settings_button and \
155 self._has_livepatch_settings_ui() and \
156 self.settings.get_int('launch-count') >= 4:
157- self.set_desc(_("<b>Tip:</b> You can use Livepatch to "
158- "keep your computer more secure between "
159- "restarts."))
160- self.settings_button.set_label(_("Settings & Livepatch…"))
161+ self.set_desc(_("<b>Tip:</b> You can use Livepatch with "
162+ "Ubuntu Pro to keep your computer more "
163+ "secure between restarts."))
164+ self.settings_button.set_label(_("Settings & Pro…"))
165 return
166
167 needs_reschedule = False
168
169=== modified file 'UpdateManager/UpdateManager.py'
170--- UpdateManager/UpdateManager.py 2021-12-10 20:29:40 +0000
171+++ UpdateManager/UpdateManager.py 2023-01-18 03:41:43 +0000
172@@ -35,7 +35,12 @@
173 DeprecationWarning)
174
175 import distro_info
176-import fnmatch
177+<<<<<<< TREE
178+import fnmatch
179+=======
180+import fnmatch
181+import json
182+>>>>>>> MERGE-SOURCE
183 import os
184 import subprocess
185 import sys
186@@ -85,6 +90,7 @@
187 self.unity = UnitySupport()
188 self.controller = None
189 self.cache = None
190+ self.ua_security_packages = []
191 self.update_list = None
192 self.meta_release = None
193 self.hwe_replacement_packages = None
194@@ -247,27 +253,72 @@
195 cancelled_update, error_occurred)
196 self._start_pane(pane)
197
198- def _check_oem_metapackages(self):
199- di = distro_info.UbuntuDistroInfo()
200- codename = get_dist()
201- lts = di.is_lts(codename)
202- if not lts:
203- return None
204- OEM_PATH = os.path.join(GLib.get_user_runtime_dir(),
205- "ubuntu-drivers-oem.package-list")
206- if not os.path.exists(OEM_PATH):
207- return None
208-
209- # Packages that aren't installed but apply to this system
210- with open(OEM_PATH, 'r') as f:
211- self.oem_metapackages |= set(f.read().splitlines())
212-
213- # Packages that are already installed
214- for pkg in self.cache:
215- if fnmatch.fnmatch(pkg.name, 'oem-*-meta') \
216- and pkg.installed:
217- self.oem_metapackages.add(pkg)
218-
219+<<<<<<< TREE
220+ def _check_oem_metapackages(self):
221+ di = distro_info.UbuntuDistroInfo()
222+ codename = get_dist()
223+ lts = di.is_lts(codename)
224+ if not lts:
225+ return None
226+ OEM_PATH = os.path.join(GLib.get_user_runtime_dir(),
227+ "ubuntu-drivers-oem.package-list")
228+ if not os.path.exists(OEM_PATH):
229+ return None
230+
231+ # Packages that aren't installed but apply to this system
232+ with open(OEM_PATH, 'r') as f:
233+ self.oem_metapackages |= set(f.read().splitlines())
234+
235+ # Packages that are already installed
236+ for pkg in self.cache:
237+ if fnmatch.fnmatch(pkg.name, 'oem-*-meta') \
238+ and pkg.installed:
239+ self.oem_metapackages.add(pkg)
240+
241+=======
242+ def _check_oem_metapackages(self):
243+ di = distro_info.UbuntuDistroInfo()
244+ codename = get_dist()
245+ lts = di.is_lts(codename)
246+ if not lts:
247+ return None
248+ OEM_PATH = os.path.join(GLib.get_user_runtime_dir(),
249+ "ubuntu-drivers-oem.package-list")
250+ if not os.path.exists(OEM_PATH):
251+ return None
252+
253+ # Packages that aren't installed but apply to this system
254+ with open(OEM_PATH, 'r') as f:
255+ self.oem_metapackages |= set(f.read().splitlines())
256+
257+ # Packages that are already installed
258+ for pkg in self.cache:
259+ if fnmatch.fnmatch(pkg.name, 'oem-*-meta') \
260+ and pkg.installed:
261+ self.oem_metapackages.add(pkg)
262+
263+ def _get_ua_security_status(self):
264+ self.ua_security_packages = []
265+ try:
266+ p = subprocess.Popen(['ua', 'security-status', '--format=json'],
267+ stdout=subprocess.PIPE)
268+ except OSError:
269+ pass
270+ else:
271+ while p.poll() is None:
272+ while Gtk.events_pending():
273+ Gtk.main_iteration()
274+ time.sleep(0.05)
275+ s = json.load(p.stdout)
276+ for package in s.get('packages', []):
277+ status = package.get('status', '')
278+ if status == 'pending_attach':
279+ name = package.get('name', '')
280+ version = package.get('version', '')
281+ size = package.get('download_size', 0)
282+ self.ua_security_packages.append((name, version, size))
283+
284+>>>>>>> MERGE-SOURCE
285 def _make_available_pane(self, install_count, need_reboot=False,
286 cancelled_update=False, error_occurred=False):
287 self._check_hwe_support_status()
288@@ -421,19 +472,35 @@
289 Gtk.main_iteration()
290 iterate()
291
292- self._check_oem_metapackages()
293-
294- for pkgname in self.oem_metapackages:
295- try:
296- if not self.cache[pkgname].is_installed:
297- self.cache[pkgname].mark_install()
298- except SystemError:
299- pass
300-
301+<<<<<<< TREE
302+ self._check_oem_metapackages()
303+
304+ for pkgname in self.oem_metapackages:
305+ try:
306+ if not self.cache[pkgname].is_installed:
307+ self.cache[pkgname].mark_install()
308+ except SystemError:
309+ pass
310+
311+=======
312+ self._check_oem_metapackages()
313+
314+ self._get_ua_security_status()
315+
316+ for pkgname in self.oem_metapackages:
317+ try:
318+ if not self.cache[pkgname].is_installed:
319+ self.cache[pkgname].mark_install()
320+ except SystemError:
321+ pass
322+
323+>>>>>>> MERGE-SOURCE
324 self.update_list = UpdateList(self)
325 try:
326 self.update_list.update(self.cache, eventloop_callback=iterate,
327- duplicate_packages=self.duplicate_packages)
328+ duplicate_packages=self.duplicate_packages,
329+ ua_security_packages=self.
330+ ua_security_packages)
331 except SystemError as e:
332 header = _("Could not calculate the upgrade")
333 desc = _("An unresolvable problem occurred while "
334
335=== modified file 'UpdateManager/UpdatesAvailable.py'
336--- UpdateManager/UpdatesAvailable.py 2020-12-14 11:10:57 +0000
337+++ UpdateManager/UpdatesAvailable.py 2023-01-18 03:41:43 +0000
338@@ -74,7 +74,8 @@
339 # - screen reader does not say "Downloaded" for downloaded updates
340
341 # list constants
342-(LIST_NAME, LIST_UPDATE_DATA, LIST_SIZE, LIST_TOGGLE_ACTIVE) = range(4)
343+(LIST_NAME, LIST_UPDATE_DATA, LIST_SIZE, LIST_TOGGLE_ACTIVE,
344+ LIST_SENSITIVE) = range(5)
345
346 # NetworkManager enums
347 from .Core.roam import NetworkManagerHelper
348@@ -261,7 +262,7 @@
349 changes_buffer.create_tag("versiontag", weight=Pango.Weight.BOLD)
350
351 # the treeview (move into it's own code!)
352- self.store = Gtk.TreeStore(str, GObject.TYPE_PYOBJECT, str, bool)
353+ self.store = Gtk.TreeStore(str, GObject.TYPE_PYOBJECT, str, bool, bool)
354 self.treeview_update.set_model(None)
355
356 self.image_restart.set_from_gicon(self.get_restart_icon(),
357@@ -293,6 +294,8 @@
358 pkg_column.pack_start(pkg_toggle_renderer, False)
359 pkg_column.add_attribute(pkg_toggle_renderer,
360 'active', LIST_TOGGLE_ACTIVE)
361+ pkg_column.add_attribute(pkg_toggle_renderer,
362+ 'sensitive', LIST_SENSITIVE)
363 pkg_column.set_cell_data_func(pkg_toggle_renderer,
364 self.pkg_toggle_renderer_data_func)
365
366@@ -319,6 +322,8 @@
367 size_column = Gtk.TreeViewColumn(_("Download"), size_renderer,
368 text=LIST_SIZE)
369 size_column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
370+ size_column.add_attribute(size_renderer,
371+ 'sensitive', LIST_SENSITIVE)
372 self.treeview_update.append_column(size_column)
373
374 self.treeview_update.set_headers_visible(True)
375@@ -404,8 +409,11 @@
376 def restart_icon_renderer_data_func(self, cell_layout, renderer, model,
377 iter, user_data):
378 data = model.get_value(iter, LIST_UPDATE_DATA)
379+ sensitive = model.get_value(iter, LIST_SENSITIVE)
380 path = model.get_path(iter)
381
382+ renderer.set_sensitive(sensitive)
383+
384 requires_restart = False
385 if data.item and data.item.pkg:
386 requires_restart = self.pkg_requires_restart(data.item.pkg)
387@@ -433,6 +441,7 @@
388 if data.item:
389 activatable = data.item.pkg.name not in self.list.held_back
390 inconsistent = False
391+ renderer.set_sensitive(data.item.sensitive)
392 elif data.group:
393 activatable = True
394 inconsistent = data.group.selection_is_inconsistent()
395@@ -485,8 +494,11 @@
396 def pkg_label_renderer_data_func(self, cell_layout, renderer, model,
397 iter, user_data):
398 data = model.get_value(iter, LIST_UPDATE_DATA)
399+ sensitive = model.get_value(iter, LIST_SENSITIVE)
400 name = GLib.markup_escape_text(model.get_value(iter, LIST_NAME))
401
402+ renderer.set_sensitive(sensitive)
403+
404 if data.group:
405 markup = name
406 elif data.item:
407@@ -1000,6 +1012,7 @@
408 name,
409 UpdateData(groups, None, None),
410 humanize_size(total_size),
411+ True,
412 True
413 ]
414 return self.store.append(None, header_row)
415@@ -1023,7 +1036,8 @@
416 group.name,
417 UpdateData(None, group, group_is_item),
418 humanize_size(group.get_total_size()),
419- True
420+ True,
421+ group.sensitive
422 ]
423 group_iter = self.store.append(None, group_row)
424
425@@ -1034,7 +1048,8 @@
426 item.name,
427 UpdateData(None, None, item),
428 humanize_size(getattr(item.pkg.candidate, "size", 0)),
429- True
430+ True,
431+ group.sensitive
432 ]
433 self.store.append(group_iter, item_row)
434
435@@ -1077,6 +1092,8 @@
436 _("Duplicate packages to be removed"),
437 self.list.duplicate_groups)
438 self._add_groups(self.list.duplicate_groups)
439+ if self.list.ubuntu_pro_groups:
440+ self._add_groups(self.list.ubuntu_pro_groups)
441
442 self.treeview_update.set_model(self.store)
443 self.pkg_cell_area.indent_toplevel = (
444
445=== modified file 'UpdateManager/backend/__init__.py'
446=== modified file 'debian/changelog'
447--- debian/changelog 2022-12-01 19:09:52 +0000
448+++ debian/changelog 2023-01-18 03:41:43 +0000
449@@ -1,3 +1,4 @@
450+<<<<<<< TREE
451 update-manager (1:22.04.10) jammy; urgency=medium
452
453 [ Renan Rodrigo ]
454@@ -218,6 +219,114 @@
455
456 -- Brian Murray <brian@ubuntu.com> Wed, 27 May 2020 13:29:24 -0700
457
458+=======
459+update-manager (1:20.04.10.12) focal; urgency=medium
460+
461+ * Show pending Ubuntu pro packages (LP: #1990450)
462+
463+ -- Robert Ancell <robert.ancell@canonical.com> Wed, 18 Jan 2023 15:03:27 +1300
464+
465+update-manager (1:20.04.10.11) focal; urgency=medium
466+
467+ [ Renan Rodrigo ]
468+ * ubuntu-security-status: Don't show ESM Apps information when the service
469+ is disabled, and prefer 'pro security-status' when it is available.
470+ (LP: #1991533)
471+
472+ -- Brian Murray <brian@ubuntu.com> Thu, 01 Dec 2022 11:10:57 -0800
473+
474+update-manager (1:20.04.10.10) focal; urgency=medium
475+
476+ * ubuntu-security-status: Check if ESM for Apps is enabled or if it is not
477+ in beta before displaying information about the packages available from
478+ there. Additionally, improve pluralization in a couple of locations.
479+ (LP: #1955471)
480+
481+ -- Brian Murray <brian@ubuntu.com> Fri, 14 Jan 2022 10:28:42 -0800
482+
483+update-manager (1:20.04.10.9) focal; urgency=medium
484+
485+ * ubuntu-security-status: use ubuntu-advantage-tools to determine whether or
486+ not livepatch or esm are enabled and if the system is attached. Thanks to
487+ Chad Smith for the patch. (LP: #1938043)
488+
489+ -- Brian Murray <brian@ubuntu.com> Fri, 03 Sep 2021 15:17:22 -0700
490+
491+update-manager (1:20.04.10.8) focal; urgency=medium
492+
493+ * tests/test_meta_release_core.py: switch a test from using lucid to bionic
494+ as precise was removed from the archive. (LP: #1929865)
495+
496+ -- Brian Murray <brian@ubuntu.com> Thu, 27 May 2021 13:36:54 -0700
497+
498+update-manager (1:20.04.10.7) focal; urgency=medium
499+
500+ * tests/test_update_list.py: rewrite how APT::VersionedKernelPackages is set.
501+ (LP: #1924809)
502+ * debian/tests/control: add apt to the list of Depends.
503+
504+ -- Brian Murray <brian@ubuntu.com> Fri, 16 Apr 2021 16:25:21 -0700
505+
506+update-manager (1:20.04.10.6) focal; urgency=medium
507+
508+ * UpdateManager/Core/UpdateList.py: change to a regex from a static list
509+ of packages to be grouped under Ubuntu Base (LP: #1902025)
510+ * Clean up apt cache binary files left behind by tests
511+ * Rename meta_pkgs to ubuntu_base_pkgs to make it more clear to the
512+ reader which packages should be included
513+ * Add tests in to ensure Ubuntu base packages are not grouped when
514+ staged for removal (LP: #1912718)
515+
516+ -- William 'jawn-smith' Wilson <william.wilson@canonical.com> Wed, 10 Feb 2021 14:39:27 -0600
517+
518+update-manager (1:20.04.10.5) focal; urgency=medium
519+
520+ * UpdateManager/backend/__init__.py: Really make commit_oem a no-op in the
521+ base class to avoid crash when people force synaptic backend (LP: #1913732)
522+ * Fix typo in previous changelog
523+
524+ -- Julian Andres Klode <juliank@ubuntu.com> Fri, 29 Jan 2021 17:43:01 +0100
525+
526+update-manager (1:20.04.10.4) focal; urgency=medium
527+
528+ * Revert previous change to UpdateList.py, as it breaks kernel
529+ autoremoval (LP: #1912718)
530+ * UpdateManager/backend/__init__.py: Make commit_oem a no-op in the base
531+ class to avoid crash when people force synaptic backend (LP: #1913732)
532+
533+ -- Julian Andres Klode <juliank@ubuntu.com> Fri, 29 Jan 2021 12:50:23 +0100
534+
535+update-manager (1:20.04.10.3) focal; urgency=medium
536+
537+ [ Julian Andres Klode ]
538+ * UpdateManager/backend/__init__.py: Fix unbound local variables regression
539+ introduced by the previous SRU (See LP 1910556), and correct comment
540+
541+ [ William Wilson ]
542+ * UpdateManager/Core/UpdateList.py: change to a regex from a static list
543+ of packages to be grouped under Ubuntu Base (LP: #1902025)
544+
545+ -- Brian Murray <brian@ubuntu.com> Wed, 13 Jan 2021 08:35:58 -0800
546+
547+update-manager (1:20.04.10.2) focal; urgency=medium
548+
549+ [ Iain Lane & Julian Andres Klode ]
550+ * Support post install enablement of OEM-enabled devices (LP: #1908050)
551+
552+ -- Julian Andres Klode <juliank@ubuntu.com> Mon, 14 Dec 2020 12:24:18 +0100
553+
554+update-manager (1:20.04.10.1) focal; urgency=medium
555+
556+ * UpdateManager/UpdateManager.py: when refreshing the cache and encountering
557+ an error return rather than trying to use the undefined cache which causes
558+ crashes. Additionally, don't present the dialog with a "Try Again" button
559+ which won't do anything. (LP: #1826213)
560+ * Fix hang in apturl-gtk. (LP: #1874591)
561+ * Fix crash in snap updates when refreshing the cache fails. (LP: #1880987)
562+
563+ -- Brian Murray <brian@ubuntu.com> Wed, 03 Jun 2020 10:18:00 -0700
564+
565+>>>>>>> MERGE-SOURCE
566 update-manager (1:20.04.10) focal; urgency=medium
567
568 * Fix intermittent hang during snap updates (LP: #1874469).
569
570=== modified file 'debian/control'
571=== modified file 'tests/test_meta_release_core.py'
572--- tests/test_meta_release_core.py 2022-01-26 23:05:32 +0000
573+++ tests/test_meta_release_core.py 2023-01-18 03:41:43 +0000
574@@ -9,8 +9,12 @@
575 import random
576 import sys
577 import tempfile
578+<<<<<<< TREE
579 import time
580 import unittest
581+=======
582+import glob
583+>>>>>>> MERGE-SOURCE
584 try:
585 from test.support import EnvironmentVarGuard
586 except ImportError:
587@@ -181,7 +185,11 @@
588 ltses = [supported for supported in di.supported()
589 if di.is_lts(supported)]
590 with EnvironmentVarGuard() as environ:
591+<<<<<<< TREE
592 environ["META_RELEASE_FAKE_CODENAME"] = ltses[-2]
593+=======
594+ environ["META_RELEASE_FAKE_CODENAME"] = "bionic"
595+>>>>>>> MERGE-SOURCE
596 meta = MetaReleaseCore(forceDownload=True)
597 while meta.downloading:
598 time.sleep(0.1)

Subscribers

People subscribed via source and target branches