[master/rhel7-branch] Re-apply disk selection on error in TUi storage. (#1056316)

Samantha N. Bueno sbueno+anaconda at redhat.com
Wed Feb 19 20:36:00 UTC 2014


On Wed, Feb 19, 2014 at 02:21:16PM -0500, Chris Lumens wrote:
> > diff --git a/pyanaconda/ui/lib/disks.py b/pyanaconda/ui/lib/disks.py
> > index 486208b..ddfc6ea 100644
> > --- a/pyanaconda/ui/lib/disks.py
> > +++ b/pyanaconda/ui/lib/disks.py
> > @@ -82,3 +82,12 @@ def size_str(mb):
> >          spec = "%f mb" % mb
> >  
> >      return str(Size(spec=spec)).upper()
> > +
> > +def applyDiskSelection(use_names):
> > +    onlyuse = use_names[:]
> > +    for disk in (d for d in self.storage.disks if d.name in onlyuse):
> > +        onlyuse.extend(d.name for d in disk.ancestors
> > +                       if d.name not in onlyuse)
> > +
> > +    self.data.ignoredisk.onlyuse = onlyuse
> > +    self.data.clearpart.drives = use_names[:]
> 
> You're going to need to pass storage and data into this function -
> there's no self to get them through.

God, that was dumb. That's what I get for just blindly copy-pasting. New
patch below.

----

 pyanaconda/ui/gui/spokes/storage.py | 19 +++++--------------
 pyanaconda/ui/lib/disks.py          |  9 +++++++++
 pyanaconda/ui/tui/spokes/storage.py |  4 +++-
 3 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py
index bdd48ef..6f719db 100644
--- a/pyanaconda/ui/gui/spokes/storage.py
+++ b/pyanaconda/ui/gui/spokes/storage.py
@@ -43,7 +43,7 @@
 from gi.repository import Gdk, GLib, Gtk, AnacondaWidgets

 from pyanaconda.ui.communication import hubQ
-from pyanaconda.ui.lib.disks import getDisks, isLocalDisk, size_str
+from pyanaconda.ui.lib.disks import getDisks, isLocalDisk, size_str, applyDiskSelection
 from pyanaconda.ui.gui import GUIObject
 from pyanaconda.ui.gui.spokes import NormalSpoke
 from pyanaconda.ui.gui.spokes.lib.cart import SelectedDisksDialog
@@ -304,17 +304,8 @@ class StorageSpoke(NormalSpoke, StorageChecker):
         self._encrypted = self.builder.get_object("encryptionCheckbox")
         self._reclaim = self.builder.get_object("reclaimCheckbox")

-    def _applyDiskSelection(self, use_names):
-        onlyuse = use_names[:]
-        for disk in (d for d in self.storage.disks if d.name in onlyuse):
-            onlyuse.extend(d.name for d in disk.ancestors
-                           if d.name not in onlyuse)
-
-        self.data.ignoredisk.onlyuse = onlyuse
-        self.data.clearpart.drives = use_names[:]
-
     def apply(self):
-        self._applyDiskSelection(self.selected_disks)
+        applyDiskSelection(self.storage, self.data, self.selected_disks)
         self.data.autopart.autopart = self.autopart
         self.data.autopart.type = self.autoPartType
         self.data.autopart.encrypted = self.encrypted
@@ -371,7 +362,7 @@ class StorageSpoke(NormalSpoke, StorageChecker):
             self.storage.reset()
             self.disks = getDisks(self.storage.devicetree)
             # now set ksdata back to the user's specified config
-            self._applyDiskSelection(self.selected_disks)
+            applyDiskSelection(self.storage, self.data, self.selected_disks)
         except BootLoaderError as e:
             log.error("BootLoader setup failed: %s", e)
             StorageChecker.errors = str(e).split("\n")
@@ -632,7 +623,7 @@ class StorageSpoke(NormalSpoke, StorageChecker):

         # if there's only one disk, select it by default
         if len(self.disks) == 1 and not self.selected_disks:
-            self._applyDiskSelection([self.disks[0].name])
+            applyDiskSelection(self.storage, self.data, [self.disks[0].name])

         self._ready = True
         hubQ.send_ready(self.__class__.__name__, False)
@@ -899,7 +890,7 @@ class StorageSpoke(NormalSpoke, StorageChecker):

         # However, we do want to apply current selections so the disk cart off
         # the filter spoke will display the correct information.
-        self._applyDiskSelection(self.selected_disks)
+        applyDiskSelection(self.storage, self.data, self.selected_disks)

         self.skipTo = "FilterSpoke"
         NormalSpoke.on_back_clicked(self, button)
diff --git a/pyanaconda/ui/lib/disks.py b/pyanaconda/ui/lib/disks.py
index 486208b..bfc586b 100644
--- a/pyanaconda/ui/lib/disks.py
+++ b/pyanaconda/ui/lib/disks.py
@@ -82,3 +82,12 @@ def size_str(mb):
         spec = "%f mb" % mb

     return str(Size(spec=spec)).upper()
+
+def applyDiskSelection(storage, data, use_names):
+    onlyuse = use_names[:]
+    for disk in (d for d in storage.disks if d.name in onlyuse):
+        onlyuse.extend(d.name for d in disk.ancestors
+                       if d.name not in onlyuse)
+
+    data.ignoredisk.onlyuse = onlyuse
+    data.clearpart.drives = use_names[:]
diff --git a/pyanaconda/ui/tui/spokes/storage.py b/pyanaconda/ui/tui/spokes/storage.py
index b4d40f1..088684b 100644
--- a/pyanaconda/ui/tui/spokes/storage.py
+++ b/pyanaconda/ui/tui/spokes/storage.py
@@ -22,7 +22,7 @@
 # which has the same license and authored by David Lehman
 # <dlehman at redhat.com>
 #

-from pyanaconda.ui.lib.disks import getDisks, size_str
+from pyanaconda.ui.lib.disks import getDisks, size_str, applyDiskSelection
 from pyanaconda.ui.tui.spokes import NormalTUISpoke
 from pyanaconda.ui.tui.simpleline import TextWidget, CheckboxWidget

@@ -297,6 +297,8 @@ class StorageSpoke(NormalTUISpoke):
             self.storage.config.update(self.data)
             self.storage.autoPartType = self.data.clearpart.type
             self.storage.reset()
+            # now set ksdata back to the user's specified config
+            applyDiskSelection(self.storage, self.data, self.selected_disks)
             self._ready = True
         except BootLoaderError as e:
             log.error("BootLoader setup failed: %s", e)
-- 
1.8.3.1


More information about the anaconda-patches mailing list