Merge ~nteodosio/update-manager:bionic-ua into update-manager: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
Reviewer Review Type Date Requested Status
Sebastien Bacher Pending
Review via email: mp+455888@code.launchpad.net

This proposal has been superseded by a proposal from 2023-11-20.

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.

LP:2043425

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 SoftwarePropertiesPage enumeration-class.

6f33dc2... by Nathan Teodosio

Reset UpdateManagerVersion.py to bzr.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/.gitignore b/.gitignore
2new file mode 100644
3index 0000000..0370a5e
4--- /dev/null
5+++ b/.gitignore
6@@ -0,0 +1,2 @@
7+tags
8+__pycache__
9diff --git a/HweSupportStatus/consts.py b/HweSupportStatus/consts.py
10index 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
72diff --git a/UpdateManager/Core/MetaRelease.py b/UpdateManager/Core/MetaRelease.py
73index 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
111diff --git a/UpdateManager/Core/MyCache.py b/UpdateManager/Core/MyCache.py
112index 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
136diff --git a/UpdateManager/Core/UpdateList.py b/UpdateManager/Core/UpdateList.py
137index 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
475diff --git a/UpdateManager/Core/utils.py b/UpdateManager/Core/utils.py
476index 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)
531diff --git a/UpdateManager/Dialogs.py b/UpdateManager/Dialogs.py
532index 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):
599diff --git a/UpdateManager/UpdateManager.py b/UpdateManager/UpdateManager.py
600index 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 = _(
837diff --git a/UpdateManager/UpdatesAvailable.py b/UpdateManager/UpdatesAvailable.py
838index 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)
1078diff --git a/UpdateManager/backend/InstallBackendAptdaemon.py b/UpdateManager/backend/InstallBackendAptdaemon.py
1079index 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__":
1161diff --git a/UpdateManager/backend/__init__.py b/UpdateManager/backend/__init__.py
1162index 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
1317diff --git a/debian/changelog b/debian/changelog
1318index 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
1546diff --git a/debian/control b/debian/control
1547index 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
1588diff --git a/hwe-support-status b/hwe-support-status
1589index 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 = (
1606diff --git a/tests/test_backend_error.py b/tests/test_backend_error.py
1607index 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()
1673diff --git a/tests/test_hwe_support_status.py b/tests/test_hwe_support_status.py
1674index 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__":
1704diff --git a/tests/test_meta_release_core.py b/tests/test_meta_release_core.py
1705index 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)
1758diff --git a/tests/test_pep8.py b/tests/test_pep8.py
1759new file mode 100644
1760index 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
1806diff --git a/tests/test_proxy.py b/tests/test_proxy.py
1807index 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")
1865diff --git a/tests/test_update_error.py b/tests/test_update_error.py
1866index 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()

Subscribers

People subscribed via source and target branches