diff --git a/source/dub/commandline.d b/source/dub/commandline.d index fc06a32..597a10e 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -1281,8 +1281,25 @@ enforce(free_args.length == 0, "Cleaning a specific package isn't possible right now."); if (m_allPackages) { - foreach (p; dub.packageManager.getPackageIterator()) - dub.cleanPackage(p.path); + bool any_error = false; + + foreach (p; dub.packageManager.getPackageIterator()) { + try dub.cleanPackage(p.path); + catch (Exception e) { + logWarn("Failed to clean package %s at %s: %s", p.name, p.path, e.msg); + any_error = true; + } + + foreach (sp; p.subPackages.filter!(sp => !sp.path.empty)) { + try dub.cleanPackage(p.path ~ sp.path); + catch (Exception e) { + logWarn("Failed to clean sub package of %s at %s: %s", p.name, p.path ~ sp.path, e.msg); + any_error = true; + } + } + } + + if (any_error) return 1; } else { dub.cleanPackage(dub.rootPath); }