summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2009-04-24 08:50:01 +0200
committerHans de Goede <hdegoede@redhat.com>2009-04-24 09:54:57 +0200
commitcbccdd0dc1c3aa1aa3aac47cd47aebb986840d29 (patch)
tree0f60eb16bfe7f142141c175f9d5534552b6bc9f5
parentd3fcb8726db676c85b0f5f37719dc19e4d423008 (diff)
downloadanaconda-cbccdd0dc1c3aa1aa3aac47cd47aebb986840d29.tar.gz
anaconda-cbccdd0dc1c3aa1aa3aac47cd47aebb986840d29.tar.xz
anaconda-cbccdd0dc1c3aa1aa3aac47cd47aebb986840d29.zip
Remove devices in leaves first order (#496630)
-rw-r--r--partIntfHelpers.py22
1 files changed, 14 insertions, 8 deletions
diff --git a/partIntfHelpers.py b/partIntfHelpers.py
index bd1ddbbfd..6d91bad67 100644
--- a/partIntfHelpers.py
+++ b/partIntfHelpers.py
@@ -133,8 +133,12 @@ def doDeleteDevice(intf, storage, device, confirm=1, quiet=0):
if confirm and not confirmDelete(intf, device):
return False
- for dep in storage.deviceDeps(device):
- storage.destroyDevice(dep)
+ deps = storage.deviceDeps(device)
+ while deps:
+ leaves = [d for d in deps if d.isleaf]
+ for leaf in leaves:
+ storage.destroyDevice(leaf)
+ deps.remove(leaf)
storage.destroyDevice(device)
return True
@@ -157,12 +161,14 @@ def doDeleteDependentDevices(intf, storage, device, confirm=1, quiet=0):
return False
immutable = []
- for dep in deps:
- if storage.deviceImmutable(dep):
- immutable.append(dep.path)
- continue
- else:
- storage.destroyDevice(dep)
+ while deps:
+ leaves = [d for d in deps if d.isleaf]
+ for leaf in leaves:
+ if storage.deviceImmutable(leaf):
+ immutable.append(leaf.path)
+ else:
+ storage.destroyDevice(leaf)
+ deps.remove(leaf)
if immutable and not quiet:
remaining = "\t" + "\n\t".join(immutable) + "\n"