Linux Archive

Linux Archive (http://www.linux-archive.org/)
-   Ubuntu Masters Of The Universe (http://www.linux-archive.org/ubuntu-masters-universe/)
-   -   Iterate over partitions to see free space. (http://www.linux-archive.org/ubuntu-masters-universe/244135-iterate-over-partitions-see-free-space.html)

David Cantrell 02-11-2009 11:54 PM

Iterate over partitions to see free space.
 
Use the getFirstPartition() and nextPartition() method to
iterate over partitions so we can see the free space as
represented by libparted.
---
autopart.py | 22 ++++++++++------------
iw/partition_gui.py | 8 +++++++-
partitions.py | 6 +++++-
textw/partition_text.py | 7 ++++++-
4 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/autopart.py b/autopart.py
index 17a9748..6b5f887 100644
--- a/autopart.py
+++ b/autopart.py
@@ -114,9 +114,11 @@ def bootAlphaCheckRequirements(part):

# The first free space should start at the begining of the drive
# and span for a megabyte or more.
- for free in disk.partitions:
+ free = disk.getFirstPartition()
+ while free:
if free.type & parted.PARTITION_FREESPACE:
break
+ free = free.nextPartition()
if (not free or free.geometry.start != 1L or free.getSize(unit="MB") < 1):
return BOOTALPHA_NO_RESERVED_SPACE

@@ -148,10 +150,7 @@ def findFreespace(diskset):
free = {}
for drive in diskset.disks.keys():
disk = diskset.disks[drive]
- free[drive] = []
- for part in disk.partitions:
- if part.type & parted.PARTITION_FREESPACE:
- free[drive].append(part)
+ free[drive] = disk.getFreeSpacePartitions()
return free


@@ -453,13 +452,12 @@ def fitSized(diskset, requests, primOnly = 0, newParts = None):
# now need to update freespace since adding extended
# took some space
found = 0
- for part in disk.partitions:
- if part.type & parted.PARTITION_FREESPACE:
- if part.geometry.start > freeStartSec and part.geometry.end <= freeEndSec:
- found = 1
- freeStartSec = part.geometry.start
- freeEndSec = part.geometry.end
- break
+ for part in disk.getFreeSpacePartitions():
+ if part.geometry.start > freeStartSec and part.geometry.end <= freeEndSec:
+ found = 1
+ freeStartSec = part.geometry.start
+ freeEndSec = part.geometry.end
+ break

if not found:
raise PartitioningError, "Could not find free space after making new extended partition"
diff --git a/iw/partition_gui.py b/iw/partition_gui.py
index abb2845..79555be 100644
--- a/iw/partition_gui.py
+++ b/iw/partition_gui.py
@@ -828,12 +828,15 @@ class PartitionWindow(InstallWindow):
sectorsPerCyl = heads * sectors

extendedParent = None
- for part in disk.partitions:
+ part = disk.getFirstPartition()
+ while part:
if part.type & parted.PARTITION_METADATA:
+ part = part.nextPartition()
continue
# ignore the tiny < 1 MB partitions (#119479)
if part.getSize(unit="MB") <= 1.0:
if not part.is_active() or not part.getFlag(parted.PARTITION_BOOT):
+ part = part.nextPartition()
continue

stripe.add(part)
@@ -898,6 +901,7 @@ class PartitionWindow(InstallWindow):
else:
self.tree.appendToHiddenPartitionsList(part)
self.tree.remove(iter)
+ part = part.nextPartition()
continue
else:
self.tree[iter]['Mount Point'] = ""
@@ -945,6 +949,8 @@ class PartitionWindow(InstallWindow):
self.tree[iter]['Size (MB)'] = sizestr
self.tree[iter]['PyObject'] = part

+ part = part.nextPartition()
+
canvas = self.diskStripeGraph.getCanvas()
apply(canvas.set_scroll_region, canvas.root().get_bounds())
self.treeView.expand_all()
diff --git a/partitions.py b/partitions.py
index dd482e0..53c1480 100644
--- a/partitions.py
+++ b/partitions.py
@@ -367,8 +367,10 @@ class Partitions:
drives.sort()
for drive in drives:
disk = diskset.disks[drive]
- for part in disk.partitions:
+ part = disk.getFirstPartition()
+ while part:
if part.type & parted.PARTITION_METADATA:
+ part = part.nextPartition()
continue

format = None
@@ -435,6 +437,8 @@ class Partitions:
spec.fslabel = labels[mappedDev]
self.addRequest(spec)

+ part = part.nextPartition()
+
# now we need to read in all pre-existing RAID stuff
diskset.startMPath()
diskset.startDmRaid()
diff --git a/textw/partition_text.py b/textw/partition_text.py
index f86a61e..c67399e 100644
--- a/textw/partition_text.py
+++ b/textw/partition_text.py
@@ -138,13 +138,16 @@ class PartitionWindow:
self.lb.append([devify(drive),"","","","",""], None)

extendedParent = None
- for part in disk.partitions:
+ part = disk.getFirstPartition()
+ while part:
if part.type & parted.PARTITION_METADATA:
# print("partition %s has type %d" %(part.getDeviceNodeName(), part.type))
+ part = part.nextPartition()
continue
# ignore the tiny < 1 MB partitions (#119479)
if part.getSize(unit="MB") <= 1.0:
if not part.is_active() or not part.get_flag(parted.PARTITION_BOOT):
+ part = part.nextPartition()
continue

device = part.getDeviceNodeName()
@@ -216,6 +219,8 @@ class PartitionWindow:
"%s" %(mount)], part,
[LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT])

+ part = part.nextPartition()
+
def refresh(self):
# XXX need some way to stay at the same place in the list after
# repopulating
--
1.6.1.3

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


All times are GMT. The time now is 11:37 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.