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 using disk.partitions (http://www.linux-archive.org/ubuntu-masters-universe/244132-iterate-over-partitions-using-disk-partitions.html)

David Cantrell 02-11-2009 11:54 PM

Iterate over partitions using disk.partitions
 
Rather than calling disk.nextPartition() over and over, we can
get a hash table of all partitions on a disk via disk.partitions.
Iterate over the values() of this hash (the keys correspond to
the partition number).
---
autopart.py | 12 ++++++------
bootloader.py | 4 ++--
fsset.py | 2 +-
iw/partition_gui.py | 17 +++++------------
partedUtils.py | 8 ++++----
partitions.py | 11 +++--------
textw/partition_text.py | 7 +------
7 files changed, 22 insertions(+), 39 deletions(-)

diff --git a/autopart.py b/autopart.py
index a445f34..17a9748 100644
--- a/autopart.py
+++ b/autopart.py
@@ -114,7 +114,7 @@ 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.values():
+ for free in disk.partitions:
if free.type & parted.PARTITION_FREESPACE:
break
if (not free or free.geometry.start != 1L or free.getSize(unit="MB") < 1):
@@ -149,7 +149,7 @@ def findFreespace(diskset):
for drive in diskset.disks.keys():
disk = diskset.disks[drive]
free[drive] = []
- for part in disk.partitions.values():
+ for part in disk.partitions:
if part.type & parted.PARTITION_FREESPACE:
free[drive].append(part)
return free
@@ -453,7 +453,7 @@ 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.values():
+ for part in disk.partitions:
if part.type & parted.PARTITION_FREESPACE:
if part.geometry.start > freeStartSec and part.geometry.end <= freeEndSec:
found = 1
@@ -883,7 +883,7 @@ def setPreexistParts(diskset, requests):
lvmLog.info("pre-existing partition on non-native disk %s, ignoring" %(request.drive,))
continue
disk = diskset.disks[request.drive]
- for part in disk.partitions.values():
+ for part in disk.partitions:
if part.geometry.start == request.start and part.geometry.end == request.end:
if partedUtils.isEfiSystemPartition(part) and
request.fstype.name == "vfat":
@@ -925,7 +925,7 @@ def setPreexistParts(diskset, requests):

def deletePart(diskset, delete):
disk = diskset.disks[delete.drive]
- for part in disk.partitions.values():
+ for part in disk.partitions:
if part.geometry.start == delete.start and part.geometry.end == delete.end:
disk.deletePartition(part)
return
@@ -1134,7 +1134,7 @@ def doClearPartAction(anaconda, partitions, diskset):
drive in diskset.skippedDisks:
continue
disk = diskset.disks[drive]
- for part in disk.partitions.values():
+ for part in disk.partitions:
if (not part.active or (part.type == parted.PARTITION_EXTENDED) or
(part.disk.type == "mac" and part.number == 1 and part.name == "Apple")):
continue
diff --git a/bootloader.py b/bootloader.py
index 39102fe..58d20b3 100644
--- a/bootloader.py
+++ b/bootloader.py
@@ -65,7 +65,7 @@ def bootloaderSetupChoices(anaconda):
bootPart = None
for drive in drives:
disk = anaconda.id.diskset.disks[drive]
- for part in disk.partitions.values():
+ for part in disk.partitions:
if part.active and partedUtils.isEfiSystemPartition(part):
bootPart = part.getDeviceNodeName()
break
@@ -84,7 +84,7 @@ def bootloaderSetupChoices(anaconda):
bootPart = None
for drive in drives:
disk = anaconda.id.diskset.disks[drive]
- for part in disk.partitions.values():
+ for part in disk.partitions:
if part.active and part.getFlag(parted.PARTITION_PREP):
bootPart = part.getDeviceNodeName()
break
diff --git a/fsset.py b/fsset.py
index 0af78d7..862ef24 100644
--- a/fsset.py
+++ b/fsset.py
@@ -1666,7 +1666,7 @@ MAILADDR root
if partedUtils.hasGptLabel(diskset, drive):
continue
disk = diskset.disks[drive]
- for part in disk.partitions.values():
+ for part in disk.partitions:
if not part.active:
continue

diff --git a/iw/partition_gui.py b/iw/partition_gui.py
index 5517f57..c39bbb7 100644
--- a/iw/partition_gui.py
+++ b/iw/partition_gui.py
@@ -828,15 +828,12 @@ class PartitionWindow(InstallWindow):
sectorsPerCyl = heads * sectors

extendedParent = None
- part = disk.next_partition()
- while part:
+ for part in disk.partitions:
if part.type & parted.PARTITION_METADATA:
- part = disk.next_partition(part)
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 = disk.next_partition(part)
continue

stripe.add(part)
@@ -858,7 +855,7 @@ class PartitionWindow(InstallWindow):
else:
iter = self.tree.append(parent)
self.tree[iter]['IsLeaf'] = True
-
+
if request and request.mountpoint:
self.tree[iter]['Mount Point'] = request.mountpoint
else:
@@ -871,7 +868,6 @@ class PartitionWindow(InstallWindow):
self.tree[iter]['Mount Point'] = vgreq.volumeGroupName
else:
self.tree.appendToHiddenPartitionsList(part)
- part = disk.next_partition(part)
self.tree.remove(iter)
continue
else:
@@ -884,7 +880,7 @@ class PartitionWindow(InstallWindow):

if request and request.fstype:
self.tree[iter]['IsFormattable'] = request.fstype.isFormattable()
-
+
if part.type & parted.PARTITION_FREESPACE:
ptype = _("Free space")
elif part.type == parted.PARTITION_EXTENDED:
@@ -901,7 +897,6 @@ class PartitionWindow(InstallWindow):
self.tree[iter]['Mount Point'] = mddevice
else:
self.tree.appendToHiddenPartitionsList(part)
- part = disk.next_partition(part)
self.tree.remove(iter)
continue
else:
@@ -924,7 +919,7 @@ class PartitionWindow(InstallWindow):
else:
if request and request.fstype != None:
ptype = self.getShortFSTypeName(request.fstype.getName())
-
+
if ptype == "foreign":
ptype = map_foreign_to_fsname(part)
else:
@@ -949,8 +944,6 @@ class PartitionWindow(InstallWindow):
sizestr = "%Ld" % (size)
self.tree[iter]['Size (MB)'] = sizestr
self.tree[iter]['PyObject'] = part
-
- part = disk.next_partition(part)

canvas = self.diskStripeGraph.getCanvas()
apply(canvas.set_scroll_region, canvas.root().get_bounds())
@@ -959,7 +952,7 @@ class PartitionWindow(InstallWindow):
def treeActivateCb(self, view, path, col):
if self.tree.getCurrentPartition():
self.editCb()
-
+
def treeSelectCb(self, selection, *args):
model, iter = selection.get_selected()
if not iter:
diff --git a/partedUtils.py b/partedUtils.py
index 54abfa8..40c31ae 100644
--- a/partedUtils.py
+++ b/partedUtils.py
@@ -106,7 +106,7 @@ def map_foreign_to_fsname(part):

def filter_partitions(disk, func):
rc = []
- for part in disk.partitions.values():
+ for part in disk.partitions:
if func(part):
rc.append(part)
return rc
@@ -681,7 +681,7 @@ class DiskSet:

for drive in drives:
disk = self.disks[drive]
- for part in disk.partitions.values():
+ for part in disk.partitions:
node = part.getDeviceNodeName()
crypto = self.anaconda.id.partitions.encryptedDevices.get(n ode)
if (part.active
@@ -1105,7 +1105,7 @@ class DiskSet:

for drive in drives:
disk = self.disks[drive]
- for part in disk.partitions.values():
+ for part in disk.partitions:
if part.type in (parted.PARTITION_NORMAL,
parted.PARTITION_LOGICAL):
device = part.getDeviceNodeName()
@@ -1128,7 +1128,7 @@ class DiskSet:
disk.device.length,
disk.maxPrimaryPartitionCount))

- for part in disk.partitions.values():
+ for part in disk.partitions:
rc = rc + ("Device Type Filesystem Start "
"End Length Flags
")
rc = rc + ("------ ---- ---------- ----- "
diff --git a/partitions.py b/partitions.py
index 650a3da..dd482e0 100644
--- a/partitions.py
+++ b/partitions.py
@@ -304,23 +304,18 @@ class Partitions:
continue

disk = diskset.disks[drive]
- part = disk.next_partition()
- while part:
+ for part in disk.partitions:
if part.type & parted.PARTITION_METADATA:
- part = disk.next_partition(part)
continue

device = part.getDeviceNodeName()
fs = isys.readFSType("/dev/%s" % (device,))
if fs and fs.endswith("raid"):
- part = disk.next_partition(part)
continue

if cryptodev.isLuks("/dev/%s" % device):
self.getCryptoDev(device)

- part = disk.next_partition(part)
-
diskset.startMPath()
diskset.startDmRaid()
diskset.startMdRaid()
@@ -372,7 +367,7 @@ class Partitions:
drives.sort()
for drive in drives:
disk = diskset.disks[drive]
- for part in disk.partitions.values():
+ for part in disk.partitions:
if part.type & parted.PARTITION_METADATA:
continue

@@ -658,7 +653,7 @@ class Partitions:

rc = []
disk = diskset.disks[device]
- for part in disk.partitions.values():
+ for part in disk.partitions:
dev = part.getDeviceNodeName()
request = self.getRequestByDeviceName(dev)

diff --git a/textw/partition_text.py b/textw/partition_text.py
index 997989e..f86a61e 100644
--- a/textw/partition_text.py
+++ b/textw/partition_text.py
@@ -138,16 +138,13 @@ class PartitionWindow:
self.lb.append([devify(drive),"","","","",""], None)

extendedParent = None
- part = disk.next_partition()
- while part:
+ for part in disk.partitions:
if part.type & parted.PARTITION_METADATA:
# print("partition %s has type %d" %(part.getDeviceNodeName(), part.type))
- part = disk.next_partition(part)
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 = disk.next_partition(part)
continue

device = part.getDeviceNodeName()
@@ -204,7 +201,6 @@ class PartitionWindow:
"%s" %(ptype),
""], part,
[LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT])
-
else:
dev = devify(part.getDeviceNodeName())
# save some space per #90838
@@ -219,7 +215,6 @@ class PartitionWindow:
"%s" %(ptype),
"%s" %(mount)], part,
[LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT])
- part = disk.next_partition(part)

def refresh(self):
# XXX need some way to stay at the same place in the list after
--
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 01:23 PM.

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