FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Debian > Debian User

 
 
LinkBack Thread Tools
 
Old 05-02-2012, 07:10 PM
David Lehman
 
Default Move free space info gathering into Storage.

---
pyanaconda/storage/__init__.py | 46 +++++++++++++++++++++++++++++++++++
pyanaconda/ui/gui/spokes/storage.py | 34 ++++---------------------
2 files changed, 52 insertions(+), 28 deletions(-)

diff --git a/pyanaconda/storage/__init__.py b/pyanaconda/storage/__init__.py
index 33f242c..0c5ace3 100644
--- a/pyanaconda/storage/__init__.py
+++ b/pyanaconda/storage/__init__.py
@@ -696,6 +696,52 @@ class Storage(object):
""" The OS image used by live installs. """
return None

+ def getFreeSpace(self, disks=None, clearPartType=None):
+ """ Return a dict with free space info for each disk.
+
+ The dict values are 2-tuples: (disk_free, fs_free). fs_free is
+ space available by shrinking filesystems. disk_free is space not
+ allocated to any partition.
+
+ disks and clearPartType allow specifying a set of disks other than
+ self.disks and a clearPartType value other than
+ self.config.clearPartType.
+ """
+ from partitioning import shouldClear
+ if disks is None:
+ disks = self.disks
+
+ if clearPartType is None:
+ clearPartType = self.config.clearPartType
+
+ free = {}
+ for disk in [d for d in disks if d.partitioned]:
+ should_clear = shouldClear(disk, clearPartType, [disk.name])
+ if should_clear:
+ free[disk.name] = (disk.size, 0)
+ continue
+
+ disk_free = 0
+ fs_free = 0
+ if disk.partitioned:
+ disk_free = disk.format.free
+ for partition in [p for p in self.partitions if p.disk == disk]:
+ # only check actual filesystems since lvm &c require a bunch of
+ # operations to translate free filesystem space into free disk
+ # space
+ should_clear = shouldClear(partition, clearPartType,
+ [d.name])
+ if should_clear:
+ disk_free += partition.size
+ elif hasattr(partition.format, "free"):
+ fs_free += partition.format.free
+ elif hasattr(disk.format, "free"):
+ fs_free = disk.format.free
+
+ free[disk.name] = (disk_free, fs_free)
+
+ return free
+
def exceptionDisks(self):
""" Return a list of removable devices to save exceptions to.

diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py
index 1df29a9..7e532a5 100644
--- a/pyanaconda/ui/gui/spokes/storage.py
+++ b/pyanaconda/ui/gui/spokes/storage.py
@@ -96,27 +96,6 @@ def getDisks(devicetree, fake=False):

return disks

-def get_free_space_info(disks, devicetree, clearPartType, clearPartDisks):
- disk_free = 0
- fs_free = 0
- for disk in disks:
- if not disk.partitioned:
- continue
-
- disk_free += disk.format.free
-
- for partition in devicetree.getChildren(disk):
- # only check actual filesystems since lvm &c require a bunch of
- # operations to translate free filesystem space into free disk space
- if shouldClear(partition, clearPartType, clearPartDisks):
- disk_free += partition.size
- elif hasattr(partition.format, "free"):
- fs_free += partition.format.free
-
- print("disks %s have %d free, plus %s in filesystems"
- % ([d.name for d in disks], disk_free, fs_free))
- return (disk_free, fs_free)
-
def size_str(mb):
if isinstance(mb, Size):
spec = str(mb)
@@ -483,6 +462,7 @@ class StorageSpoke(NormalSpoke):
free = 0

overviews = self.local_disks_box.get_children()
+ free_space = self.storage.getFreeSpace(clearPartType=self.clear PartType)
for overview in overviews:
name = overview.get_property("popup-info").partition("|")[0].strip()
selected = overview.get_chosen()
@@ -494,9 +474,7 @@ class StorageSpoke(NormalSpoke):
break

capacity += disk.size
- free += get_free_space_info([disk], self.storage.devicetree,
- self.clearPartType,
- self.selected_disks)[0]
+ free += free_space[disk.name][0]
count += 1

summary = (P_(("%d disk selected; %s capacity; %s free ..."),
@@ -553,10 +531,10 @@ class StorageSpoke(NormalSpoke):
def on_continue_clicked(self, button):
# show the installation options dialog
disks = [d for d in self.disks if d.name in self.selected_disks]
- (disk_free, fs_free) = get_free_space_info(disks,
- self.storage.devicetree,
- self.clearPartType,
- self.selected_disks)
+ free_space = self.storage.getFreeSpace(disks=disks,
+ clearPartType=self.clearPartType)
+ disk_free = sum([f[0] for f in free_space.itervalues()])
+ fs_free = sum([f[1] for f in free_space.itervalues()])
required_space = self.payload.spaceRequired
if disk_free >= required_space:
dialog = InstallOptions1Dialog(self.data)
--
1.7.7.6

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 
Old 05-02-2012, 08:12 PM
Chris Lumens
 
Default Move free space info gathering into Storage.

> pyanaconda/storage/__init__.py | 46 +++++++++++++++++++++++++++++++++++
> pyanaconda/ui/gui/spokes/storage.py | 34 ++++---------------------
> 2 files changed, 52 insertions(+), 28 deletions(-)

What aren't you happy with on this patch? I think it makes the storage
spoke much simpler. My only suggestion would be to cache the free space
results there and recalculate should clearPartType change, or disks be
added.

- Chris

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 

Thread Tools




All times are GMT. The time now is 02:52 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org