summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorOliver Breitwieser <oliver.breitwieser@kip.uni-heidelberg.de>2017-09-18 09:06:14 -0400
committerscheibelp <scheibel1@llnl.gov>2017-11-02 18:45:40 -0700
commit21dc31a4a19670d04cdd8f6aa952b641651015ea (patch)
treec7ec74a1f1e2d4d3c1de177d98d4058664454ef2 /lib
parentf50ddeed9fca4b948b7344a9953b86bb96fca684 (diff)
downloadspack-21dc31a4a19670d04cdd8f6aa952b641651015ea.tar.gz
spack-21dc31a4a19670d04cdd8f6aa952b641651015ea.tar.bz2
spack-21dc31a4a19670d04cdd8f6aa952b641651015ea.tar.xz
spack-21dc31a4a19670d04cdd8f6aa952b641651015ea.zip
package: support removing dependencies when deactivating
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/package.py20
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index 46bdbc4c65..bea065fac3 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -1840,10 +1840,15 @@ class PackageBase(with_metaclass(PackageMeta, object)):
tree.merge(target, ignore=ignore, link=extensions_layout.link)
def do_deactivate(self, **kwargs):
- """Called on the extension to invoke extendee's deactivate() method."""
+ """Called on the extension to invoke extendee's deactivate() method.
+
+ `remove_dependents=True` deactivates extensions depending on this
+ package instead of raising an error.
+ """
self._sanity_check_extension()
force = kwargs.get('force', False)
verbose = kwargs.get("verbose", True)
+ remove_dependents = kwargs.get("remove_dependents", False)
extensions_layout = kwargs.get("extensions_layout",
spack.store.extensions)
@@ -1860,11 +1865,14 @@ class PackageBase(with_metaclass(PackageMeta, object)):
continue
for dep in aspec.traverse(deptype='run'):
if self.spec == dep:
- msg = ("Cannot deactivate %s because %s is "
- "activated and depends on it.")
- raise ActivationError(
- msg % (self.spec.cshort_spec,
- aspec.cshort_spec))
+ if remove_dependents:
+ aspec.package.do_deactivate(**kwargs)
+ else:
+ msg = ("Cannot deactivate %s because %s is "
+ "activated and depends on it.")
+ raise ActivationError(
+ msg % (self.spec.cshort_spec,
+ aspec.cshort_spec))
self.extendee_spec.package.deactivate(
self,