Merge ~nteodosio/update-manager:bionic-ua into update-manager:main
- Git
- lp:~nteodosio/update-manager
- bionic-ua
- Merge into main
Proposed by
Nathan Teodosio
Status: | Superseded |
---|---|
Proposed branch: | ~nteodosio/update-manager:bionic-ua |
Merge into: | update-manager:main |
Diff against target: |
1889 lines (+822/-0) (has conflicts) 20 files modified
.gitignore (+2/-0) HweSupportStatus/consts.py (+26/-0) UpdateManager/Core/MetaRelease.py (+14/-0) UpdateManager/Core/MyCache.py (+7/-0) UpdateManager/Core/UpdateList.py (+156/-0) UpdateManager/Core/utils.py (+17/-0) UpdateManager/Dialogs.py (+26/-0) UpdateManager/UpdateManager.py (+89/-0) UpdateManager/UpdatesAvailable.py (+83/-0) UpdateManager/backend/InstallBackendAptdaemon.py (+30/-0) UpdateManager/backend/__init__.py (+56/-0) debian/changelog (+149/-0) debian/control (+15/-0) hwe-support-status (+5/-0) tests/test_backend_error.py (+36/-0) tests/test_hwe_support_status.py (+8/-0) tests/test_meta_release_core.py (+22/-0) tests/test_pep8.py (+42/-0) tests/test_proxy.py (+31/-0) tests/test_update_error.py (+8/-0) Conflict in HweSupportStatus/consts.py Conflict in UpdateManager/Core/MetaRelease.py Conflict in UpdateManager/Core/MyCache.py Conflict in UpdateManager/Core/UpdateList.py Conflict in UpdateManager/Core/utils.py Conflict in UpdateManager/Dialogs.py Conflict in UpdateManager/UpdateManager.py Conflict in UpdateManager/UpdatesAvailable.py Conflict in UpdateManager/backend/InstallBackendAptdaemon.py Conflict in UpdateManager/backend/__init__.py Conflict in debian/changelog Conflict in debian/control Conflict in hwe-support-status Conflict in tests/test_backend_error.py Conflict in tests/test_hwe_support_status.py Conflict in tests/test_meta_release_core.py Conflict in tests/test_pep8.py Conflict in tests/test_proxy.py Conflict in tests/test_pycodestyle.py Conflict in tests/test_update_error.py |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Sebastien Bacher | Pending | ||
Review via email:
|
This proposal has been superseded by a proposal from 2023-11-20.
Commit message
Description of the change
Fix incorrect available version for Ubuntu Pro updates in unattached case.
To post a comment you must log in.
Unmerged commits
- 6b9d547... by Nathan Teodosio
-
Fix incorrect available version for Ubuntu Pro updates in unattached case.
- bbfcf43... by Sebastien Bacher
-
releasing package update-manager version 1:18.04.11.20
- eee5914... by Sebastien Bacher
-
* Ubuntu Pro (LP: #1990450):
- fix another linter error which was created while fixing a missing
space in the previous upload... - 1d8622b... by Sebastien Bacher
-
releasing package update-manager version 1:18.04.11.19
- 6b72f19... by Nathan Teodosio
-
Prepare changelog for 1:18.04.11.19.
- aefbc17... by Nathan Teodosio
-
Fix linter errors in autopkgtest.
- 8e1fb1c... by Nathan Teodosio
-
Remove leftover debugging statement.
- 4c84d5f... by Nathan Teodosio
-
Update changelog.
- 3f283b8... by Nathan Teodosio
-
Add SoftwarePropert
iesPage enumeration-class. - 6f33dc2... by Nathan Teodosio
-
Reset UpdateManagerVe
rsion.py to bzr.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/.gitignore b/.gitignore |
2 | new file mode 100644 |
3 | index 0000000..0370a5e |
4 | --- /dev/null |
5 | +++ b/.gitignore |
6 | @@ -0,0 +1,2 @@ |
7 | +tags |
8 | +__pycache__ |
9 | diff --git a/HweSupportStatus/consts.py b/HweSupportStatus/consts.py |
10 | index 433b5b5..9dd7c56 100644 |
11 | --- a/HweSupportStatus/consts.py |
12 | +++ b/HweSupportStatus/consts.py |
13 | @@ -6,6 +6,7 @@ from gettext import gettext as _ |
14 | |
15 | |
16 | # the day on which the short support HWE stack goes EoL |
17 | +<<<<<<< HweSupportStatus/consts.py |
18 | HWE_EOL_DATE = datetime.date(2027, 4, 30) |
19 | |
20 | # the day on which the next LTS first point release is available |
21 | @@ -14,6 +15,16 @@ NEXT_LTS_DOT1_DATE = datetime.date(2024, 7, 15) |
22 | |
23 | # end of the month in which this LTS goes EoL |
24 | LTS_EOL_DATE = datetime.date(2027, 4, 30) |
25 | +======= |
26 | +HWE_EOL_DATE = datetime.date(2023, 4, 30) |
27 | + |
28 | +# the day on which the next LTS first point release is available |
29 | +# used to propose a release upgrade |
30 | +NEXT_LTS_DOT1_DATE = datetime.date(2020, 7, 21) |
31 | + |
32 | +# end of the month in which this LTS goes EoL |
33 | +LTS_EOL_DATE = datetime.date(2023, 4, 30) |
34 | +>>>>>>> HweSupportStatus/consts.py |
35 | |
36 | |
37 | class Messages: |
38 | @@ -33,7 +44,11 @@ in the Dash. |
39 | """ |
40 | To upgrade to a supported (or longer-supported) configuration: |
41 | |
42 | +<<<<<<< HweSupportStatus/consts.py |
43 | * Upgrade from Ubuntu 20.04 LTS to Ubuntu 22.04 LTS by running: |
44 | +======= |
45 | +* Upgrade from Ubuntu 16.04 LTS to Ubuntu 18.04 LTS by running: |
46 | +>>>>>>> HweSupportStatus/consts.py |
47 | sudo do-release-upgrade %s |
48 | |
49 | OR |
50 | @@ -69,6 +84,7 @@ on %s. After this date security updates for critical parts (kernel |
51 | and graphics stack) of your system will no longer be available. |
52 | |
53 | For more information, please see: |
54 | +<<<<<<< HweSupportStatus/consts.py |
55 | http://wiki.ubuntu.com/2204_HWE_EOL |
56 | """ |
57 | ) |
58 | @@ -85,3 +101,13 @@ Stack ended on %s: |
59 | ) |
60 | % HWE_EOL_DATE.isoformat() |
61 | ) |
62 | +======= |
63 | +http://wiki.ubuntu.com/1604_HWE_EOL |
64 | +""") % HWE_EOL_DATE.isoformat() |
65 | + |
66 | + HWE_SUPPORT_HAS_ENDED = _(""" |
67 | +WARNING: Security updates for your current Hardware Enablement |
68 | +Stack ended on %s: |
69 | + * http://wiki.ubuntu.com/1604_HWE_EOL |
70 | +""") % HWE_EOL_DATE.isoformat() |
71 | +>>>>>>> HweSupportStatus/consts.py |
72 | diff --git a/UpdateManager/Core/MetaRelease.py b/UpdateManager/Core/MetaRelease.py |
73 | index 9a485c4..ce90be0 100644 |
74 | --- a/UpdateManager/Core/MetaRelease.py |
75 | +++ b/UpdateManager/Core/MetaRelease.py |
76 | @@ -155,13 +155,20 @@ class MetaReleaseCore(object): |
77 | return |
78 | # now check which specific url to use |
79 | if parser.has_option("DEFAULT", "Prompt"): |
80 | +<<<<<<< UpdateManager/Core/MetaRelease.py |
81 | prompt = parser.get("DEFAULT", "Prompt").lower() |
82 | if prompt == "never" or prompt == "no": |
83 | self.prompt = "never" |
84 | +======= |
85 | + type = parser.get("DEFAULT", "Prompt").lower() |
86 | + if (type == "never" or type == "no"): |
87 | + self.prompt = 'never' |
88 | +>>>>>>> UpdateManager/Core/MetaRelease.py |
89 | # nothing to do for this object |
90 | # FIXME: what about no longer supported? |
91 | self.downloaded.set() |
92 | return |
93 | +<<<<<<< UpdateManager/Core/MetaRelease.py |
94 | elif prompt == "lts": |
95 | self.prompt = "lts" |
96 | # the Prompt=lts setting only makes sense when running on |
97 | @@ -174,6 +181,13 @@ class MetaReleaseCore(object): |
98 | self._debug("Prompt=lts for non-LTS, ignoring") |
99 | else: |
100 | self.prompt = "normal" |
101 | +======= |
102 | + elif type == "lts": |
103 | + self.prompt = 'lts' |
104 | + self.METARELEASE_URI = self.METARELEASE_URI_LTS |
105 | + else: |
106 | + self.prompt = 'normal' |
107 | +>>>>>>> UpdateManager/Core/MetaRelease.py |
108 | # needed for the _tryUpgradeSelf() code in DistUpgradeController |
109 | if forceLTS: |
110 | self.METARELEASE_URI = self.METARELEASE_URI_LTS |
111 | diff --git a/UpdateManager/Core/MyCache.py b/UpdateManager/Core/MyCache.py |
112 | index e29333c..770fe66 100644 |
113 | --- a/UpdateManager/Core/MyCache.py |
114 | +++ b/UpdateManager/Core/MyCache.py |
115 | @@ -481,6 +481,7 @@ class MyCache(DistUpgrade.DistUpgradeCache.MyCache): |
116 | "get the changelog file from the changelog location" |
117 | origins = self[name].candidate.origins |
118 | version = self.pro_versions.get(name, self[name].candidate.version) |
119 | +<<<<<<< UpdateManager/Core/MyCache.py |
120 | self.all_changes[name] = _( |
121 | "Changes for %s versions:\n" |
122 | "Installed version: %s\n" |
123 | @@ -490,6 +491,12 @@ class MyCache(DistUpgrade.DistUpgradeCache.MyCache): |
124 | getattr(self[name].installed, "version", None), |
125 | version, |
126 | ) |
127 | +======= |
128 | + self.all_changes[name] = _("Changes for %s versions:\n" |
129 | + "Installed version: %s\n" |
130 | + "Available version: %s\n\n") % \ |
131 | + (name, getattr(self[name].installed, "version", None), version) |
132 | +>>>>>>> UpdateManager/Core/MyCache.py |
133 | if self.CHANGELOG_ORIGIN not in [o.origin for o in origins]: |
134 | self._fetch_changelog_for_third_party_package(name, origins) |
135 | return |
136 | diff --git a/UpdateManager/Core/UpdateList.py b/UpdateManager/Core/UpdateList.py |
137 | index 265ab90..ec5d103 100644 |
138 | --- a/UpdateManager/Core/UpdateList.py |
139 | +++ b/UpdateManager/Core/UpdateList.py |
140 | @@ -43,7 +43,11 @@ from gi.repository import Gio |
141 | from UpdateManager.Core import utils |
142 | |
143 | |
144 | +<<<<<<< UpdateManager/Core/UpdateList.py |
145 | class UpdateItem: |
146 | +======= |
147 | +class UpdateItem(): |
148 | +>>>>>>> UpdateManager/Core/UpdateList.py |
149 | def __init__(self, pkg, name, icon, to_remove, sensitive=True): |
150 | self.icon = icon |
151 | self.name = name |
152 | @@ -76,6 +80,7 @@ class UpdateGroup(UpdateItem): |
153 | all_items.extend(self._items) |
154 | return sorted(all_items, key=lambda a: a.name.lower()) |
155 | |
156 | +<<<<<<< UpdateManager/Core/UpdateList.py |
157 | def add( |
158 | self, |
159 | pkg, |
160 | @@ -84,6 +89,10 @@ class UpdateGroup(UpdateItem): |
161 | to_remove=False, |
162 | sensitive=True, |
163 | ): |
164 | +======= |
165 | + def add(self, pkg, cache=None, eventloop_callback=None, to_remove=False, |
166 | + sensitive=True): |
167 | +>>>>>>> UpdateManager/Core/UpdateList.py |
168 | name = utils.get_package_label(pkg) |
169 | icon = Gio.ThemedIcon.new("package") |
170 | self._items.add(UpdateItem(pkg, name, icon, to_remove, sensitive)) |
171 | @@ -168,18 +177,28 @@ class UpdateApplicationGroup(UpdateGroup): |
172 | def __init__(self, pkg, application, to_remove, sensitive=True): |
173 | name = application.get_display_name() |
174 | icon = application.get_icon() |
175 | +<<<<<<< UpdateManager/Core/UpdateList.py |
176 | super(UpdateApplicationGroup, self).__init__( |
177 | pkg, name, icon, to_remove, sensitive |
178 | ) |
179 | +======= |
180 | + super(UpdateApplicationGroup, self).__init__(pkg, name, icon, |
181 | + to_remove, sensitive) |
182 | +>>>>>>> UpdateManager/Core/UpdateList.py |
183 | |
184 | |
185 | class UpdatePackageGroup(UpdateGroup): |
186 | def __init__(self, pkg, to_remove, sensitive=True): |
187 | name = utils.get_package_label(pkg) |
188 | icon = Gio.ThemedIcon.new("package") |
189 | +<<<<<<< UpdateManager/Core/UpdateList.py |
190 | super(UpdatePackageGroup, self).__init__( |
191 | pkg, name, icon, to_remove, sensitive |
192 | ) |
193 | +======= |
194 | + super(UpdatePackageGroup, self).__init__(pkg, name, icon, to_remove, |
195 | + sensitive) |
196 | +>>>>>>> UpdateManager/Core/UpdateList.py |
197 | |
198 | |
199 | class UpdateSystemGroup(UpdateGroup): |
200 | @@ -188,9 +207,14 @@ class UpdateSystemGroup(UpdateGroup): |
201 | # the core components and packages. |
202 | name = _("%s base") % utils.get_ubuntu_flavor_name(cache=cache) |
203 | icon = Gio.ThemedIcon.new("distributor-logo") |
204 | +<<<<<<< UpdateManager/Core/UpdateList.py |
205 | super(UpdateSystemGroup, self).__init__( |
206 | None, name, icon, to_remove, sensitive |
207 | ) |
208 | +======= |
209 | + super(UpdateSystemGroup, self).__init__(None, name, icon, to_remove, |
210 | + sensitive) |
211 | +>>>>>>> UpdateManager/Core/UpdateList.py |
212 | |
213 | |
214 | class UpdateOrigin: |
215 | @@ -233,7 +257,10 @@ class UpdateList: |
216 | self.update_groups = [] |
217 | self.security_groups = [] |
218 | self.kernel_autoremove_groups = [] |
219 | +<<<<<<< UpdateManager/Core/UpdateList.py |
220 | self.duplicate_groups = [] |
221 | +======= |
222 | +>>>>>>> UpdateManager/Core/UpdateList.py |
223 | self.ubuntu_pro_groups = [] |
224 | self.ubuntu_pro_fake_groups = [] |
225 | self.num_updates = 0 |
226 | @@ -424,6 +451,46 @@ class UpdateList: |
227 | return True |
228 | return False |
229 | |
230 | +<<<<<<< UpdateManager/Core/UpdateList.py |
231 | +======= |
232 | + def _get_linux_packages(self): |
233 | + "Return all binary packages made by the linux-meta source package" |
234 | + # Hard code this rather than generate from source info in cache because |
235 | + # that might only be available if we have deb-src lines. I think we |
236 | + # could also generate it by iterating over all the binary package info |
237 | + # we have, but that is costly. These don't change often. |
238 | + return ['linux', |
239 | + 'linux-cloud-tools-generic', |
240 | + 'linux-cloud-tools-lowlatency', |
241 | + 'linux-cloud-tools-virtual', |
242 | + 'linux-crashdump', |
243 | + 'linux-generic', |
244 | + 'linux-generic-lpae', |
245 | + 'linux-headers-generic', |
246 | + 'linux-headers-generic-lpae', |
247 | + 'linux-headers-lowlatency', |
248 | + 'linux-headers-lowlatency-lpae', |
249 | + 'linux-headers-server', |
250 | + 'linux-headers-virtual', |
251 | + 'linux-image', |
252 | + 'linux-image-extra-virtual', |
253 | + 'linux-image-generic', |
254 | + 'linux-image-generic-lpae', |
255 | + 'linux-image-lowlatency', |
256 | + 'linux-image-virtual', |
257 | + 'linux-lowlatency', |
258 | + 'linux-signed-generic', |
259 | + 'linux-signed-image-generic', |
260 | + 'linux-signed-image-lowlatency', |
261 | + 'linux-signed-lowlatency', |
262 | + 'linux-source', |
263 | + 'linux-tools-generic', |
264 | + 'linux-tools-generic-lpae', |
265 | + 'linux-tools-lowlatency', |
266 | + 'linux-tools-virtual', |
267 | + 'linux-virtual'] |
268 | + |
269 | +>>>>>>> UpdateManager/Core/UpdateList.py |
270 | def _make_groups(self, cache, pkgs, eventloop_callback, to_remove=False, |
271 | sensitive=True): |
272 | if not pkgs: |
273 | @@ -435,9 +502,14 @@ class UpdateList: |
274 | for pkg in pkgs: |
275 | app = self._get_application_for_package(pkg) |
276 | if app is not None: |
277 | +<<<<<<< UpdateManager/Core/UpdateList.py |
278 | app_group = UpdateApplicationGroup( |
279 | pkg, app, to_remove, sensitive |
280 | ) |
281 | +======= |
282 | + app_group = UpdateApplicationGroup(pkg, app, to_remove, |
283 | + sensitive) |
284 | +>>>>>>> UpdateManager/Core/UpdateList.py |
285 | app_groups.append(app_group) |
286 | else: |
287 | ungrouped_pkgs.append(pkg) |
288 | @@ -458,6 +530,7 @@ class UpdateList: |
289 | if ungrouped_pkgs: |
290 | # Separate out system base packages. If we have already found an |
291 | # application for all updates, don't bother. |
292 | +<<<<<<< UpdateManager/Core/UpdateList.py |
293 | linux_names = ( |
294 | "linux$", |
295 | "linux-.*-buildinfo.*", |
296 | @@ -482,6 +555,9 @@ class UpdateList: |
297 | ubuntu_base_group = UpdateGroup( |
298 | None, None, None, to_remove, sensitive |
299 | ) |
300 | +======= |
301 | + meta_group = UpdateGroup(None, None, None, to_remove, sensitive) |
302 | +>>>>>>> UpdateManager/Core/UpdateList.py |
303 | flavor_package = utils.get_ubuntu_flavor_package(cache=cache) |
304 | ubuntu_base_pkgs = [ |
305 | flavor_package, |
306 | @@ -502,6 +578,7 @@ class UpdateList: |
307 | pkg, cache, eventloop_callback |
308 | ): |
309 | if system_group is None: |
310 | +<<<<<<< UpdateManager/Core/UpdateList.py |
311 | system_group = UpdateSystemGroup( |
312 | cache, to_remove, sensitive |
313 | ) |
314 | @@ -509,6 +586,14 @@ class UpdateList: |
315 | else: |
316 | pkg_groups.append( |
317 | UpdatePackageGroup(pkg, to_remove, sensitive) |
318 | +======= |
319 | + system_group = UpdateSystemGroup(cache, to_remove, |
320 | + sensitive) |
321 | + system_group.add(pkg) |
322 | + else: |
323 | + pkg_groups.append(UpdatePackageGroup( |
324 | + pkg, to_remove, sensitive) |
325 | +>>>>>>> UpdateManager/Core/UpdateList.py |
326 | ) |
327 | |
328 | app_groups.sort(key=lambda a: a.name.lower()) |
329 | @@ -518,6 +603,7 @@ class UpdateList: |
330 | |
331 | return app_groups + pkg_groups |
332 | |
333 | +<<<<<<< UpdateManager/Core/UpdateList.py |
334 | def update( |
335 | self, |
336 | cache, |
337 | @@ -525,12 +611,18 @@ class UpdateList: |
338 | duplicate_packages=[], |
339 | ua_security_packages=[], |
340 | ): |
341 | +======= |
342 | + def update(self, cache, eventloop_callback=None, ua_security_packages=[]): |
343 | +>>>>>>> UpdateManager/Core/UpdateList.py |
344 | self.held_back = [] |
345 | |
346 | # do the upgrade |
347 | self.distUpgradeWouldDelete = cache.saveDistUpgrade() |
348 | |
349 | +<<<<<<< UpdateManager/Core/UpdateList.py |
350 | oem_pkgs = [] |
351 | +======= |
352 | +>>>>>>> UpdateManager/Core/UpdateList.py |
353 | pro_pkgs = [] |
354 | security_pkgs = [] |
355 | upgrade_pkgs = [] |
356 | @@ -579,6 +671,45 @@ class UpdateList: |
357 | FakeUbuntuProPackage(package_name, version, size) |
358 | ) |
359 | |
360 | + class FakeUbuntuProPackageCandidate: |
361 | + def __init__(self, source_name, version, size): |
362 | + self.source_name = source_name |
363 | + self.summary = source_name |
364 | + self.description = source_name |
365 | + self.version = version |
366 | + self.size = size |
367 | + self.downloadable = False |
368 | + self.record = {} |
369 | + |
370 | + class FakeUbuntuProPackage: |
371 | + def __init__(self, package_name, version, size): |
372 | + self.name = package_name |
373 | + self.candidate = FakeUbuntuProPackageCandidate(package_name, |
374 | + version, size) |
375 | + self.marked_install = False |
376 | + self.marked_upgrade = False |
377 | + self.marked_delete = False |
378 | + self.installed_files = [] |
379 | + |
380 | + def mark_install(self): |
381 | + pass |
382 | + |
383 | + def mark_delete(self): |
384 | + pass |
385 | + fake_ua_packages = [] |
386 | + ua_packages_names = [] |
387 | + for ( |
388 | + package_name, |
389 | + version, |
390 | + size, |
391 | + downloadable |
392 | + ) in ua_security_packages: |
393 | + if downloadable: |
394 | + ua_packages_names.append(package_name) |
395 | + else: |
396 | + fake_ua_packages.append(FakeUbuntuProPackage(package_name, |
397 | + version, size)) |
398 | + |
399 | # Find all upgradable packages |
400 | for pkg in cache: |
401 | if pkg.is_upgradable or pkg.marked_install: |
402 | @@ -600,8 +731,11 @@ class UpdateList: |
403 | self.ignored_phased_updates.append(pkg) |
404 | continue |
405 | |
406 | +<<<<<<< UpdateManager/Core/UpdateList.py |
407 | if fnmatch.fnmatch(pkg.name, "oem-*-meta"): |
408 | oem_pkgs.append(pkg) |
409 | +======= |
410 | +>>>>>>> UpdateManager/Core/UpdateList.py |
411 | comes_from_pro = pkg.name in ua_packages_names |
412 | if comes_from_pro: |
413 | pro_pkgs.append(pkg) |
414 | @@ -622,20 +756,27 @@ class UpdateList: |
415 | and not cache.running_kernel_pkgs_regexp.match(pkg.name) |
416 | ): |
417 | kernel_autoremove_pkgs.append(pkg) |
418 | +<<<<<<< UpdateManager/Core/UpdateList.py |
419 | if pkg.name in duplicate_packages: |
420 | duplicate_pkgs.append(pkg) |
421 | +======= |
422 | +>>>>>>> UpdateManager/Core/UpdateList.py |
423 | |
424 | # perform operations after the loop to not skip packages which |
425 | # changed state due to the resolver |
426 | for pkg in kernel_autoremove_pkgs: |
427 | pkg.mark_delete() |
428 | +<<<<<<< UpdateManager/Core/UpdateList.py |
429 | for pkg in duplicate_pkgs: |
430 | pkg.mark_delete() |
431 | +======= |
432 | +>>>>>>> UpdateManager/Core/UpdateList.py |
433 | for pkg in self.ignored_phased_updates: |
434 | pkg.mark_keep() |
435 | |
436 | if security_pkgs or upgrade_pkgs or pro_pkgs: |
437 | # There's updates available. Initiate the desktop file cache. |
438 | +<<<<<<< UpdateManager/Core/UpdateList.py |
439 | pkg_names = [ |
440 | p.name |
441 | for p in security_pkgs |
442 | @@ -644,6 +785,13 @@ class UpdateList: |
443 | + duplicate_pkgs |
444 | + pro_pkgs |
445 | ] |
446 | +======= |
447 | + pkg_names = [p.name for p in |
448 | + pro_pkgs |
449 | + + security_pkgs |
450 | + + upgrade_pkgs |
451 | + + kernel_autoremove_pkgs] |
452 | +>>>>>>> UpdateManager/Core/UpdateList.py |
453 | self._populate_desktop_cache(pkg_names) |
454 | self.oem_groups = self._make_groups( |
455 | cache, oem_pkgs, eventloop_callback |
456 | @@ -655,6 +803,7 @@ class UpdateList: |
457 | cache, security_pkgs, eventloop_callback |
458 | ) |
459 | self.kernel_autoremove_groups = self._make_groups( |
460 | +<<<<<<< UpdateManager/Core/UpdateList.py |
461 | cache, kernel_autoremove_pkgs, eventloop_callback, True |
462 | ) |
463 | self.duplicate_groups = self._make_groups( |
464 | @@ -666,3 +815,10 @@ class UpdateList: |
465 | self.ubuntu_pro_groups = self._make_groups( |
466 | cache, pro_pkgs, eventloop_callback |
467 | ) |
468 | +======= |
469 | + cache, kernel_autoremove_pkgs, eventloop_callback, True) |
470 | + self.ubuntu_pro_fake_groups = self._make_groups( |
471 | + cache, fake_ua_packages, eventloop_callback, sensitive=False) |
472 | + self.ubuntu_pro_groups = self._make_groups( |
473 | + cache, pro_pkgs, eventloop_callback) |
474 | +>>>>>>> UpdateManager/Core/UpdateList.py |
475 | diff --git a/UpdateManager/Core/utils.py b/UpdateManager/Core/utils.py |
476 | index fbabac1..3fe6cdd 100644 |
477 | --- a/UpdateManager/Core/utils.py |
478 | +++ b/UpdateManager/Core/utils.py |
479 | @@ -244,10 +244,15 @@ def url_downloadable(uri, debug_func=None): |
480 | lambda x: True |
481 | debug_func("url_downloadable: %s" % uri) |
482 | (scheme, netloc, path, querry, fragment) = urlsplit(uri) |
483 | +<<<<<<< UpdateManager/Core/utils.py |
484 | debug_func( |
485 | "s='%s' n='%s' p='%s' q='%s' f='%s'" |
486 | % (scheme, netloc, path, querry, fragment) |
487 | ) |
488 | +======= |
489 | + debug_func("s='%s' n='%s' p='%s' q='%s' f='%s'" % (scheme, netloc, path, |
490 | + querry, fragment)) |
491 | +>>>>>>> UpdateManager/Core/utils.py |
492 | if scheme in ("http", "https"): |
493 | try: |
494 | http_file = urlopen(HeadRequest(uri)) |
495 | @@ -289,7 +294,11 @@ def init_proxy(gsettings=None): |
496 | SYNAPTIC_CONF_FILE = "/root/.synaptic/synaptic.conf" |
497 | proxies = {} |
498 | # generic apt config wins |
499 | +<<<<<<< UpdateManager/Core/utils.py |
500 | if apt_pkg.config.find("Acquire::http::Proxy") != "": |
501 | +======= |
502 | + if apt_pkg.config.find("Acquire::http::Proxy") != '': |
503 | +>>>>>>> UpdateManager/Core/utils.py |
504 | proxies["http"] = apt_pkg.config.find("Acquire::http::Proxy") |
505 | # then synaptic |
506 | elif os.path.exists(SYNAPTIC_CONF_FILE): |
507 | @@ -301,7 +310,11 @@ def init_proxy(gsettings=None): |
508 | proxy_port = str(cnf.find_i("Synaptic::httpProxyPort")) |
509 | if proxy_host and proxy_port: |
510 | proxies["http"] = "http://%s:%s/" % (proxy_host, proxy_port) |
511 | +<<<<<<< UpdateManager/Core/utils.py |
512 | if apt_pkg.config.find("Acquire::https::Proxy") != "": |
513 | +======= |
514 | + if apt_pkg.config.find("Acquire::https::Proxy") != '': |
515 | +>>>>>>> UpdateManager/Core/utils.py |
516 | proxies["https"] = apt_pkg.config.find("Acquire::https::Proxy") |
517 | elif "http" in proxies: |
518 | proxies["https"] = proxies["http"] |
519 | @@ -309,7 +322,11 @@ def init_proxy(gsettings=None): |
520 | if proxies: |
521 | # basic verification |
522 | for proxy in proxies.values(): |
523 | +<<<<<<< UpdateManager/Core/utils.py |
524 | if not re.match("https?://\\w+", proxy): |
525 | +======= |
526 | + if not re.match("https?://\w+", proxy): |
527 | +>>>>>>> UpdateManager/Core/utils.py |
528 | print("proxy '%s' looks invalid" % proxy, file=sys.stderr) |
529 | return |
530 | proxy_support = ProxyHandler(proxies) |
531 | diff --git a/UpdateManager/Dialogs.py b/UpdateManager/Dialogs.py |
532 | index 304609c..30e29c9 100644 |
533 | --- a/UpdateManager/Dialogs.py |
534 | +++ b/UpdateManager/Dialogs.py |
535 | @@ -159,6 +159,7 @@ class InternalDialog(BuilderDialog): |
536 | self.set_desc(None) |
537 | |
538 | if not active: |
539 | +<<<<<<< UpdateManager/Dialogs.py |
540 | if ( |
541 | self._is_livepatch_supported() |
542 | and self.settings_button |
543 | @@ -171,6 +172,14 @@ class InternalDialog(BuilderDialog): |
544 | "secure between restarts." |
545 | ) |
546 | ) |
547 | +======= |
548 | + if self._is_livepatch_supported() and \ |
549 | + self.settings_button and \ |
550 | + self.settings.get_int('launch-count') >= 4: |
551 | + self.set_desc(_("<b>Tip:</b> You can use Livepatch with " |
552 | + "Ubuntu Pro to keep your computer more " |
553 | + "secure between restarts.")) |
554 | +>>>>>>> UpdateManager/Dialogs.py |
555 | self.settings_button.set_label(_("Settings & Pro…")) |
556 | return |
557 | |
558 | @@ -236,9 +245,14 @@ class NoUpdatesDialog(InternalDialog): |
559 | else: |
560 | self.set_header(_("The software on this computer is up to date.")) |
561 | self.settings_button = self.add_settings_button() |
562 | +<<<<<<< UpdateManager/Dialogs.py |
563 | self.focus_button = self.add_button( |
564 | Gtk.STOCK_OK, self.window_main.close |
565 | ) |
566 | +======= |
567 | + self.focus_button = self.add_button(Gtk.STOCK_OK, |
568 | + self.window_main.close) |
569 | +>>>>>>> UpdateManager/Dialogs.py |
570 | self.check_livepatch_status() |
571 | |
572 | |
573 | @@ -326,6 +340,7 @@ class NoUpgradeForYouDialog(InternalDialog): |
574 | InternalDialog.__init__(self, window_main) |
575 | self.set_header(_("Sorry, there are no more upgrades for this system")) |
576 | # Translators: this is an Ubuntu version name like "Ubuntu 12.04" |
577 | +<<<<<<< UpdateManager/Dialogs.py |
578 | self.set_desc( |
579 | _( |
580 | "\nThere will not be any further Ubuntu releases " |
581 | @@ -339,6 +354,17 @@ class NoUpgradeForYouDialog(InternalDialog): |
582 | self.focus_button = self.add_button( |
583 | Gtk.STOCK_OK, self.window_main.close |
584 | ) |
585 | +======= |
586 | + self.set_desc(_("\nThere will not be any further Ubuntu releases " |
587 | + "for this system's '%s' architecture.\n\n" |
588 | + "Updates for Ubuntu %s will continue until " |
589 | + "2023-04-26.\n\nIf you reinstall Ubuntu from " |
590 | + "ubuntu.com/download, future upgrades will " |
591 | + "be available.") % |
592 | + (arch, meta_release.current_dist_version)) |
593 | + self.focus_button = self.add_button(Gtk.STOCK_OK, |
594 | + self.window_main.close) |
595 | +>>>>>>> UpdateManager/Dialogs.py |
596 | |
597 | |
598 | class PartialUpgradeDialog(InternalDialog): |
599 | diff --git a/UpdateManager/UpdateManager.py b/UpdateManager/UpdateManager.py |
600 | index 2e6aed4..2c853f5 100644 |
601 | --- a/UpdateManager/UpdateManager.py |
602 | +++ b/UpdateManager/UpdateManager.py |
603 | @@ -35,7 +35,10 @@ warnings.filterwarnings( |
604 | ) |
605 | |
606 | import distro_info |
607 | +<<<<<<< UpdateManager/UpdateManager.py |
608 | import fnmatch |
609 | +======= |
610 | +>>>>>>> UpdateManager/UpdateManager.py |
611 | import json |
612 | import os |
613 | import subprocess |
614 | @@ -50,6 +53,7 @@ from dbus.mainloop.glib import DBusGMainLoop |
615 | DBusGMainLoop(set_as_default=True) |
616 | |
617 | from .UnitySupport import UnitySupport |
618 | +<<<<<<< UpdateManager/UpdateManager.py |
619 | from .Dialogs import ( |
620 | DistUpgradeDialog, |
621 | ErrorDialog, |
622 | @@ -62,6 +66,18 @@ from .Dialogs import ( |
623 | UnsupportedDialog, |
624 | UpdateErrorDialog, |
625 | ) |
626 | +======= |
627 | +from .Dialogs import (DistUpgradeDialog, |
628 | + ErrorDialog, |
629 | + HWEUpgradeDialog, |
630 | + NeedRestartDialog, |
631 | + NoUpdatesDialog, |
632 | + NoUpgradeForYouDialog, |
633 | + PartialUpgradeDialog, |
634 | + StoppedUpdatesDialog, |
635 | + UnsupportedDialog, |
636 | + UpdateErrorDialog) |
637 | +>>>>>>> UpdateManager/UpdateManager.py |
638 | from .MetaReleaseGObject import MetaRelease |
639 | from .UpdatesAvailable import UpdatesAvailable |
640 | from .Core.AlertWatcher import AlertWatcher |
641 | @@ -69,7 +85,12 @@ from .Core.MyCache import MyCache |
642 | from .Core.roam import NetworkManagerHelper |
643 | from .Core.UpdateList import UpdateList |
644 | from .Core.utils import get_arch, get_dist, SoftwarePropertiesPage |
645 | +<<<<<<< UpdateManager/UpdateManager.py |
646 | from .backend import InstallBackend, get_backend |
647 | +======= |
648 | +from .backend import (InstallBackend, |
649 | + get_backend) |
650 | +>>>>>>> UpdateManager/UpdateManager.py |
651 | |
652 | # file that signals if we need to reboot |
653 | REBOOT_REQUIRED_FILE = "/var/run/reboot-required" |
654 | @@ -92,8 +113,11 @@ class UpdateManager(Gtk.Window): |
655 | self.update_list = None |
656 | self.meta_release = None |
657 | self.hwe_replacement_packages = None |
658 | +<<<<<<< UpdateManager/UpdateManager.py |
659 | self.oem_metapackages = set() |
660 | self.duplicate_packages = [] |
661 | +======= |
662 | +>>>>>>> UpdateManager/UpdateManager.py |
663 | self.arch = get_arch() |
664 | |
665 | # Basic GTK+ parameters |
666 | @@ -103,9 +127,15 @@ class UpdateManager(Gtk.Window): |
667 | |
668 | # Keep window at a constant size |
669 | ctx = self.get_style_context() |
670 | +<<<<<<< UpdateManager/UpdateManager.py |
671 | self.style_changed = ctx.connect( |
672 | "changed", lambda ctx: self.resize_to_standard_width() |
673 | ) |
674 | +======= |
675 | + self.style_changed = ctx.connect("changed", |
676 | + lambda ctx: |
677 | + self.resize_to_standard_width()) |
678 | +>>>>>>> UpdateManager/UpdateManager.py |
679 | |
680 | # Signals |
681 | self.connect("delete-event", self._on_close) |
682 | @@ -203,6 +233,13 @@ class UpdateManager(Gtk.Window): |
683 | sys.exit(0) |
684 | |
685 | def show_settings(self, page_number=SoftwarePropertiesPage.updates): |
686 | +<<<<<<< UpdateManager/UpdateManager.py |
687 | +======= |
688 | + try: |
689 | + apt_pkg.pkgsystem_unlock() |
690 | + except SystemError: |
691 | + pass |
692 | +>>>>>>> UpdateManager/UpdateManager.py |
693 | cmd = ["/usr/bin/software-properties-gtk", |
694 | "--open-tab", str(page_number)] |
695 | |
696 | @@ -247,6 +284,7 @@ class UpdateManager(Gtk.Window): |
697 | if self.cache is None: |
698 | return |
699 | |
700 | +<<<<<<< UpdateManager/UpdateManager.py |
701 | pane = self._make_available_pane( |
702 | self.cache.install_count + self.cache.del_count, |
703 | os.path.exists(REBOOT_REQUIRED_FILE), |
704 | @@ -276,6 +314,13 @@ class UpdateManager(Gtk.Window): |
705 | if fnmatch.fnmatch(pkg.name, "oem-*-meta") and pkg.installed: |
706 | self.oem_metapackages.add(pkg) |
707 | |
708 | +======= |
709 | + pane = self._make_available_pane(self.cache.install_count, |
710 | + os.path.exists(REBOOT_REQUIRED_FILE), |
711 | + cancelled_update, error_occurred) |
712 | + self._start_pane(pane) |
713 | + |
714 | +>>>>>>> UpdateManager/UpdateManager.py |
715 | def _get_ua_security_status(self): |
716 | self.ua_security_packages = [] |
717 | try: |
718 | @@ -307,6 +352,7 @@ class UpdateManager(Gtk.Window): |
719 | ) |
720 | self.cache.create_pro_cache(self.ua_security_packages) |
721 | |
722 | +<<<<<<< UpdateManager/UpdateManager.py |
723 | def _make_available_pane( |
724 | self, |
725 | install_count, |
726 | @@ -314,6 +360,10 @@ class UpdateManager(Gtk.Window): |
727 | cancelled_update=False, |
728 | error_occurred=False, |
729 | ): |
730 | +======= |
731 | + def _make_available_pane(self, install_count, need_reboot=False, |
732 | + cancelled_update=False, error_occurred=False): |
733 | +>>>>>>> UpdateManager/UpdateManager.py |
734 | self._check_hwe_support_status() |
735 | if install_count != 0 or len(self.ua_security_packages) > 0: |
736 | header = None |
737 | @@ -322,9 +372,14 @@ class UpdateManager(Gtk.Window): |
738 | desc = _("Some software couldn’t be checked for updates.") |
739 | elif cancelled_update: |
740 | header = _("You stopped the check for updates.") |
741 | +<<<<<<< UpdateManager/UpdateManager.py |
742 | desc = _( |
743 | "Updated software is available from a previous check." |
744 | ) |
745 | +======= |
746 | + desc = _("Updated software is available from " |
747 | + "a previous check.") |
748 | +>>>>>>> UpdateManager/UpdateManager.py |
749 | # Display HWE updates first as an old HWE stack is vulnerable |
750 | elif self.hwe_replacement_packages: |
751 | return HWEUpgradeDialog(self) |
752 | @@ -380,6 +435,7 @@ class UpdateManager(Gtk.Window): |
753 | |
754 | # Check for new fresh release |
755 | settings = Gio.Settings.new("com.ubuntu.update-manager") |
756 | +<<<<<<< UpdateManager/UpdateManager.py |
757 | if self.meta_release.new_dist and ( |
758 | self.options.check_dist_upgrades |
759 | or settings.get_boolean("check-dist-upgrades") |
760 | @@ -388,6 +444,14 @@ class UpdateManager(Gtk.Window): |
761 | return NoUpgradeForYouDialog( |
762 | self, self.meta_release, self.arch |
763 | ) |
764 | +======= |
765 | + if (self.meta_release.new_dist and |
766 | + (self.options.check_dist_upgrades or |
767 | + settings.get_boolean("check-dist-upgrades"))): |
768 | + if self.arch == 'i386': |
769 | + return NoUpgradeForYouDialog(self, self.meta_release, |
770 | + self.arch) |
771 | +>>>>>>> UpdateManager/UpdateManager.py |
772 | return DistUpgradeDialog(self, self.meta_release) |
773 | |
774 | return None |
775 | @@ -448,22 +512,37 @@ class UpdateManager(Gtk.Window): |
776 | self._start_pane(PartialUpgradeDialog(self)) |
777 | # we assert a clean cache |
778 | header = _("Software index is broken") |
779 | +<<<<<<< UpdateManager/UpdateManager.py |
780 | desc = _( |
781 | "It is impossible to install or remove any software. " |
782 | 'Please use the package manager "Synaptic" or run ' |
783 | '"sudo apt-get install -f" in a terminal to fix ' |
784 | "this issue at first." |
785 | ) |
786 | +======= |
787 | + desc = _("It is impossible to install or remove any software. " |
788 | + "Please use the package manager \"Synaptic\" or run " |
789 | + "\"sudo apt-get install -f\" in a terminal to fix " |
790 | + "this issue at first.") |
791 | +>>>>>>> UpdateManager/UpdateManager.py |
792 | self.start_error(False, header, desc) |
793 | return |
794 | except SystemError as e: |
795 | header = _("Could not initialize the package information") |
796 | +<<<<<<< UpdateManager/UpdateManager.py |
797 | desc = _( |
798 | "An unresolvable problem occurred while " |
799 | "initializing the package information.\n\n" |
800 | "Please report this bug against the 'update-manager' " |
801 | "package and include the following error message:\n" |
802 | ) + str(e) |
803 | +======= |
804 | + desc = _("An unresolvable problem occurred while " |
805 | + "initializing the package information.\n\n" |
806 | + "Please report this bug against the 'update-manager' " |
807 | + "package and include the following error " |
808 | + "message:\n") + str(e) |
809 | +>>>>>>> UpdateManager/UpdateManager.py |
810 | self.start_error(False, header, desc) |
811 | return |
812 | |
813 | @@ -474,6 +553,7 @@ class UpdateManager(Gtk.Window): |
814 | |
815 | iterate() |
816 | |
817 | +<<<<<<< UpdateManager/UpdateManager.py |
818 | self._check_oem_metapackages() |
819 | |
820 | self._get_ua_security_status() |
821 | @@ -493,6 +573,15 @@ class UpdateManager(Gtk.Window): |
822 | duplicate_packages=self.duplicate_packages, |
823 | ua_security_packages=self.ua_security_packages, |
824 | ) |
825 | +======= |
826 | + self._get_ua_security_status() |
827 | + |
828 | + self.update_list = UpdateList(self) |
829 | + try: |
830 | + self.update_list.update(self.cache, eventloop_callback=iterate, |
831 | + ua_security_packages=self. |
832 | + ua_security_packages) |
833 | +>>>>>>> UpdateManager/UpdateManager.py |
834 | except SystemError as e: |
835 | header = _("Could not calculate the upgrade") |
836 | desc = _( |
837 | diff --git a/UpdateManager/UpdatesAvailable.py b/UpdateManager/UpdatesAvailable.py |
838 | index 75cfd33..7477ffd 100644 |
839 | --- a/UpdateManager/UpdatesAvailable.py |
840 | +++ b/UpdateManager/UpdatesAvailable.py |
841 | @@ -75,6 +75,7 @@ from .UnitySupport import UnitySupport |
842 | # - screen reader does not say "Downloaded" for downloaded updates |
843 | |
844 | # list constants |
845 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
846 | ( |
847 | LIST_NAME, |
848 | LIST_UPDATE_DATA, |
849 | @@ -82,6 +83,10 @@ from .UnitySupport import UnitySupport |
850 | LIST_TOGGLE_ACTIVE, |
851 | LIST_SENSITIVE, |
852 | ) = range(5) |
853 | +======= |
854 | +(LIST_NAME, LIST_UPDATE_DATA, LIST_SIZE, LIST_TOGGLE_ACTIVE, |
855 | + LIST_SENSITIVE) = range(5) |
856 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
857 | |
858 | # NetworkManager enums |
859 | from .Core.roam import NetworkManagerHelper |
860 | @@ -256,6 +261,7 @@ class UpdatesAvailable(InternalDialog): |
861 | # self.button_help.set_sensitive(False) |
862 | |
863 | self.add_settings_button() |
864 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
865 | self.button_close = self.add_button( |
866 | Gtk.STOCK_CANCEL, self.window_main.close |
867 | ) |
868 | @@ -265,6 +271,14 @@ class UpdatesAvailable(InternalDialog): |
869 | self.button_install = self.add_button( |
870 | _("Install Now"), self.on_button_install_clicked |
871 | ) |
872 | +======= |
873 | + self.button_close = self.add_button(Gtk.STOCK_CANCEL, |
874 | + self.window_main.close) |
875 | + self.button_pro = self.add_button(_("Enable Ubuntu Pro..."), |
876 | + self.on_button_pro_clicked) |
877 | + self.button_install = self.add_button(_("Install Now"), |
878 | + self.on_button_install_clicked) |
879 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
880 | self.focus_button = self.button_install |
881 | |
882 | # create text view |
883 | @@ -310,6 +324,7 @@ class UpdatesAvailable(InternalDialog): |
884 | pkg_toggle_renderer.set_property("ypad", 2) |
885 | pkg_toggle_renderer.connect("toggled", self.on_update_toggled) |
886 | pkg_column.pack_start(pkg_toggle_renderer, False) |
887 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
888 | pkg_column.add_attribute( |
889 | pkg_toggle_renderer, "active", LIST_TOGGLE_ACTIVE |
890 | ) |
891 | @@ -319,6 +334,14 @@ class UpdatesAvailable(InternalDialog): |
892 | pkg_column.set_cell_data_func( |
893 | pkg_toggle_renderer, self.pkg_toggle_renderer_data_func |
894 | ) |
895 | +======= |
896 | + pkg_column.add_attribute(pkg_toggle_renderer, |
897 | + 'active', LIST_TOGGLE_ACTIVE) |
898 | + pkg_column.add_attribute(pkg_toggle_renderer, |
899 | + 'sensitive', LIST_SENSITIVE) |
900 | + pkg_column.set_cell_data_func(pkg_toggle_renderer, |
901 | + self.pkg_toggle_renderer_data_func) |
902 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
903 | |
904 | pkg_icon_renderer = Gtk.CellRendererPixbuf() |
905 | pkg_icon_renderer.set_property("ypad", 2) |
906 | @@ -346,7 +369,12 @@ class UpdatesAvailable(InternalDialog): |
907 | _("Download"), size_renderer, text=LIST_SIZE |
908 | ) |
909 | size_column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) |
910 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
911 | size_column.add_attribute(size_renderer, "sensitive", LIST_SENSITIVE) |
912 | +======= |
913 | + size_column.add_attribute(size_renderer, |
914 | + 'sensitive', LIST_SENSITIVE) |
915 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
916 | self.treeview_update.append_column(size_column) |
917 | |
918 | self.treeview_update.set_headers_visible(True) |
919 | @@ -371,9 +399,14 @@ class UpdatesAvailable(InternalDialog): |
920 | self.settings.get_boolean("show-details") |
921 | ) |
922 | self.expander_details.connect("activate", self.pre_activate_details) |
923 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
924 | self.expander_details.connect( |
925 | "notify::expanded", self.activate_details |
926 | ) |
927 | +======= |
928 | + self.expander_details.connect("notify::expanded", |
929 | + self.activate_details) |
930 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
931 | |
932 | # If auto-updates are on, change cancel label |
933 | self.notifier_settings = Gio.Settings.new("com.ubuntu.update-notifier") |
934 | @@ -401,6 +434,17 @@ class UpdatesAvailable(InternalDialog): |
935 | self.news.get_buffer().set_text(apt_news) |
936 | self.expander_news.set_visible(True) |
937 | |
938 | + try: |
939 | + from uaclient.api.u.apt_news.current_news.v1 import current_news |
940 | + apt_news = current_news().current_news |
941 | + except ImportError: |
942 | + apt_news = self._get_apt_news( |
943 | + "/var/lib/ubuntu-advantage/messages/apt-news" |
944 | + ) |
945 | + if apt_news: |
946 | + self.news.get_buffer().set_text(apt_news) |
947 | + self.expander_news.set_visible(True) |
948 | + |
949 | def stop(self): |
950 | InternalDialog.stop(self) |
951 | self._save_state() |
952 | @@ -584,6 +628,7 @@ class UpdatesAvailable(InternalDialog): |
953 | version = version_match.group(1) |
954 | # upload_archive = version_match.group(2).strip() |
955 | version_text = _("Version %s: \n") % version |
956 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
957 | changes_buffer.insert_with_tags_by_name( |
958 | end_iter, version_text, "versiontag" |
959 | ) |
960 | @@ -592,6 +637,14 @@ class UpdatesAvailable(InternalDialog): |
961 | end_iter, line + "\n", "changestag" |
962 | ) |
963 | elif author_match: |
964 | +======= |
965 | + changes_buffer.insert_with_tags_by_name(end_iter, version_text, |
966 | + "versiontag") |
967 | + elif changes_match: |
968 | + changes_buffer.insert_with_tags_by_name(end_iter, line + "\n", |
969 | + "changestag") |
970 | + elif (author_match): |
971 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
972 | pass |
973 | else: |
974 | changes_buffer.insert(end_iter, line + "\n") |
975 | @@ -633,7 +686,10 @@ class UpdatesAvailable(InternalDialog): |
976 | # replace all multiple spaces by newlines |
977 | p = re.compile(r"\s\s+", re.MULTILINE) |
978 | long_desc = p.sub("\n", long_desc) |
979 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
980 | long_desc = "Package: %s\n%s" % (item.pkg.name, long_desc) |
981 | +======= |
982 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
983 | |
984 | # now do the changelog |
985 | name = item.pkg.name |
986 | @@ -851,8 +907,13 @@ class UpdatesAvailable(InternalDialog): |
987 | self.button_pro.destroy() |
988 | elif (self.list.ubuntu_pro_fake_groups |
989 | and not self.list.ubuntu_pro_groups): |
990 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
991 | download_str = _("You need to enable Ubuntu Pro to install" |
992 | " these updates.") |
993 | +======= |
994 | + download_str = _("You need to enable Ubuntu Pro to " |
995 | + "install these updates.") |
996 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
997 | self.button_install.destroy() |
998 | else: |
999 | download_str = _("There are no updates to install.") |
1000 | @@ -1140,7 +1201,11 @@ class UpdatesAvailable(InternalDialog): |
1001 | UpdateData(groups, None, None), |
1002 | humanize_size(total_size), |
1003 | True, |
1004 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
1005 | sensitive, |
1006 | +======= |
1007 | + sensitive |
1008 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
1009 | ] |
1010 | return self.store.append(None, header_row) |
1011 | |
1012 | @@ -1163,16 +1228,23 @@ class UpdatesAvailable(InternalDialog): |
1013 | |
1014 | if group.name == "Ubuntu base": |
1015 | group.name = "System components" |
1016 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
1017 | name = group.name |
1018 | if len(group.items) > 1: |
1019 | name = '%s (%d)' % (group.name, len(group.items)) |
1020 | |
1021 | +======= |
1022 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
1023 | group_row = [ |
1024 | name, |
1025 | UpdateData(None, group, group_is_item), |
1026 | humanize_size(group.get_total_size()), |
1027 | True, |
1028 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
1029 | group.sensitive, |
1030 | +======= |
1031 | + group.sensitive |
1032 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
1033 | ] |
1034 | group_iter = self.store.append(None, group_row) |
1035 | |
1036 | @@ -1184,7 +1256,11 @@ class UpdatesAvailable(InternalDialog): |
1037 | UpdateData(None, None, item), |
1038 | humanize_size(getattr(item.pkg.candidate, "size", 0)), |
1039 | True, |
1040 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
1041 | group.sensitive, |
1042 | +======= |
1043 | + group.sensitive |
1044 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
1045 | ] |
1046 | self.store.append(group_iter, item_row) |
1047 | |
1048 | @@ -1219,12 +1295,15 @@ class UpdatesAvailable(InternalDialog): |
1049 | self.list.kernel_autoremove_groups, |
1050 | ) |
1051 | self._add_groups(self.list.kernel_autoremove_groups) |
1052 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
1053 | if self.list.duplicate_groups: |
1054 | self._add_header( |
1055 | _("Duplicate packages to be removed"), |
1056 | self.list.duplicate_groups, |
1057 | ) |
1058 | self._add_groups(self.list.duplicate_groups) |
1059 | +======= |
1060 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
1061 | if self.list.ubuntu_pro_groups: |
1062 | self._add_header( |
1063 | _("Ubuntu Pro security updates"), |
1064 | @@ -1246,9 +1325,13 @@ class UpdatesAvailable(InternalDialog): |
1065 | or bool(self.list.ubuntu_pro_groups) |
1066 | or bool(self.list.update_groups) |
1067 | or bool(self.list.security_groups) |
1068 | +<<<<<<< UpdateManager/UpdatesAvailable.py |
1069 | or bool(self.list.kernel_autoremove_groups) |
1070 | or bool(self.list.duplicate_groups) |
1071 | ) |
1072 | +======= |
1073 | + or bool(self.list.kernel_autoremove_groups)) |
1074 | +>>>>>>> UpdateManager/UpdatesAvailable.py |
1075 | self.update_close_button() |
1076 | self.update_count() |
1077 | self.setBusy(False) |
1078 | diff --git a/UpdateManager/backend/InstallBackendAptdaemon.py b/UpdateManager/backend/InstallBackendAptdaemon.py |
1079 | index 2959aa6..aed2548 100644 |
1080 | --- a/UpdateManager/backend/InstallBackendAptdaemon.py |
1081 | +++ b/UpdateManager/backend/InstallBackendAptdaemon.py |
1082 | @@ -129,9 +129,12 @@ class InstallBackendAptdaemon(InstallBackend, BuilderDialog): |
1083 | self._expanded_size = None |
1084 | self.button_cancel = None |
1085 | self.trans_failed_msg = None |
1086 | +<<<<<<< UpdateManager/backend/InstallBackendAptdaemon.py |
1087 | self.progressbar = None |
1088 | self._active_transaction = None |
1089 | self._expander = None |
1090 | +======= |
1091 | +>>>>>>> UpdateManager/backend/InstallBackendAptdaemon.py |
1092 | |
1093 | def close(self): |
1094 | if self.button_cancel and self.button_cancel.get_sensitive(): |
1095 | @@ -328,6 +331,7 @@ class InstallBackendAptdaemon(InstallBackend, BuilderDialog): |
1096 | try: |
1097 | reinstall = purge = downgrade = [] |
1098 | trans = yield self.client.commit_packages( |
1099 | +<<<<<<< UpdateManager/backend/InstallBackendAptdaemon.py |
1100 | pkgs_install, |
1101 | reinstall, |
1102 | pkgs_remove, |
1103 | @@ -347,6 +351,17 @@ class InstallBackendAptdaemon(InstallBackend, BuilderDialog): |
1104 | error_string=None, |
1105 | error_desc=None, |
1106 | ) |
1107 | +======= |
1108 | + pkgs_install, reinstall, pkgs_remove, purge, pkgs_upgrade, |
1109 | + downgrade, defer=True) |
1110 | + trans.connect("progress-changed", self._on_progress_changed) |
1111 | + yield self._show_transaction(trans, self.ACTION_INSTALL, |
1112 | + _("Installing updates…"), True) |
1113 | + except errors.NotAuthorizedError as e: |
1114 | + self._action_done(self.ACTION_INSTALL, |
1115 | + authorized=False, success=False, |
1116 | + error_string=None, error_desc=None) |
1117 | +>>>>>>> UpdateManager/backend/InstallBackendAptdaemon.py |
1118 | except errors.TransactionFailed as e: |
1119 | self.trans_failed_msg = str(e) |
1120 | except dbus.DBusException as e: |
1121 | @@ -524,6 +539,7 @@ class InstallBackendAptdaemon(InstallBackend, BuilderDialog): |
1122 | error_desc = error_desc + "\n" + self.trans_failed_msg |
1123 | # tell unity to hide the progress again |
1124 | self.unity.set_progress(-1) |
1125 | +<<<<<<< UpdateManager/backend/InstallBackendAptdaemon.py |
1126 | is_success = status == EXIT_SUCCESS |
1127 | try: |
1128 | self._action_done( |
1129 | @@ -534,10 +550,19 @@ class InstallBackendAptdaemon(InstallBackend, BuilderDialog): |
1130 | error_desc=error_desc, |
1131 | trans_failed=trans_failed, |
1132 | ) |
1133 | +======= |
1134 | + is_success = (status == EXIT_SUCCESS) |
1135 | + try: |
1136 | + self._action_done(action, |
1137 | + authorized=True, success=is_success, |
1138 | + error_string=error_string, error_desc=error_desc, |
1139 | + trans_failed=trans_failed) |
1140 | +>>>>>>> UpdateManager/backend/InstallBackendAptdaemon.py |
1141 | except TypeError: |
1142 | # this module used to be be lazily imported and in older code |
1143 | # trans_failed= is not accepted |
1144 | # TODO: this workaround can be dropped in Ubuntu 20.10 |
1145 | +<<<<<<< UpdateManager/backend/InstallBackendAptdaemon.py |
1146 | self._action_done( |
1147 | action, |
1148 | authorized=True, |
1149 | @@ -545,6 +570,11 @@ class InstallBackendAptdaemon(InstallBackend, BuilderDialog): |
1150 | error_string=error_string, |
1151 | error_desc=error_desc, |
1152 | ) |
1153 | +======= |
1154 | + self._action_done(action, |
1155 | + authorized=True, success=is_success, |
1156 | + error_string=error_string, error_desc=error_desc) |
1157 | +>>>>>>> UpdateManager/backend/InstallBackendAptdaemon.py |
1158 | |
1159 | |
1160 | if __name__ == "__main__": |
1161 | diff --git a/UpdateManager/backend/__init__.py b/UpdateManager/backend/__init__.py |
1162 | index 72a6031..9c669e6 100644 |
1163 | --- a/UpdateManager/backend/__init__.py |
1164 | +++ b/UpdateManager/backend/__init__.py |
1165 | @@ -11,8 +11,11 @@ gi.require_version("Snapd", "2") |
1166 | from gi.repository import GLib, Gtk, Snapd |
1167 | |
1168 | from apt import Cache |
1169 | +<<<<<<< UpdateManager/backend/__init__.py |
1170 | import json |
1171 | import logging |
1172 | +======= |
1173 | +>>>>>>> UpdateManager/backend/__init__.py |
1174 | import os |
1175 | import re |
1176 | import subprocess |
1177 | @@ -65,14 +68,20 @@ class InstallBackend(Dialog): |
1178 | fresh_cache = Cache(rootdir=self.window_main.cache.rootdir) |
1179 | for pkg in self.window_main.cache: |
1180 | try: |
1181 | +<<<<<<< UpdateManager/backend/__init__.py |
1182 | if ( |
1183 | pkg.marked_install |
1184 | and not fresh_cache[pkg.name].is_installed |
1185 | ): |
1186 | +======= |
1187 | + if pkg.marked_install and \ |
1188 | + not fresh_cache[pkg.name].is_installed: |
1189 | +>>>>>>> UpdateManager/backend/__init__.py |
1190 | pkgname = pkg.name |
1191 | if pkg.is_auto_installed: |
1192 | pkgname += "#auto" |
1193 | pkgs_install.append(pkgname) |
1194 | +<<<<<<< UpdateManager/backend/__init__.py |
1195 | elif ( |
1196 | pkg.marked_upgrade |
1197 | and fresh_cache[pkg.name].is_upgradable |
1198 | @@ -82,6 +91,13 @@ class InstallBackend(Dialog): |
1199 | pkg.marked_delete |
1200 | and fresh_cache[pkg.name].is_installed |
1201 | ): |
1202 | +======= |
1203 | + elif (pkg.marked_upgrade and |
1204 | + fresh_cache[pkg.name].is_upgradable): |
1205 | + pkgs_upgrade.append(pkg.name) |
1206 | + elif (pkg.marked_delete and |
1207 | + fresh_cache[pkg.name].is_installed): |
1208 | +>>>>>>> UpdateManager/backend/__init__.py |
1209 | pkgs_remove.append(pkg.name) |
1210 | except KeyError: |
1211 | # pkg missing from fresh_cache can't be modified |
1212 | @@ -247,6 +263,7 @@ class InstallBackend(Dialog): |
1213 | plug = conn_cols[1] |
1214 | slot = conn_cols[2] |
1215 | |
1216 | +<<<<<<< UpdateManager/backend/__init__.py |
1217 | if slot.startswith(snap + ":"): |
1218 | plug_snap = plug.split(":")[0] |
1219 | if ( |
1220 | @@ -373,6 +390,10 @@ class InstallBackend(Dialog): |
1221 | error_desc, |
1222 | trans_failed=False, |
1223 | ): |
1224 | +======= |
1225 | + def _action_done(self, action, authorized, success, error_string, |
1226 | + error_desc, trans_failed=False): |
1227 | +>>>>>>> UpdateManager/backend/__init__.py |
1228 | |
1229 | # If the progress dialog should be closed automatically afterwards |
1230 | # settings = Gio.Settings.new("com.ubuntu.update-manager") |
1231 | @@ -395,9 +416,14 @@ class InstallBackend(Dialog): |
1232 | elif success: |
1233 | self.window_main.start_available() |
1234 | elif error_string: |
1235 | +<<<<<<< UpdateManager/backend/__init__.py |
1236 | self.window_main.start_error( |
1237 | trans_failed, error_string, error_desc |
1238 | ) |
1239 | +======= |
1240 | + self.window_main.start_error(trans_failed, error_string, |
1241 | + error_desc) |
1242 | +>>>>>>> UpdateManager/backend/__init__.py |
1243 | else: |
1244 | # exit gracefuly, we can't just exit as this will trigger |
1245 | # a crash if system.exit() is called in a exception handler |
1246 | @@ -418,14 +444,20 @@ class InstallBackend(Dialog): |
1247 | |
1248 | |
1249 | # try aptdaemon |
1250 | +<<<<<<< UpdateManager/backend/__init__.py |
1251 | if ( |
1252 | os.path.exists("/usr/sbin/aptd") |
1253 | and "UPDATE_MANAGER_FORCE_BACKEND_SYNAPTIC" not in os.environ |
1254 | ): |
1255 | +======= |
1256 | +if os.path.exists("/usr/sbin/aptd") \ |
1257 | + and "UPDATE_MANAGER_FORCE_BACKEND_SYNAPTIC" not in os.environ: |
1258 | +>>>>>>> UpdateManager/backend/__init__.py |
1259 | # check if the gtkwidgets are installed as well |
1260 | try: |
1261 | from .InstallBackendAptdaemon import InstallBackendAptdaemon |
1262 | except ImportError: |
1263 | +<<<<<<< UpdateManager/backend/__init__.py |
1264 | logging.exception("importing aptdaemon") |
1265 | # try synaptic |
1266 | if ( |
1267 | @@ -435,6 +467,17 @@ if ( |
1268 | try: |
1269 | from .InstallBackendSynaptic import InstallBackendSynaptic |
1270 | except ImportError: |
1271 | +======= |
1272 | + import logging |
1273 | + logging.exception("importing aptdaemon") |
1274 | +# try synaptic |
1275 | +if os.path.exists("/usr/sbin/synaptic") \ |
1276 | + and "UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON" not in os.environ: |
1277 | + try: |
1278 | + from .InstallBackendSynaptic import InstallBackendSynaptic |
1279 | + except ImportError: |
1280 | + import logging |
1281 | +>>>>>>> UpdateManager/backend/__init__.py |
1282 | logging.exception("importing synaptic") |
1283 | |
1284 | |
1285 | @@ -449,18 +492,31 @@ def get_backend(*args, **kwargs): |
1286 | try: |
1287 | return InstallBackendAptdaemon(*args, **kwargs) |
1288 | except NameError: |
1289 | +<<<<<<< UpdateManager/backend/__init__.py |
1290 | logging.exception("using aptdaemon failed") |
1291 | # try synaptic |
1292 | if ( |
1293 | os.path.exists("/usr/sbin/synaptic") |
1294 | and "UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON" not in os.environ |
1295 | ): |
1296 | +======= |
1297 | + import logging |
1298 | + logging.exception("using aptdaemon failed") |
1299 | + # try synaptic |
1300 | + if (os.path.exists("/usr/sbin/synaptic") |
1301 | + and "UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON" not in os.environ): |
1302 | +>>>>>>> UpdateManager/backend/__init__.py |
1303 | try: |
1304 | return InstallBackendSynaptic(*args, **kwargs) |
1305 | except NameError: |
1306 | pass |
1307 | # nothing found, raise |
1308 | +<<<<<<< UpdateManager/backend/__init__.py |
1309 | raise Exception( |
1310 | "No working backend found, please try installing " |
1311 | "aptdaemon or synaptic" |
1312 | ) |
1313 | +======= |
1314 | + raise Exception("No working backend found, please try installing " |
1315 | + "aptdaemon or synaptic") |
1316 | +>>>>>>> UpdateManager/backend/__init__.py |
1317 | diff --git a/debian/changelog b/debian/changelog |
1318 | index b8ee063..3235c19 100644 |
1319 | --- a/debian/changelog |
1320 | +++ b/debian/changelog |
1321 | @@ -1,11 +1,37 @@ |
1322 | +<<<<<<< debian/changelog |
1323 | update-manager (1:24.04.1) noble; urgency=medium |
1324 | +======= |
1325 | +update-manager (1:18.04.11.21) bionic; urgency=medium |
1326 | +>>>>>>> debian/changelog |
1327 | |
1328 | * Fix incorrect available version for Ubuntu Pro updates in unattached case |
1329 | (LP: #2043425). |
1330 | |
1331 | +<<<<<<< debian/changelog |
1332 | -- Nathan Pratta Teodosio <nathan.teodosio@canonical.com> Wed, 15 Nov 2023 11:45:02 +0100 |
1333 | |
1334 | update-manager (1:23.10.2) mantic; urgency=medium |
1335 | +======= |
1336 | + -- Nathan Pratta Teodosio <nathan.teodosio@canonical.com> Thu, 16 Nov 2023 10:03:37 +0100 |
1337 | + +0100 |
1338 | + |
1339 | +update-manager (1:18.04.11.20) bionic; urgency=medium |
1340 | + |
1341 | + * Ubuntu Pro (LP: #1990450): |
1342 | + - fix another linter error which was created while fixing a missing |
1343 | + space in the previous upload... |
1344 | + |
1345 | + -- Sebastien Bacher <seb128@ubuntu.com> Fri, 06 Oct 2023 09:31:28 +0200 |
1346 | + |
1347 | +update-manager (1:18.04.11.19) bionic; urgency=medium |
1348 | + |
1349 | + * Ubuntu Pro (LP: #1990450): |
1350 | + - Address linter errors that cause autopkgtest to fail. |
1351 | + |
1352 | + -- Nathan Pratta Teodosio <nathan.teodosio@canonical.com> Thu, 05 Oct 2023 10:38:09 +0200 |
1353 | + |
1354 | +update-manager (1:18.04.11.18) bionic; urgency=medium |
1355 | +>>>>>>> debian/changelog |
1356 | |
1357 | * Ubuntu Pro (LP: #1990450): |
1358 | - Show Ubuntu Pro packages, whether the system is attached to Ubuntu Pro |
1359 | @@ -16,6 +42,7 @@ update-manager (1:23.10.2) mantic; urgency=medium |
1360 | - Add News pane in a expander. |
1361 | - Replace notebook with Description and Changes tabs by a pane. |
1362 | |
1363 | +<<<<<<< debian/changelog |
1364 | -- Nathan Pratta Teodosio <nathan.teodosio@canonical.com> Mon, 25 Sep 2023 17:03:10 +0200 |
1365 | |
1366 | update-manager (1:23.10.1) mantic; urgency=medium |
1367 | @@ -296,12 +323,44 @@ update-manager (1:20.04.12) groovy; urgency=medium |
1368 | -- Marcus Tomlinson <marcus.tomlinson@canonical.com> Thu, 28 May 2020 10:11:51 +0100 |
1369 | |
1370 | update-manager (1:20.04.11) groovy; urgency=medium |
1371 | +======= |
1372 | + -- Nathan Pratta Teodosio <nathan.teodosio@canonical.com> Tue, 29 Aug 2023 07:47:20 +0200 |
1373 | + |
1374 | +update-manager (1:18.04.11.17) bionic; urgency=medium |
1375 | + |
1376 | + * Fix Ubuntu Pro updates checkbox and expander widget from overlapping |
1377 | + (LP: #1990450) |
1378 | + |
1379 | + -- Robert Ancell <robert.ancell@canonical.com> Fri, 03 Feb 2023 14:55:56 +1300 |
1380 | + |
1381 | +update-manager (1:18.04.11.16) bionic; urgency=medium |
1382 | + |
1383 | + * Update of the parsing for pro client changes (lp: #1990450) |
1384 | + |
1385 | + -- Sebastien Bacher <seb128@ubuntu.com> Thu, 26 Jan 2023 12:05:05 +0100 |
1386 | + |
1387 | +update-manager (1:18.04.11.15) bionic; urgency=medium |
1388 | + |
1389 | + * Show pending Ubuntu pro packages (LP: #1990450) |
1390 | + |
1391 | + -- Robert Ancell <robert.ancell@canonical.com> Wed, 18 Jan 2023 15:09:17 +1300 |
1392 | + |
1393 | +update-manager (1:18.04.11.14) bionic; urgency=medium |
1394 | + |
1395 | + * tests/test_meta_release_core.py: switch a test from using lucid to bionic |
1396 | + as precise was removed from the archive. (LP: #1929865) |
1397 | + |
1398 | + -- Brian Murray <brian@ubuntu.com> Thu, 27 May 2021 13:54:14 -0700 |
1399 | + |
1400 | +update-manager (1:18.04.11.13) bionic; urgency=medium |
1401 | +>>>>>>> debian/changelog |
1402 | |
1403 | * UpdateManager/UpdateManager.py: when refreshing the cache and encountering |
1404 | an error return rather than trying to use the undefined cache which causes |
1405 | crashes. Additionally, don't present the dialog with a "Try Again" button |
1406 | which won't do anything. (LP: #1826213) |
1407 | |
1408 | +<<<<<<< debian/changelog |
1409 | -- Brian Murray <brian@ubuntu.com> Wed, 27 May 2020 13:29:24 -0700 |
1410 | |
1411 | update-manager (1:20.04.10) focal; urgency=medium |
1412 | @@ -429,11 +488,37 @@ update-manager (1:19.04.3) disco; urgency=medium |
1413 | -- Jeremy Bicha <jbicha@ubuntu.com> Sun, 10 Feb 2019 13:23:47 -0500 |
1414 | |
1415 | update-manager (1:19.04.2) disco; urgency=medium |
1416 | +======= |
1417 | + -- Brian Murray <brian@ubuntu.com> Wed, 03 Jun 2020 11:41:50 -0700 |
1418 | + |
1419 | +update-manager (1:18.04.11.12) bionic; urgency=medium |
1420 | + |
1421 | + * Resolve pep8 failures. |
1422 | + |
1423 | + -- Brian Murray <brian@ubuntu.com> Tue, 21 Apr 2020 07:27:24 -0700 |
1424 | + |
1425 | +update-manager (1:18.04.11.11) bionic; urgency=medium |
1426 | + |
1427 | + * UpdateManager/UpdateManager.py: Do not offer to upgrade systems running on |
1428 | + an i386 host architecture to another release. (LP: #1845690) |
1429 | + |
1430 | + -- Brian Murray <brian@ubuntu.com> Thu, 09 Apr 2020 13:39:04 -0700 |
1431 | + |
1432 | +update-manager (1:18.04.11.10) bionic; urgency=medium |
1433 | + |
1434 | + * UpdateManager/Core/utils.py: when testing to see if a url is downloadable |
1435 | + support https in addition to http and ftp. (LP: #1823410) |
1436 | + |
1437 | + -- Brian Murray <brian@ubuntu.com> Tue, 09 Apr 2019 16:03:46 -0700 |
1438 | + |
1439 | +update-manager (1:18.04.11.9) bionic; urgency=medium |
1440 | +>>>>>>> debian/changelog |
1441 | |
1442 | * UpdateManager/Core/MetaRelease.py: set prompt in MetaReleaseCore so that |
1443 | do-release-upgrade can provide more informative error messages. |
1444 | (LP: #1798618, LP: #1795024) |
1445 | |
1446 | +<<<<<<< debian/changelog |
1447 | -- Brian Murray <brian@ubuntu.com> Wed, 28 Nov 2018 09:49:44 -0800 |
1448 | |
1449 | update-manager (1:19.04.1) disco; urgency=medium |
1450 | @@ -469,6 +554,39 @@ update-manager (1:18.10.9) cosmic; urgency=medium |
1451 | -- Balint Reczey <rbalint@ubuntu.com> Mon, 01 Oct 2018 18:00:40 +0200 |
1452 | |
1453 | update-manager (1:18.10.8) cosmic; urgency=medium |
1454 | +======= |
1455 | + -- Brian Murray <brian@ubuntu.com> Mon, 14 Jan 2019 13:40:08 -0800 |
1456 | + |
1457 | +update-manager (1:18.04.11.8) bionic; urgency=medium |
1458 | + |
1459 | + * Do not show the livepatch reminder if update-manager is running |
1460 | + on a distribution without software-properties-gtk. (LP: #1805118) |
1461 | + |
1462 | + -- Andrea Azzarone <andrea.azzarone@canonical.com> Tue, 27 Nov 2018 13:26:00 +0000 |
1463 | + |
1464 | +update-manager (1:18.04.11.7) bionic; urgency=medium |
1465 | + |
1466 | + * Add a reminder to enable Livepatch (LP: #1787553). |
1467 | + * Build-Depends on python3-distro-info. |
1468 | + |
1469 | + -- Andrea Azzarone <andrea.azzarone@canonical.com> Fri, 07 Sep 2018 10:41:28 +0200 |
1470 | + |
1471 | +update-manager (1:18.04.11.6) bionic; urgency=medium |
1472 | + |
1473 | + * Keep or delete packages after looping over all of them. |
1474 | + This prevents the resolver from changing the packages in the loop resulting |
1475 | + in not keeping some phased packages back from being upgraded. (LP: #1072136) |
1476 | + * Stop lazy import of InstallBackends. |
1477 | + Lazy imports made update-manager crash when an update-manager |
1478 | + update changed the backend API and an updated incompatible backend |
1479 | + was loaded to the not updated running update-manager process. (LP: #1795898) |
1480 | + * Cancel transaction on exit only when Cancel button is active. |
1481 | + Also ignore exception when cancellation fails. (LP: #1790670) |
1482 | + |
1483 | + -- Balint Reczey <rbalint@ubuntu.com> Thu, 04 Oct 2018 21:33:57 +0200 |
1484 | + |
1485 | +update-manager (1:18.04.11.5) bionic; urgency=medium |
1486 | +>>>>>>> debian/changelog |
1487 | |
1488 | * Print transaction error and let the user try again applying updates |
1489 | (LP: #1317164) |
1490 | @@ -480,6 +598,7 @@ update-manager (1:18.10.8) cosmic; urgency=medium |
1491 | a race condition where packages to be removed are already removed. |
1492 | (LP: #1791931) |
1493 | |
1494 | +<<<<<<< debian/changelog |
1495 | -- Balint Reczey <rbalint@ubuntu.com> Tue, 11 Sep 2018 13:40:57 +0200 |
1496 | |
1497 | update-manager (1:18.10.7) cosmic; urgency=medium |
1498 | @@ -512,10 +631,22 @@ update-manager (1:18.10.4) cosmic; urgency=medium |
1499 | -- Brian Murray <brian@ubuntu.com> Fri, 31 Aug 2018 15:38:33 -0700 |
1500 | |
1501 | update-manager (1:18.10.3) cosmic; urgency=medium |
1502 | +======= |
1503 | + -- Balint Reczey <rbalint@ubuntu.com> Mon, 17 Sep 2018 17:16:38 +0200 |
1504 | + |
1505 | +update-manager (1:18.04.11.4) bionic; urgency=medium |
1506 | + |
1507 | + * Adjust dates in hwe-support-status for bionic (LP: #1775236) |
1508 | + |
1509 | + -- Julian Andres Klode <juliank@ubuntu.com> Fri, 20 Jul 2018 12:26:28 +0200 |
1510 | + |
1511 | +update-manager (1:18.04.11.3) bionic; urgency=medium |
1512 | +>>>>>>> debian/changelog |
1513 | |
1514 | * Add support for HTTPS proxies; this breaks UpdateManager.Core.utils.init_proxy() |
1515 | API - the return value is now a dict, rather than a string (LP: #1771914). |
1516 | |
1517 | +<<<<<<< debian/changelog |
1518 | -- Julian Andres Klode <juliank@ubuntu.com> Wed, 27 Jun 2018 14:16:45 +0200 |
1519 | |
1520 | update-manager (1:18.10.2) cosmic; urgency=medium |
1521 | @@ -531,6 +662,24 @@ update-manager (1:18.10.1) cosmic; urgency=medium |
1522 | initial analysis of this bug. (LP: #1637180) |
1523 | |
1524 | -- Mathieu Trudel-Lapierre <cyphermox@ubuntu.com> Mon, 28 May 2018 10:03:52 -0400 |
1525 | +======= |
1526 | + -- Julian Andres Klode <juliank@ubuntu.com> Fri, 29 Jun 2018 14:44:16 +0200 |
1527 | + |
1528 | +update-manager (1:18.04.11.2) bionic; urgency=medium |
1529 | + |
1530 | + * Fix my embarassing typo that makes update-manager report crashes, when |
1531 | + instanciating the "reboot" dialog and mangling signals. (LP: #1774131) |
1532 | + |
1533 | + -- Mathieu Trudel-Lapierre <cyphermox@ubuntu.com> Fri, 08 Jun 2018 11:50:10 -0700 |
1534 | + |
1535 | +update-manager (1:18.04.11.1) bionic; urgency=medium |
1536 | + |
1537 | + * Block style context changed signal while enforcing the main window's |
1538 | + constant size. Thanks to Thomas Waldmann and Sebastien Bacher for the |
1539 | + initial analysis of this bug. (LP: #1637180) |
1540 | + |
1541 | + -- Mathieu Trudel-Lapierre <cyphermox@ubuntu.com> Mon, 28 May 2018 10:13:12 -0400 |
1542 | +>>>>>>> debian/changelog |
1543 | |
1544 | update-manager (1:18.04.11) bionic; urgency=medium |
1545 | |
1546 | diff --git a/debian/control b/debian/control |
1547 | index c481028..f216b4e 100644 |
1548 | --- a/debian/control |
1549 | +++ b/debian/control |
1550 | @@ -9,8 +9,11 @@ Build-Depends: debhelper (>= 9), |
1551 | python3-all (>= 3.3.0-2), |
1552 | python3-dbus, |
1553 | python3-distro-info, |
1554 | +<<<<<<< debian/control |
1555 | python3-distupgrade, |
1556 | python3-distutils-extra (>= 2.38), |
1557 | +======= |
1558 | +>>>>>>> debian/control |
1559 | python3-gi (>= 3.8), |
1560 | python3-yaml, |
1561 | Build-Depends-Indep: intltool, |
1562 | @@ -25,6 +28,7 @@ Architecture: all |
1563 | Section: admin |
1564 | Depends: distro-info-data, |
1565 | python3-distro-info, |
1566 | +<<<<<<< debian/control |
1567 | python3-update-manager (= ${source:Version}), |
1568 | ubuntu-advantage-tools, |
1569 | ubuntu-release-upgrader-core (>= 1:18.04.9), |
1570 | @@ -34,6 +38,17 @@ Recommends: libpam-modules (>= 1.0.1-9ubuntu3), |
1571 | Replaces: update-manager (<< 1:0.146.2), |
1572 | Breaks: computer-janitor (<= 1.11-0ubuntu1), |
1573 | update-manager (<< 1:0.146.2), |
1574 | +======= |
1575 | + python3-yaml, |
1576 | + distro-info-data, |
1577 | + lsb-release, |
1578 | + ubuntu-advantage-tools, |
1579 | + ubuntu-release-upgrader-core (>= 1:18.04.9) |
1580 | +Recommends: libpam-modules (>= 1.0.1-9ubuntu3) |
1581 | +Replaces: update-manager (<< 1:0.146.2) |
1582 | +Breaks: update-manager (<< 1:0.146.2), |
1583 | + computer-janitor (<= 1.11-0ubuntu1) |
1584 | +>>>>>>> debian/control |
1585 | Description: manage release upgrades |
1586 | This is the core of update-manager and the release upgrader |
1587 | |
1588 | diff --git a/hwe-support-status b/hwe-support-status |
1589 | index fd484a3..fa14477 100755 |
1590 | --- a/hwe-support-status |
1591 | +++ b/hwe-support-status |
1592 | @@ -42,8 +42,13 @@ UNSUPPORTED_KERNEL_IMAGE_REGEX = ( |
1593 | ) |
1594 | |
1595 | # HWE stack with a long support period |
1596 | +<<<<<<< hwe-support-status |
1597 | HWE_SUPPORTED_BACKPORT = "-hwe-22.04" |
1598 | SUPPORTED_KERNEL_IMAGE_REGEX = r"^$" # No fixed backported kernel yet |
1599 | +======= |
1600 | +HWE_SUPPORTED_BACKPORT = "-hwe-18.04" |
1601 | +SUPPORTED_KERNEL_IMAGE_REGEX = r'^$' # No fixed backported kernel yet |
1602 | +>>>>>>> hwe-support-status |
1603 | |
1604 | |
1605 | KERNEL_METAPKGS = ( |
1606 | diff --git a/tests/test_backend_error.py b/tests/test_backend_error.py |
1607 | index 38785cb..611bf0f 100644 |
1608 | --- a/tests/test_backend_error.py |
1609 | +++ b/tests/test_backend_error.py |
1610 | @@ -5,14 +5,26 @@ import logging |
1611 | import mock |
1612 | import sys |
1613 | import unittest |
1614 | +<<<<<<< tests/test_backend_error.py |
1615 | from mock import patch |
1616 | |
1617 | import os |
1618 | |
1619 | +======= |
1620 | +from gettext import gettext as _ |
1621 | +from mock import patch |
1622 | + |
1623 | +from UpdateManager.Dialogs import NoUpdatesDialog |
1624 | +from UpdateManager.UpdateManager import UpdateManager |
1625 | +from UpdateManager.UpdatesAvailable import UpdatesAvailable |
1626 | + |
1627 | +import os |
1628 | +>>>>>>> tests/test_backend_error.py |
1629 | CURDIR = os.path.dirname(os.path.abspath(__file__)) |
1630 | |
1631 | |
1632 | class TestBackendError(unittest.TestCase): |
1633 | +<<<<<<< tests/test_backend_error.py |
1634 | def setUp(self): |
1635 | os.environ["UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON"] = "1" |
1636 | |
1637 | @@ -32,11 +44,35 @@ class TestBackendError(unittest.TestCase): |
1638 | update.side_effect = lambda: update_backend._action_done( |
1639 | InstallBackend.ACTION_UPDATE, True, False, "string", "desc" |
1640 | ) |
1641 | +======= |
1642 | + |
1643 | + def setUp(self): |
1644 | + os.environ['UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON'] = '1' |
1645 | + |
1646 | + def clear_environ(): |
1647 | + del os.environ['UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON'] |
1648 | + |
1649 | + self.addCleanup(clear_environ) |
1650 | + |
1651 | + @patch('UpdateManager.backend.InstallBackendAptdaemon.update') |
1652 | + def test_backend_error(self, update): |
1653 | + main = mock.MagicMock() |
1654 | + main.datadir = os.path.join(CURDIR, '..', 'data') |
1655 | + |
1656 | + from UpdateManager.backend import (InstallBackend, get_backend) |
1657 | + update_backend = get_backend(main, InstallBackend.ACTION_UPDATE) |
1658 | + update.side_effect = lambda: update_backend._action_done( |
1659 | + InstallBackend.ACTION_UPDATE, True, False, "string", "desc") |
1660 | +>>>>>>> tests/test_backend_error.py |
1661 | update_backend.start() |
1662 | main.start_error.assert_called_once_with(True, "string", "desc") |
1663 | |
1664 | |
1665 | +<<<<<<< tests/test_backend_error.py |
1666 | if __name__ == "__main__": |
1667 | +======= |
1668 | +if __name__ == '__main__': |
1669 | +>>>>>>> tests/test_backend_error.py |
1670 | if len(sys.argv) > 1 and sys.argv[1] == "-v": |
1671 | logging.basicConfig(level=logging.DEBUG) |
1672 | unittest.main() |
1673 | diff --git a/tests/test_hwe_support_status.py b/tests/test_hwe_support_status.py |
1674 | index e811ef9..a4449eb 100644 |
1675 | --- a/tests/test_hwe_support_status.py |
1676 | +++ b/tests/test_hwe_support_status.py |
1677 | @@ -153,8 +153,12 @@ class HweSupportStatusTestCase(TestCase): |
1678 | text = mock_print.call_args[0][0] |
1679 | print("43242343243", mock_print.call_count) |
1680 | self.assertIn( |
1681 | +<<<<<<< tests/test_hwe_support_status.py |
1682 | "Your system is supported until April 2027", text |
1683 | ) |
1684 | +======= |
1685 | + "Your system is supported until April 2023", text) |
1686 | +>>>>>>> tests/test_hwe_support_status.py |
1687 | |
1688 | def test_advice_about_hwe_status_supported_hwe_stack(self): |
1689 | with patch("hwe_support_status.is_unsupported_hwe_running") as m: |
1690 | @@ -174,9 +178,13 @@ class HweSupportStatusTestCase(TestCase): |
1691 | text = mock_print.call_args[0][0] |
1692 | self.assertIn( |
1693 | "Your Hardware Enablement Stack (HWE) is supported " |
1694 | +<<<<<<< tests/test_hwe_support_status.py |
1695 | "until April 2027", |
1696 | text, |
1697 | ) |
1698 | +======= |
1699 | + "until April 2023", text) |
1700 | +>>>>>>> tests/test_hwe_support_status.py |
1701 | |
1702 | |
1703 | if __name__ == "__main__": |
1704 | diff --git a/tests/test_meta_release_core.py b/tests/test_meta_release_core.py |
1705 | index 954a0ba..37af4ae 100644 |
1706 | --- a/tests/test_meta_release_core.py |
1707 | +++ b/tests/test_meta_release_core.py |
1708 | @@ -121,6 +121,18 @@ class TestMetaReleaseCore(unittest.TestCase): |
1709 | "download https with no proxy failed", |
1710 | ) |
1711 | |
1712 | + @unittest.skipUnless(url_downloadable( |
1713 | + "https://ubuntu.com", logging.debug), |
1714 | + "Could not reach https test site") |
1715 | + def test_https_url_downloadable(self): |
1716 | + with EnvironmentVarGuard() as environ: |
1717 | + logging.debug("no proxy, https address") |
1718 | + del environ["http_proxy"] |
1719 | + install_opener(None) |
1720 | + self.assertTrue(url_downloadable("https://ubuntu.com", |
1721 | + logging.debug), |
1722 | + "download https with no proxy failed") |
1723 | + |
1724 | def test_url_downloadable(self): |
1725 | from UpdateManager.Core.utils import url_downloadable |
1726 | |
1727 | @@ -154,12 +166,18 @@ class TestMetaReleaseCore(unittest.TestCase): |
1728 | ) |
1729 | |
1730 | logging.debug("no proxy, no valid address") |
1731 | +<<<<<<< tests/test_meta_release_core.py |
1732 | self.assertFalse( |
1733 | url_downloadable( |
1734 | "http://archive.ubuntu.com/xxx", logging.debug |
1735 | ), |
1736 | "download with no proxy failed", |
1737 | ) |
1738 | +======= |
1739 | + self.assertFalse(url_downloadable("http://archive.ubuntu.com/xxx", |
1740 | + logging.debug), |
1741 | + "download with no proxy failed") |
1742 | +>>>>>>> tests/test_meta_release_core.py |
1743 | |
1744 | logging.debug("proxy, no valid address") |
1745 | environ["http_proxy"] = "http://localhost:%s" % self.port |
1746 | @@ -186,7 +204,11 @@ class TestMetaReleaseCore(unittest.TestCase): |
1747 | supported for supported in di.supported() if di.is_lts(supported) |
1748 | ] |
1749 | with EnvironmentVarGuard() as environ: |
1750 | +<<<<<<< tests/test_meta_release_core.py |
1751 | environ["META_RELEASE_FAKE_CODENAME"] = ltses[-2] |
1752 | +======= |
1753 | + environ["META_RELEASE_FAKE_CODENAME"] = "bionic" |
1754 | +>>>>>>> tests/test_meta_release_core.py |
1755 | meta = MetaReleaseCore(forceDownload=True) |
1756 | while meta.downloading: |
1757 | time.sleep(0.1) |
1758 | diff --git a/tests/test_pep8.py b/tests/test_pep8.py |
1759 | new file mode 100644 |
1760 | index 0000000..5127dfe |
1761 | --- /dev/null |
1762 | +++ b/tests/test_pep8.py |
1763 | @@ -0,0 +1,42 @@ |
1764 | +<<<<<<< tests/test_pep8.py |
1765 | +======= |
1766 | +#!/usr/bin/python3 |
1767 | +# -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*- |
1768 | + |
1769 | +import os |
1770 | +import subprocess |
1771 | +import unittest |
1772 | + |
1773 | +# pep8 is overdoing it a bit IMO |
1774 | +IGNORE_PEP8 = "E265,E402,W503" |
1775 | +IGNORE_FILES = ( |
1776 | +) |
1777 | + |
1778 | + |
1779 | +class TestPep8Clean(unittest.TestCase): |
1780 | + """ ensure that the tree is pep8 clean """ |
1781 | + |
1782 | + def test_pep8_clean(self): |
1783 | + CURDIR = os.path.dirname(os.path.abspath(__file__)) |
1784 | + py_files = set() |
1785 | + for dirpath, dirs, files in os.walk(os.path.join(CURDIR, "..")): |
1786 | + for f in files: |
1787 | + if os.path.splitext(f)[1] != ".py": |
1788 | + continue |
1789 | + # islink to avoid running pep8 on imported files |
1790 | + # that are symlinks to other packages |
1791 | + if os.path.islink(os.path.join(dirpath, f)): |
1792 | + continue |
1793 | + if f in IGNORE_FILES: |
1794 | + continue |
1795 | + py_files.add(os.path.join(dirpath, f)) |
1796 | + ret_code = subprocess.call( |
1797 | + ["pep8", "--ignore={0}".format(IGNORE_PEP8)] + list(py_files)) |
1798 | + self.assertEqual(0, ret_code) |
1799 | + |
1800 | + |
1801 | +if __name__ == "__main__": |
1802 | + import logging |
1803 | + logging.basicConfig(level=logging.DEBUG) |
1804 | + unittest.main() |
1805 | +>>>>>>> tests/test_pep8.py |
1806 | diff --git a/tests/test_proxy.py b/tests/test_proxy.py |
1807 | index 266f173..1146fb4 100644 |
1808 | --- a/tests/test_proxy.py |
1809 | +++ b/tests/test_proxy.py |
1810 | @@ -31,16 +31,24 @@ class TestInitProxy(unittest.TestCase): |
1811 | apt_pkg.config.set("Acquire::http::proxy", self.proxy) |
1812 | apt_pkg.config.set("Acquire::https::proxy", self.https_proxy) |
1813 | from gi.repository import Gio |
1814 | +<<<<<<< tests/test_proxy.py |
1815 | |
1816 | settings = Gio.Settings.new("com.ubuntu.update-manager") |
1817 | detected_proxy = init_proxy(settings) |
1818 | self.assertEqual( |
1819 | detected_proxy, {"http": self.proxy, "https": self.https_proxy} |
1820 | ) |
1821 | +======= |
1822 | + settings = Gio.Settings.new("com.ubuntu.update-manager") |
1823 | + detected_proxy = init_proxy(settings) |
1824 | + self.assertEqual(detected_proxy, {"http": self.proxy, |
1825 | + "https": self.https_proxy}) |
1826 | +>>>>>>> tests/test_proxy.py |
1827 | |
1828 | def testinitproxyHttpOnly(self): |
1829 | apt_pkg.config.set("Acquire::http::proxy", self.proxy) |
1830 | from gi.repository import Gio |
1831 | +<<<<<<< tests/test_proxy.py |
1832 | |
1833 | settings = Gio.Settings.new("com.ubuntu.update-manager") |
1834 | detected_proxy = init_proxy(settings) |
1835 | @@ -50,6 +58,29 @@ class TestInitProxy(unittest.TestCase): |
1836 | |
1837 | def testinitproxyHttpOnlyWithHttpsUri(self): |
1838 | apt_pkg.config.set("Acquire::http::proxy", self.https_proxy) |
1839 | +======= |
1840 | + settings = Gio.Settings.new("com.ubuntu.update-manager") |
1841 | + detected_proxy = init_proxy(settings) |
1842 | + self.assertEqual(detected_proxy, {"http": self.proxy, |
1843 | + "https": self.proxy}) |
1844 | + |
1845 | + def testinitproxyHttpOnlyWithHttpsUri(self): |
1846 | + apt_pkg.config.set("Acquire::http::proxy", self.https_proxy) |
1847 | + from gi.repository import Gio |
1848 | + settings = Gio.Settings.new("com.ubuntu.update-manager") |
1849 | + detected_proxy = init_proxy(settings) |
1850 | + self.assertEqual(detected_proxy, {"http": self.https_proxy, |
1851 | + "https": self.https_proxy}) |
1852 | + |
1853 | + def testinitproxyHttpsOnly(self): |
1854 | + apt_pkg.config.set("Acquire::https::proxy", self.https_proxy) |
1855 | + from gi.repository import Gio |
1856 | + settings = Gio.Settings.new("com.ubuntu.update-manager") |
1857 | + detected_proxy = init_proxy(settings) |
1858 | + self.assertEqual(detected_proxy, {"https": self.https_proxy}) |
1859 | + |
1860 | + def testinitproxyNoProxy(self): |
1861 | +>>>>>>> tests/test_proxy.py |
1862 | from gi.repository import Gio |
1863 | |
1864 | settings = Gio.Settings.new("com.ubuntu.update-manager") |
1865 | diff --git a/tests/test_update_error.py b/tests/test_update_error.py |
1866 | index c7b2eda..1daa99f 100644 |
1867 | --- a/tests/test_update_error.py |
1868 | +++ b/tests/test_update_error.py |
1869 | @@ -41,12 +41,20 @@ class TestUpdateManagerError(unittest.TestCase): |
1870 | self.manager, 1, error_occurred=True |
1871 | ) |
1872 | self.assertIsInstance(p, UpdatesAvailable) |
1873 | +<<<<<<< tests/test_update_error.py |
1874 | self.assertEqual( |
1875 | p.custom_desc, _("Some software couldn’t be checked for updates.") |
1876 | ) |
1877 | |
1878 | |
1879 | if __name__ == "__main__": |
1880 | +======= |
1881 | + self.assertEqual(p.custom_desc, |
1882 | + _("Some software couldn’t be checked for updates.")) |
1883 | + |
1884 | + |
1885 | +if __name__ == '__main__': |
1886 | +>>>>>>> tests/test_update_error.py |
1887 | if len(sys.argv) > 1 and sys.argv[1] == "-v": |
1888 | logging.basicConfig(level=logging.DEBUG) |
1889 | unittest.main() |