Merge lp:~robert-ancell/update-manager/ua-focal-merge into lp:~ubuntu-core-dev/update-manager/jammy
- ua-focal-merge
- Merge into 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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ubuntu Core Development Team | Pending | ||
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Robert Ancell (robert-ancell) wrote : | # |
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) |
Merged because this has been uploaded as a SRU.