Merge lp:~rbalint/update-manager/fix-stale-pkg-refs into lp:update-manager
- fix-stale-pkg-refs
- Merge into main
Proposed by
Balint Reczey
Status: | Rejected |
---|---|
Rejected by: | Balint Reczey |
Proposed branch: | lp:~rbalint/update-manager/fix-stale-pkg-refs |
Merge into: | lp:update-manager |
Diff against target: |
336 lines (+76/-48) 4 files modified
UpdateManager/Core/UpdateList.py (+37/-21) UpdateManager/UpdatesAvailable.py (+17/-17) debian/changelog (+11/-0) tests/test_update_list.py (+11/-10) |
To merge this branch: | bzr merge lp:~rbalint/update-manager/fix-stale-pkg-refs |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Brian Murray | Approve | ||
Julian Andres Klode | Pending | ||
Ubuntu Core Development Team | Pending | ||
Review via email: mp+347195@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
Balint Reczey (rbalint) wrote : | # |
Revision history for this message
Balint Reczey (rbalint) wrote : | # |
I considered replacing pkg with a proxy object, but the code would have been more confusing imo.
Revision history for this message
Brian Murray (brian-murray) : | # |
review:
Approve
Revision history for this message
Julian Andres Klode (juliank) wrote : | # |
So, does this work reliably if a package disappears between stages? I'm not sure it can even haooen.
Revision history for this message
Balint Reczey (rbalint) wrote : | # |
It crashes with exception when a package is going away like before but this is very rare and is not a regression. We can fix that later.
Revision history for this message
Balint Reczey (rbalint) wrote : | # |
Julian provided and alternative fix that updates referenced pkg objects upon cache.open() which is fairly fast and would fix the issue in a different way.
Unmerged revisions
- 2824. By Balint Reczey
-
Update changelog
- 2823. By Balint Reczey
-
Store package name and cache reference in UpdateItem to avoid invalid package references
LP: #1773316
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'UpdateManager/Core/UpdateList.py' | |||
2 | --- UpdateManager/Core/UpdateList.py 2018-03-21 17:41:10 +0000 | |||
3 | +++ UpdateManager/Core/UpdateList.py 2018-05-31 12:03:14 +0000 | |||
4 | @@ -43,29 +43,42 @@ | |||
5 | 43 | 43 | ||
6 | 44 | 44 | ||
7 | 45 | class UpdateItem(): | 45 | class UpdateItem(): |
9 | 46 | def __init__(self, pkg, name, icon, to_remove): | 46 | def __init__(self, pkg, cache, name, icon, to_remove): |
10 | 47 | self.icon = icon | 47 | self.icon = icon |
11 | 48 | self.name = name | 48 | self.name = name |
13 | 49 | self.pkg = pkg | 49 | self.cache = cache |
14 | 50 | if pkg is not None: | ||
15 | 51 | self.pkg_name = pkg.name | ||
16 | 52 | else: | ||
17 | 53 | self.pkg_name = None | ||
18 | 50 | self.to_remove = to_remove | 54 | self.to_remove = to_remove |
19 | 51 | 55 | ||
20 | 52 | def is_selected(self): | 56 | def is_selected(self): |
21 | 53 | if not self.to_remove: | 57 | if not self.to_remove: |
23 | 54 | return self.pkg.marked_install or self.pkg.marked_upgrade | 58 | return (self.get_pkg().marked_install or |
24 | 59 | self.get_pkg().marked_upgrade) | ||
25 | 55 | else: | 60 | else: |
27 | 56 | return self.pkg.marked_delete | 61 | return self.get_pkg().marked_delete |
28 | 62 | |||
29 | 63 | def get_pkg(self): | ||
30 | 64 | if self.cache is None: | ||
31 | 65 | return None | ||
32 | 66 | try: | ||
33 | 67 | return self.cache[self.pkg_name] | ||
34 | 68 | except KeyError: | ||
35 | 69 | return None | ||
36 | 57 | 70 | ||
37 | 58 | 71 | ||
38 | 59 | class UpdateGroup(UpdateItem): | 72 | class UpdateGroup(UpdateItem): |
39 | 60 | _depcache = {} | 73 | _depcache = {} |
40 | 61 | 74 | ||
43 | 62 | def __init__(self, pkg, name, icon, to_remove): | 75 | def __init__(self, pkg, cache, name, icon, to_remove): |
44 | 63 | UpdateItem.__init__(self, pkg, name, icon, to_remove) | 76 | UpdateItem.__init__(self, pkg, cache, name, icon, to_remove) |
45 | 64 | self._items = set() | 77 | self._items = set() |
46 | 65 | self._deps = set() | 78 | self._deps = set() |
47 | 66 | self.core_item = None | 79 | self.core_item = None |
48 | 67 | if pkg is not None: | 80 | if pkg is not None: |
50 | 68 | self.core_item = UpdateItem(pkg, name, icon, to_remove) | 81 | self.core_item = UpdateItem(pkg, cache, name, icon, to_remove) |
51 | 69 | self._items.add(self.core_item) | 82 | self._items.add(self.core_item) |
52 | 70 | 83 | ||
53 | 71 | @property | 84 | @property |
54 | @@ -77,7 +90,7 @@ | |||
55 | 77 | def add(self, pkg, cache=None, eventloop_callback=None, to_remove=False): | 90 | def add(self, pkg, cache=None, eventloop_callback=None, to_remove=False): |
56 | 78 | name = utils.get_package_label(pkg) | 91 | name = utils.get_package_label(pkg) |
57 | 79 | icon = Gio.ThemedIcon.new("package") | 92 | icon = Gio.ThemedIcon.new("package") |
59 | 80 | self._items.add(UpdateItem(pkg, name, icon, to_remove)) | 93 | self._items.add(UpdateItem(pkg, cache, name, icon, to_remove)) |
60 | 81 | # If the pkg is in self._deps, stop here. We have already calculated | 94 | # If the pkg is in self._deps, stop here. We have already calculated |
61 | 82 | # the recursive dependencies for this package, no need to do it again. | 95 | # the recursive dependencies for this package, no need to do it again. |
62 | 83 | if cache and pkg.name in cache and pkg.name not in self._deps: | 96 | if cache and pkg.name in cache and pkg.name not in self._deps: |
63 | @@ -93,8 +106,8 @@ | |||
64 | 93 | 106 | ||
65 | 94 | def _init_deps(self, cache, eventloop_callback): | 107 | def _init_deps(self, cache, eventloop_callback): |
66 | 95 | for item in self._items: | 108 | for item in self._items: |
69 | 96 | if item.pkg and item.pkg.name not in self._deps: | 109 | if item.pkg_name is not None and item.pkg_name not in self._deps: |
70 | 97 | self._add_deps(item.pkg, cache, eventloop_callback) | 110 | self._add_deps(item.get_pkg(), cache, eventloop_callback) |
71 | 98 | 111 | ||
72 | 99 | def _add_deps(self, pkg, cache, eventloop_callback): | 112 | def _add_deps(self, pkg, cache, eventloop_callback): |
73 | 100 | """Adds pkg and dependencies of pkg to the dependency list.""" | 113 | """Adds pkg and dependencies of pkg to the dependency list.""" |
74 | @@ -148,23 +161,24 @@ | |||
75 | 148 | return 0 | 161 | return 0 |
76 | 149 | size = 0 | 162 | size = 0 |
77 | 150 | for item in self.items: | 163 | for item in self.items: |
79 | 151 | size += getattr(item.pkg.candidate, "size", 0) | 164 | size += getattr(item.get_pkg().candidate, "size", 0) |
80 | 152 | return size | 165 | return size |
81 | 153 | 166 | ||
82 | 154 | 167 | ||
83 | 155 | class UpdateApplicationGroup(UpdateGroup): | 168 | class UpdateApplicationGroup(UpdateGroup): |
85 | 156 | def __init__(self, pkg, application, to_remove): | 169 | def __init__(self, pkg, cache, application, to_remove): |
86 | 157 | name = application.get_display_name() | 170 | name = application.get_display_name() |
87 | 158 | icon = application.get_icon() | 171 | icon = application.get_icon() |
89 | 159 | super(UpdateApplicationGroup, self).__init__(pkg, name, icon, | 172 | super(UpdateApplicationGroup, self).__init__(pkg, cache, name, icon, |
90 | 160 | to_remove) | 173 | to_remove) |
91 | 161 | 174 | ||
92 | 162 | 175 | ||
93 | 163 | class UpdatePackageGroup(UpdateGroup): | 176 | class UpdatePackageGroup(UpdateGroup): |
95 | 164 | def __init__(self, pkg, to_remove): | 177 | def __init__(self, pkg, cache, to_remove): |
96 | 165 | name = utils.get_package_label(pkg) | 178 | name = utils.get_package_label(pkg) |
97 | 166 | icon = Gio.ThemedIcon.new("package") | 179 | icon = Gio.ThemedIcon.new("package") |
99 | 167 | super(UpdatePackageGroup, self).__init__(pkg, name, icon, to_remove) | 180 | super(UpdatePackageGroup, self).__init__(pkg, cache, name, icon, |
100 | 181 | to_remove) | ||
101 | 168 | 182 | ||
102 | 169 | 183 | ||
103 | 170 | class UpdateSystemGroup(UpdateGroup): | 184 | class UpdateSystemGroup(UpdateGroup): |
104 | @@ -173,7 +187,8 @@ | |||
105 | 173 | # the core components and packages. | 187 | # the core components and packages. |
106 | 174 | name = _("%s base") % utils.get_ubuntu_flavor_name(cache=cache) | 188 | name = _("%s base") % utils.get_ubuntu_flavor_name(cache=cache) |
107 | 175 | icon = Gio.ThemedIcon.new("distributor-logo") | 189 | icon = Gio.ThemedIcon.new("distributor-logo") |
109 | 176 | super(UpdateSystemGroup, self).__init__(None, name, icon, to_remove) | 190 | super(UpdateSystemGroup, self).__init__(None, None, name, icon, |
110 | 191 | to_remove) | ||
111 | 177 | 192 | ||
112 | 178 | 193 | ||
113 | 179 | class UpdateOrigin(): | 194 | class UpdateOrigin(): |
114 | @@ -429,7 +444,7 @@ | |||
115 | 429 | for pkg in pkgs: | 444 | for pkg in pkgs: |
116 | 430 | app = self._get_application_for_package(pkg) | 445 | app = self._get_application_for_package(pkg) |
117 | 431 | if app is not None: | 446 | if app is not None: |
119 | 432 | app_group = UpdateApplicationGroup(pkg, app, to_remove) | 447 | app_group = UpdateApplicationGroup(pkg, cache, app, to_remove) |
120 | 433 | app_groups.append(app_group) | 448 | app_groups.append(app_group) |
121 | 434 | else: | 449 | else: |
122 | 435 | ungrouped_pkgs.append(pkg) | 450 | ungrouped_pkgs.append(pkg) |
123 | @@ -450,20 +465,21 @@ | |||
124 | 450 | if ungrouped_pkgs: | 465 | if ungrouped_pkgs: |
125 | 451 | # Separate out system base packages. If we have already found an | 466 | # Separate out system base packages. If we have already found an |
126 | 452 | # application for all updates, don't bother. | 467 | # application for all updates, don't bother. |
128 | 453 | meta_group = UpdateGroup(None, None, None, to_remove) | 468 | meta_group = UpdateGroup(None, None, None, None, to_remove) |
129 | 454 | flavor_package = utils.get_ubuntu_flavor_package(cache=cache) | 469 | flavor_package = utils.get_ubuntu_flavor_package(cache=cache) |
130 | 455 | meta_pkgs = [flavor_package, "ubuntu-standard", "ubuntu-minimal"] | 470 | meta_pkgs = [flavor_package, "ubuntu-standard", "ubuntu-minimal"] |
131 | 456 | meta_pkgs.extend(self._get_linux_packages()) | 471 | meta_pkgs.extend(self._get_linux_packages()) |
132 | 457 | for pkg in meta_pkgs: | 472 | for pkg in meta_pkgs: |
133 | 458 | if pkg in cache: | 473 | if pkg in cache: |
135 | 459 | meta_group.add(cache[pkg]) | 474 | meta_group.add(cache[pkg], cache) |
136 | 460 | for pkg in ungrouped_pkgs: | 475 | for pkg in ungrouped_pkgs: |
137 | 461 | if meta_group.is_dependency(pkg, cache, eventloop_callback): | 476 | if meta_group.is_dependency(pkg, cache, eventloop_callback): |
138 | 462 | if system_group is None: | 477 | if system_group is None: |
139 | 463 | system_group = UpdateSystemGroup(cache, to_remove) | 478 | system_group = UpdateSystemGroup(cache, to_remove) |
141 | 464 | system_group.add(pkg) | 479 | system_group.add(pkg, cache) |
142 | 465 | else: | 480 | else: |
144 | 466 | pkg_groups.append(UpdatePackageGroup(pkg, to_remove)) | 481 | pkg_groups.append(UpdatePackageGroup(pkg, cache, |
145 | 482 | to_remove)) | ||
146 | 467 | 483 | ||
147 | 468 | app_groups.sort(key=lambda a: a.name.lower()) | 484 | app_groups.sort(key=lambda a: a.name.lower()) |
148 | 469 | pkg_groups.sort(key=lambda a: a.name.lower()) | 485 | pkg_groups.sort(key=lambda a: a.name.lower()) |
149 | 470 | 486 | ||
150 | === modified file 'UpdateManager/UpdatesAvailable.py' | |||
151 | --- UpdateManager/UpdatesAvailable.py 2018-03-18 21:43:58 +0000 | |||
152 | +++ UpdateManager/UpdatesAvailable.py 2018-05-31 12:03:14 +0000 | |||
153 | @@ -407,14 +407,13 @@ | |||
154 | 407 | path = model.get_path(iter) | 407 | path = model.get_path(iter) |
155 | 408 | 408 | ||
156 | 409 | requires_restart = False | 409 | requires_restart = False |
159 | 410 | if data.item and data.item.pkg: | 410 | if data.item: |
160 | 411 | requires_restart = self.pkg_requires_restart(data.item.pkg) | 411 | requires_restart = self.pkg_requires_restart(data.item.get_pkg()) |
161 | 412 | elif data.group: | 412 | elif data.group: |
162 | 413 | if not self.treeview_update.row_expanded(path): | 413 | if not self.treeview_update.row_expanded(path): |
163 | 414 | # A package in the group requires restart | 414 | # A package in the group requires restart |
164 | 415 | for group_item in data.group.items: | 415 | for group_item in data.group.items: |
167 | 416 | if group_item.pkg and self.pkg_requires_restart( | 416 | if self.pkg_requires_restart(group_item.get_pkg()): |
166 | 417 | group_item.pkg): | ||
168 | 418 | requires_restart = True | 417 | requires_restart = True |
169 | 419 | break | 418 | break |
170 | 420 | 419 | ||
171 | @@ -431,7 +430,7 @@ | |||
172 | 431 | activatable = False | 430 | activatable = False |
173 | 432 | inconsistent = False | 431 | inconsistent = False |
174 | 433 | if data.item: | 432 | if data.item: |
176 | 434 | activatable = data.item.pkg.name not in self.list.held_back | 433 | activatable = data.item.pkg_name not in self.list.held_back |
177 | 435 | inconsistent = False | 434 | inconsistent = False |
178 | 436 | elif data.group: | 435 | elif data.group: |
179 | 437 | activatable = True | 436 | activatable = True |
180 | @@ -534,16 +533,16 @@ | |||
181 | 534 | if (item is None and data.group is not None and | 533 | if (item is None and data.group is not None and |
182 | 535 | data.group.core_item is not None): | 534 | data.group.core_item is not None): |
183 | 536 | item = data.group.core_item | 535 | item = data.group.core_item |
187 | 537 | if (item is None or item.pkg is None or | 536 | pkg = None if item is None else item.get_pkg() |
188 | 538 | item.pkg.candidate is None or | 537 | if pkg is None or pkg.candidate is None or \ |
189 | 539 | item.pkg.candidate.description is None): | 538 | pkg.candidate.description is None: |
190 | 540 | changes_buffer = self.textview_changes.get_buffer() | 539 | changes_buffer = self.textview_changes.get_buffer() |
191 | 541 | changes_buffer.set_text("") | 540 | changes_buffer.set_text("") |
192 | 542 | desc_buffer = self.textview_descr.get_buffer() | 541 | desc_buffer = self.textview_descr.get_buffer() |
193 | 543 | desc_buffer.set_text("") | 542 | desc_buffer.set_text("") |
194 | 544 | self.notebook_details.set_sensitive(False) | 543 | self.notebook_details.set_sensitive(False) |
195 | 545 | return | 544 | return |
197 | 546 | long_desc = item.pkg.candidate.description | 545 | long_desc = pkg.candidate.description |
198 | 547 | self.notebook_details.set_sensitive(True) | 546 | self.notebook_details.set_sensitive(True) |
199 | 548 | # do some regular expression magic on the description | 547 | # do some regular expression magic on the description |
200 | 549 | # Add a newline before each bullet | 548 | # Add a newline before each bullet |
201 | @@ -560,7 +559,7 @@ | |||
202 | 560 | desc_buffer.set_text(long_desc) | 559 | desc_buffer.set_text(long_desc) |
203 | 561 | 560 | ||
204 | 562 | # now do the changelog | 561 | # now do the changelog |
206 | 563 | name = item.pkg.name | 562 | name = item.pkg_name |
207 | 564 | if name is None: | 563 | if name is None: |
208 | 565 | return | 564 | return |
209 | 566 | 565 | ||
210 | @@ -713,9 +712,9 @@ | |||
211 | 713 | return | 712 | return |
212 | 714 | pkg = None | 713 | pkg = None |
213 | 715 | if data.item: | 714 | if data.item: |
215 | 716 | pkg = data.item.pkg | 715 | pkg = data.item.get_pkg() |
216 | 717 | elif data.group and data.group.core_item: | 716 | elif data.group and data.group.core_item: |
218 | 718 | pkg = data.group.core_item.pkg | 717 | pkg = data.group.core_item.get_pkg() |
219 | 719 | if pkg and self.pkg_requires_restart(pkg): | 718 | if pkg and self.pkg_requires_restart(pkg): |
220 | 720 | nonlocal requires_restart | 719 | nonlocal requires_restart |
221 | 721 | requires_restart = True | 720 | requires_restart = True |
222 | @@ -953,12 +952,12 @@ | |||
223 | 953 | for item in items: | 952 | for item in items: |
224 | 954 | try: | 953 | try: |
225 | 955 | if keep_packages: | 954 | if keep_packages: |
228 | 956 | item.pkg.mark_keep() | 955 | item.get_pkg().mark_keep() |
229 | 957 | elif item.pkg.name not in self.list.held_back: | 956 | elif item.pkg_name not in self.list.held_back: |
230 | 958 | if not item.to_remove: | 957 | if not item.to_remove: |
232 | 959 | item.pkg.mark_install() | 958 | item.get_pkg().mark_install() |
233 | 960 | else: | 959 | else: |
235 | 961 | item.pkg.mark_delete() | 960 | item.get_pkg().mark_delete() |
236 | 962 | except SystemError: | 961 | except SystemError: |
237 | 963 | pass | 962 | pass |
238 | 964 | 963 | ||
239 | @@ -1030,7 +1029,8 @@ | |||
240 | 1030 | item_row = [ | 1029 | item_row = [ |
241 | 1031 | item.name, | 1030 | item.name, |
242 | 1032 | UpdateData(None, None, item), | 1031 | UpdateData(None, None, item), |
244 | 1033 | humanize_size(getattr(item.pkg.candidate, "size", 0)), | 1032 | humanize_size(getattr(item.get_pkg().candidate, |
245 | 1033 | "size", 0)), | ||
246 | 1034 | True | 1034 | True |
247 | 1035 | ] | 1035 | ] |
248 | 1036 | self.store.append(group_iter, item_row) | 1036 | self.store.append(group_iter, item_row) |
249 | 1037 | 1037 | ||
250 | === modified file 'debian/changelog' | |||
251 | --- debian/changelog 2018-05-28 14:07:41 +0000 | |||
252 | +++ debian/changelog 2018-05-31 12:03:14 +0000 | |||
253 | @@ -1,3 +1,14 @@ | |||
254 | 1 | update-manager (1:18.10.2) UNRELEASED; urgency=medium | ||
255 | 2 | |||
256 | 3 | [ Steve Langasek ] | ||
257 | 4 | * Fix code comment to document the actual proxy behavior, which is correct. | ||
258 | 5 | |||
259 | 6 | [ Balint Reczey ] | ||
260 | 7 | * Store package name and cache reference in UpdateItem to avoid stale | ||
261 | 8 | package references (LP: #1773316) | ||
262 | 9 | |||
263 | 10 | -- Balint Reczey <rbalint@ubuntu.com> Thu, 31 May 2018 13:59:25 +0200 | ||
264 | 11 | |||
265 | 1 | update-manager (1:18.10.1) cosmic; urgency=medium | 12 | update-manager (1:18.10.1) cosmic; urgency=medium |
266 | 2 | 13 | ||
267 | 3 | * Block style context changed signal while enforcing the main window's | 14 | * Block style context changed signal while enforcing the main window's |
268 | 4 | 15 | ||
269 | === modified file 'tests/test_update_list.py' | |||
270 | --- tests/test_update_list.py 2017-08-07 19:42:06 +0000 | |||
271 | +++ tests/test_update_list.py 2018-05-31 12:03:14 +0000 | |||
272 | @@ -59,7 +59,8 @@ | |||
273 | 59 | ignored_srcs = set([pkg.candidate.source_name for pkg in | 59 | ignored_srcs = set([pkg.candidate.source_name for pkg in |
274 | 60 | self.updates_list.ignored_phased_updates]) | 60 | self.updates_list.ignored_phased_updates]) |
275 | 61 | group = self.updates_list.update_groups[0] | 61 | group = self.updates_list.update_groups[0] |
277 | 62 | install_srcs = set([x.pkg.candidate.source_name for x in group.items]) | 62 | install_srcs = set( |
278 | 63 | [x.get_pkg().candidate.source_name for x in group.items]) | ||
279 | 63 | self.assertEqual(ignored_srcs, set({'zsh'})) | 64 | self.assertEqual(ignored_srcs, set({'zsh'})) |
280 | 64 | self.assertEqual(install_srcs, set({'apt'})) | 65 | self.assertEqual(install_srcs, set({'apt'})) |
281 | 65 | self.assertTrue(len(ignored_srcs & install_srcs) == 0) | 66 | self.assertTrue(len(ignored_srcs & install_srcs) == 0) |
282 | @@ -142,8 +143,8 @@ | |||
283 | 142 | group = self.updates_list.update_groups[0] | 143 | group = self.updates_list.update_groups[0] |
284 | 143 | self.assertIsInstance(group, UpdateList.UpdateApplicationGroup) | 144 | self.assertIsInstance(group, UpdateList.UpdateApplicationGroup) |
285 | 144 | self.assertIsNotNone(group.core_item) | 145 | self.assertIsNotNone(group.core_item) |
288 | 145 | self.assertEqual(group.core_item.pkg.name, 'installed-app') | 146 | self.assertEqual(group.core_item.pkg_name, 'installed-app') |
289 | 146 | self.assertListEqual([x.pkg.name for x in group.items], | 147 | self.assertListEqual([x.pkg_name for x in group.items], |
290 | 147 | ['installed-app']) | 148 | ['installed-app']) |
291 | 148 | 149 | ||
292 | 149 | def test_app_with_subitems(self): | 150 | def test_app_with_subitems(self): |
293 | @@ -151,9 +152,9 @@ | |||
294 | 151 | group = self.updates_list.update_groups[1] | 152 | group = self.updates_list.update_groups[1] |
295 | 152 | self.assertIsInstance(group, UpdateList.UpdateApplicationGroup) | 153 | self.assertIsInstance(group, UpdateList.UpdateApplicationGroup) |
296 | 153 | self.assertIsNotNone(group.core_item) | 154 | self.assertIsNotNone(group.core_item) |
298 | 154 | self.assertEqual(group.core_item.pkg.name, | 155 | self.assertEqual(group.core_item.pkg_name, |
299 | 155 | 'installed-app-with-subitems') | 156 | 'installed-app-with-subitems') |
301 | 156 | self.assertListEqual([x.pkg.name for x in group.items], | 157 | self.assertListEqual([x.pkg_name for x in group.items], |
302 | 157 | ['installed-app-with-subitems', | 158 | ['installed-app-with-subitems', |
303 | 158 | 'installed-pkg-single-dep']) | 159 | 'installed-pkg-single-dep']) |
304 | 159 | 160 | ||
305 | @@ -162,8 +163,8 @@ | |||
306 | 162 | group = self.updates_list.update_groups[2] | 163 | group = self.updates_list.update_groups[2] |
307 | 163 | self.assertIsInstance(group, UpdateList.UpdatePackageGroup) | 164 | self.assertIsInstance(group, UpdateList.UpdatePackageGroup) |
308 | 164 | self.assertIsNotNone(group.core_item) | 165 | self.assertIsNotNone(group.core_item) |
311 | 165 | self.assertEqual(group.core_item.pkg.name, 'installed-pkg') | 166 | self.assertEqual(group.core_item.pkg_name, 'installed-pkg') |
312 | 166 | self.assertListEqual([x.pkg.name for x in group.items], | 167 | self.assertListEqual([x.pkg_name for x in group.items], |
313 | 167 | ['installed-pkg']) | 168 | ['installed-pkg']) |
314 | 168 | 169 | ||
315 | 169 | def test_pkg_multiple_deps(self): | 170 | def test_pkg_multiple_deps(self): |
316 | @@ -171,9 +172,9 @@ | |||
317 | 171 | group = self.updates_list.update_groups[3] | 172 | group = self.updates_list.update_groups[3] |
318 | 172 | self.assertIsInstance(group, UpdateList.UpdatePackageGroup) | 173 | self.assertIsInstance(group, UpdateList.UpdatePackageGroup) |
319 | 173 | self.assertIsNotNone(group.core_item) | 174 | self.assertIsNotNone(group.core_item) |
321 | 174 | self.assertEqual(group.core_item.pkg.name, | 175 | self.assertEqual(group.core_item.pkg_name, |
322 | 175 | 'installed-pkg-multiple-deps') | 176 | 'installed-pkg-multiple-deps') |
324 | 176 | self.assertListEqual([x.pkg.name for x in group.items], | 177 | self.assertListEqual([x.pkg_name for x in group.items], |
325 | 177 | ['installed-pkg-multiple-deps']) | 178 | ['installed-pkg-multiple-deps']) |
326 | 178 | 179 | ||
327 | 179 | def test_security(self): | 180 | def test_security(self): |
328 | @@ -181,7 +182,7 @@ | |||
329 | 181 | group = self.updates_list.security_groups[0] | 182 | group = self.updates_list.security_groups[0] |
330 | 182 | self.assertIsInstance(group, UpdateList.UpdateSystemGroup) | 183 | self.assertIsInstance(group, UpdateList.UpdateSystemGroup) |
331 | 183 | self.assertIsNone(group.core_item) | 184 | self.assertIsNone(group.core_item) |
333 | 184 | self.assertListEqual([x.pkg.name for x in group.items], ['base-pkg']) | 185 | self.assertListEqual([x.pkg_name for x in group.items], ['base-pkg']) |
334 | 185 | 186 | ||
335 | 186 | 187 | ||
336 | 187 | if __name__ == "__main__": | 188 | if __name__ == "__main__": |
I'm also checking rdeps if they need update to adapt to this change.