From cbccdd0dc1c3aa1aa3aac47cd47aebb986840d29 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 24 Apr 2009 08:50:01 +0200 Subject: Remove devices in leaves first order (#496630) --- partIntfHelpers.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'partIntfHelpers.py') 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" -- cgit