Merge lp:~rbalint/update-manager/lp-1795898-lp-1790670-cosmic into lp:update-manager

Proposed by Balint Reczey
Status: Merged
Merged at revision: 2843
Proposed branch: lp:~rbalint/update-manager/lp-1795898-lp-1790670-cosmic
Merge into: lp:update-manager
Diff against target: 176 lines (+89/-31)
5 files modified
UpdateManager/backend/InstallBackendAptdaemon.py (+7/-2)
UpdateManager/backend/__init__.py (+26/-6)
debian/changelog (+11/-0)
tests/test_backend_error.py (+45/-0)
tests/test_update_error.py (+0/-23)
To merge this branch: bzr merge lp:~rbalint/update-manager/lp-1795898-lp-1790670-cosmic
Reviewer Review Type Date Requested Status
Julian Andres Klode Approve
Brian Murray Pending
alex Pending
Ubuntu Core Development Team Pending
Review via email: mp+356105@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Brian Murray (brian-murray) wrote :

I've just a couple of minor in-line comments, otherwise this looks good to me.

Revision history for this message
Balint Reczey (rbalint) :
Revision history for this message
Balint Reczey (rbalint) wrote :

Now the tests are also passing.

Revision history for this message
Julian Andres Klode (juliank) wrote :

lgtm

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'UpdateManager/backend/InstallBackendAptdaemon.py'
2--- UpdateManager/backend/InstallBackendAptdaemon.py 2018-09-27 14:15:39 +0000
3+++ UpdateManager/backend/InstallBackendAptdaemon.py 2018-10-03 22:47:51 +0000
4@@ -49,8 +49,13 @@
5 self.trans_failed_msg = None
6
7 def close(self):
8- if self.button_cancel:
9- self.button_cancel.clicked()
10+ if self.button_cancel and self.button_cancel.get_sensitive():
11+ try:
12+ self.button_cancel.clicked()
13+ except Exception:
14+ # there is not much left to do if the transaction can't be
15+ # canceled
16+ pass
17 return True
18 else:
19 return False
20
21=== modified file 'UpdateManager/backend/__init__.py'
22--- UpdateManager/backend/__init__.py 2018-10-01 15:56:40 +0000
23+++ UpdateManager/backend/__init__.py 2018-10-03 22:47:51 +0000
24@@ -95,6 +95,25 @@
25 self.window_main.start_available(is_cancelled_update)
26
27
28+# try aptdaemon
29+if os.path.exists("/usr/sbin/aptd") \
30+ and "UPDATE_MANAGER_FORCE_BACKEND_SYNAPTIC" not in os.environ:
31+ # check if the gtkwidgets are installed as well
32+ try:
33+ from .InstallBackendAptdaemon import InstallBackendAptdaemon
34+ except ImportError:
35+ import logging
36+ logging.exception("importing aptdaemon")
37+# try synaptic
38+if os.path.exists("/usr/sbin/synaptic") \
39+ and "UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON" not in os.environ:
40+ try:
41+ from .InstallBackendSynaptic import InstallBackendSynaptic
42+ except ImportError:
43+ import logging
44+ logging.exception("importing synaptic")
45+
46+
47 def get_backend(*args, **kwargs):
48 """Select and return a package manager backend."""
49 # try aptdaemon
50@@ -102,16 +121,17 @@
51 and "UPDATE_MANAGER_FORCE_BACKEND_SYNAPTIC" not in os.environ):
52 # check if the gtkwidgets are installed as well
53 try:
54- from .InstallBackendAptdaemon import InstallBackendAptdaemon
55 return InstallBackendAptdaemon(*args, **kwargs)
56- except ImportError:
57+ except NameError:
58 import logging
59- logging.exception("importing aptdaemon")
60+ logging.exception("using aptdaemon failed")
61 # try synaptic
62 if (os.path.exists("/usr/sbin/synaptic")
63 and "UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON" not in os.environ):
64- from .InstallBackendSynaptic import InstallBackendSynaptic
65- return InstallBackendSynaptic(*args, **kwargs)
66+ try:
67+ return InstallBackendSynaptic(*args, **kwargs)
68+ except NameError:
69+ pass
70 # nothing found, raise
71 raise Exception("No working backend found, please try installing "
72- "synaptic or aptdaemon")
73+ "aptdaemon or synaptic")
74
75=== modified file 'debian/changelog'
76--- debian/changelog 2018-10-01 16:04:16 +0000
77+++ debian/changelog 2018-10-03 22:47:51 +0000
78@@ -1,3 +1,14 @@
79+update-manager (1:18.10.10) cosmic; urgency=medium
80+
81+ * Stop lazy import of InstallBackends.
82+ Lazy imports made update-manager crash when an update-manager
83+ update changed the backend API and an updated incompatible backend
84+ was loaded to the not updated running update-manager process. (LP: #1795898)
85+ * Cancel transaction on exit only when Cancel button is active.
86+ Also ignore exception when cancellation fails. (LP: #1790670)
87+
88+ -- Balint Reczey <rbalint@ubuntu.com> Wed, 03 Oct 2018 22:46:36 +0200
89+
90 update-manager (1:18.10.9) cosmic; urgency=medium
91
92 * Allow unselecting updates and performing only removals (LP: #1792320)
93
94=== added file 'tests/test_backend_error.py'
95--- tests/test_backend_error.py 1970-01-01 00:00:00 +0000
96+++ tests/test_backend_error.py 2018-10-03 22:47:51 +0000
97@@ -0,0 +1,45 @@
98+#!/usr/bin/python3
99+# -*- Mode: Python; indent-tabs-mode: nil; tab-width: 4; coding: utf-8 -*-
100+
101+import logging
102+import mock
103+import sys
104+import unittest
105+from gettext import gettext as _
106+from mock import patch
107+
108+from UpdateManager.Dialogs import NoUpdatesDialog
109+from UpdateManager.UpdateManager import UpdateManager
110+from UpdateManager.UpdatesAvailable import UpdatesAvailable
111+
112+import os
113+CURDIR = os.path.dirname(os.path.abspath(__file__))
114+
115+
116+class TestBackendError(unittest.TestCase):
117+
118+ def setUp(self):
119+ os.environ['UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON'] = '1'
120+
121+ def clear_environ():
122+ del os.environ['UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON']
123+
124+ self.addCleanup(clear_environ)
125+
126+ @patch('UpdateManager.backend.InstallBackendAptdaemon.update')
127+ def test_backend_error(self, update):
128+ main = mock.MagicMock()
129+ main.datadir = os.path.join(CURDIR, '..', 'data')
130+
131+ from UpdateManager.backend import (InstallBackend, get_backend)
132+ update_backend = get_backend(main, InstallBackend.ACTION_UPDATE)
133+ update.side_effect = lambda: update_backend._action_done(
134+ InstallBackend.ACTION_UPDATE, True, False, "string", "desc")
135+ update_backend.start()
136+ main.start_error.assert_called_once_with(True, "string", "desc")
137+
138+
139+if __name__ == '__main__':
140+ if len(sys.argv) > 1 and sys.argv[1] == "-v":
141+ logging.basicConfig(level=logging.DEBUG)
142+ unittest.main()
143
144=== modified file 'tests/test_update_error.py'
145--- tests/test_update_error.py 2017-08-07 19:42:06 +0000
146+++ tests/test_update_error.py 2018-10-03 22:47:51 +0000
147@@ -44,29 +44,6 @@
148 _("Some software couldn’t be checked for updates."))
149
150
151-class TestBackendError(unittest.TestCase):
152-
153- def setUp(self):
154- os.environ['UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON'] = '1'
155-
156- def clear_environ():
157- del os.environ['UPDATE_MANAGER_FORCE_BACKEND_APTDAEMON']
158-
159- self.addCleanup(clear_environ)
160-
161- @patch('UpdateManager.backend.InstallBackendAptdaemon.'
162- 'InstallBackendAptdaemon.update')
163- def test_backend_error(self, update):
164- main = mock.MagicMock()
165- main.datadir = os.path.join(CURDIR, '..', 'data')
166-
167- update_backend = get_backend(main, InstallBackend.ACTION_UPDATE)
168- update.side_effect = lambda: update_backend._action_done(
169- InstallBackend.ACTION_UPDATE, True, False, "string", "desc")
170- update_backend.start()
171- main.start_error.assert_called_once_with(True, "string", "desc")
172-
173-
174 if __name__ == '__main__':
175 if len(sys.argv) > 1 and sys.argv[1] == "-v":
176 logging.basicConfig(level=logging.DEBUG)

Subscribers

People subscribed via source and target branches

to status/vote changes: