From 364824db3968686197ee2140a10faa4663edd0cc Mon Sep 17 00:00:00 2001 From: bitcoffee <854182924@qq.com> Date: Thu, 18 Mar 2021 21:47:47 +0800 Subject: [PATCH] reset the state of the custom partitioning spoke (cherry picked from commit a524fe750598a9fe005fe547a190fd14f47be09b) --- anaconda.spec | 11 +- ...ate-of-the-custom-partitioning-spoke.patch | 134 ++++++++++++++++++ ...ctions-with-the-right-selector-18516.patch | 59 ++++++++ 3 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 bugfix-Reset-the-state-of-the-custom-partitioning-spoke.patch create mode 100644 bugfix-Schedule-timed-actions-with-the-right-selector-18516.patch diff --git a/anaconda.spec b/anaconda.spec index 8c6fad0..af8e7bd 100644 --- a/anaconda.spec +++ b/anaconda.spec @@ -1,7 +1,7 @@ %define _empty_manifest_terminate_build 0 Name: anaconda Version: 33.19 -Release: 17 +Release: 18 Summary: Graphical system installer License: GPLv2+ and MIT URL: http://fedoraproject.org/wiki/Anaconda @@ -56,6 +56,9 @@ Patch6019: ntp-servers-improve-010-Add-support-for-the-timesource-kickstart-c Patch9024: Change-length-limit-of-hostname-from-255-to-64.patch +Patch6020: bugfix-Schedule-timed-actions-with-the-right-selector-18516.patch +Patch6021: bugfix-Reset-the-state-of-the-custom-partitioning-spoke.patch + %define dbusver 1.2.3 %define dnfver 3.6.0 %define dracutver 034-7 @@ -268,6 +271,12 @@ update-desktop-database &> /dev/null || : %{_datadir}/gtk-doc %changelog +* Thu Mar 18 2021 liuxin - 33.19-18 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC:reset the state of the custom partitioning spoke + * Mon Jan 25 2021 liuxin - 33.19-17 - Type:bugfix - ID:NA diff --git a/bugfix-Reset-the-state-of-the-custom-partitioning-spoke.patch b/bugfix-Reset-the-state-of-the-custom-partitioning-spoke.patch new file mode 100644 index 0000000..f79a45d --- /dev/null +++ b/bugfix-Reset-the-state-of-the-custom-partitioning-spoke.patch @@ -0,0 +1,134 @@ +From 8032e0a9eae5093e1246af4d3906ad65d5aade12 Mon Sep 17 00:00:00 2001 +From: Vendula Poncova +Date: Wed, 12 Aug 2020 12:38:27 +0200 +Subject: [PATCH] Reset the state of the custom partitioning spoke + +We should reset the state of the custom partitioning spoke after every user +interaction. If we don't reset the _back_already_clicked attribute, the final +check of the storage configuration might be skipped and the status of the +storage spoke might show an error from the previously failed check. + +(cherry picked from commit 0aa3abfb6fb137746a393588ff9315807a65f7b9) +--- + pyanaconda/ui/gui/spokes/custom_storage.py | 28 +++++++++++----------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +diff --git a/pyanaconda/ui/gui/spokes/custom_storage.py b/pyanaconda/ui/gui/spokes/custom_storage.py +index a5e568f..6c9f6f6 100644 +--- a/pyanaconda/ui/gui/spokes/custom_storage.py ++++ b/pyanaconda/ui/gui/spokes/custom_storage.py +@@ -280,7 +280,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + self._storage_module.ResetPartitioning() + + def refresh(self): +- self.clear_errors() ++ self.reset_state() + NormalSpoke.refresh(self) + + # Make sure the storage spoke execute method has finished before we +@@ -294,8 +294,6 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + self._partitioning = create_partitioning(PARTITIONING_METHOD_INTERACTIVE) + self._device_tree = STORAGE.get_proxy(self._partitioning.GetDeviceTree()) + +- self._back_already_clicked = False +- + # Get the name of the new installation. + self._os_name = self._device_tree.GenerateSystemName() + +@@ -554,8 +552,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + # just-removed device + return + +- self.clear_errors() +- self._back_already_clicked = False ++ self.reset_state() + + log.debug("Saving the right side for device: %s", device_name) + +@@ -979,7 +976,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + + def on_add_clicked(self, button): + # Clear any existing errors +- self.clear_errors() ++ self.reset_state() + + # Save anything from the currently displayed mount point. + self._save_right_side(self._accordion.current_selector) +@@ -996,8 +993,6 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + dialog.window.destroy() + return + +- self._back_already_clicked = False +- + # Gather data about the added mount point. + request = DeviceFactoryRequest() + request.mount_point = dialog.mount_point +@@ -1006,7 +1001,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + request.disks = self._selected_disks + + # Clear errors and try to add the mountpoint/device. +- self.clear_errors() ++ self.reset_state() + + try: + self._device_tree.AddDevice( +@@ -1065,7 +1060,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + return + + # Remove selected items. +- self.clear_errors() ++ self.reset_state() + + try: + self._remove_selected_devices() +@@ -1187,7 +1182,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + # disk set management happens through container edit on RHS + return + +- self.clear_errors() ++ self.reset_state() + + dialog = DisksDialog( + self.data, +@@ -1448,7 +1443,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + + Note: There are never any non-existent devices around when this runs. + """ +- self.clear_errors() ++ self.reset_state() + + # Create the partitioning request. + request = PartitioningRequest() +@@ -1762,6 +1757,10 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + self._error = None + self.clear_info() + ++ def reset_state(self): ++ self.clear_errors() ++ self._back_already_clicked = False ++ + # This callback is for the button that just resets the UI to anaconda's + # current understanding of the disk layout. + def on_reset_clicked(self, *args): +@@ -1846,7 +1845,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + return + + # Clear any existing errors +- self.clear_errors() ++ self.reset_state() + + # Save anything from the currently displayed mount point. + self._save_right_side(selector) +@@ -1861,7 +1860,8 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + if not selector: + return + +- self.clear_errors() ++ self.reset_state() ++ + device_name = selector.device_name + passphrase = self._passphraseEntry.get_text() + +-- +2.23.0 + diff --git a/bugfix-Schedule-timed-actions-with-the-right-selector-18516.patch b/bugfix-Schedule-timed-actions-with-the-right-selector-18516.patch new file mode 100644 index 0000000..09d1c06 --- /dev/null +++ b/bugfix-Schedule-timed-actions-with-the-right-selector-18516.patch @@ -0,0 +1,59 @@ +From 65b176260404087f625132697c1e299db0b0163e Mon Sep 17 00:00:00 2001 +From: Vendula Poncova +Date: Wed, 8 Jul 2020 19:07:54 +0200 +Subject: [PATCH] Schedule timed actions with the right selector (#1851647) + +The timed actions of the Custom Partitioning spoke should be scheduled with +the specified selector. Otherwise, the action will use the current selector +that might be different. + +Resolves: rhbz#1851647 +--- + pyanaconda/ui/gui/spokes/custom_storage.py | 20 ++++++++++++++++---- + 1 file changed, 16 insertions(+), 4 deletions(-) + +diff --git a/pyanaconda/ui/gui/spokes/custom_storage.py b/pyanaconda/ui/gui/spokes/custom_storage.py +index b89866c..a5e568f 100644 +--- a/pyanaconda/ui/gui/spokes/custom_storage.py ++++ b/pyanaconda/ui/gui/spokes/custom_storage.py +@@ -1836,21 +1836,33 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler): + dlg.run() + dlg.destroy() + +- @timed_action(delay=50, threshold=100) + def on_update_settings_clicked(self, button): ++ self._update_settings(self._accordion.current_selector) ++ ++ @timed_action(delay=50, threshold=100) ++ def _update_settings(self, selector): + """ call _save_right_side, then, perhaps, populate_right_side. """ ++ if not selector: ++ return ++ + # Clear any existing errors + self.clear_errors() + + # Save anything from the currently displayed mount point. +- self._save_right_side(self._accordion.current_selector) ++ self._save_right_side(selector) + self._applyButton.set_sensitive(False) + +- @timed_action(delay=50, threshold=100) + def on_unlock_clicked(self, *args): ++ self._unlock_device(self._accordion.current_selector) ++ ++ @timed_action(delay=50, threshold=100) ++ def _unlock_device(self, selector): + """ try to open the luks device, populate, then call _do_refresh. """ ++ if not selector: ++ return ++ + self.clear_errors() +- device_name = self._accordion.current_selector.device_name ++ device_name = selector.device_name + passphrase = self._passphraseEntry.get_text() + + log.info("Trying to unlock device %s.", device_name) +-- +2.23.0 +