hooks take spec as an argument (instead of pkg) (#3967)

This commit is contained in:
Massimiliano Culpo 2017-04-25 21:54:53 +02:00 committed by Todd Gamblin
parent 58f2a947db
commit fc9896ed45
6 changed files with 27 additions and 23 deletions

View file

@ -31,10 +31,11 @@
Currently the following hooks are supported:
* pre_install()
* post_install()
* pre_uninstall()
* post_uninstall()
* pre_run()
* pre_install(spec)
* post_install(spec)
* pre_uninstall(spec)
* post_uninstall(spec)
This can be used to implement support for things like module
systems (e.g. modules, dotkit, etc.) or to add other custom

View file

@ -24,8 +24,9 @@
##############################################################################
def pre_uninstall(pkg):
assert(pkg.spec.concrete)
def pre_uninstall(spec):
pkg = spec.package
assert spec.concrete
if pkg.is_extension:
if pkg.activated:

View file

@ -29,8 +29,9 @@
from llnl.util.filesystem import join_path, mkdirp
def pre_install(pkg):
def pre_install(spec):
"""This hook handles global license setup for licensed software."""
pkg = spec.package
if pkg.license_required and not pkg.spec.external:
set_up_license(pkg)
@ -142,9 +143,11 @@ def write_license_file(pkg, license_path):
license.close()
def post_install(pkg):
def post_install(spec):
"""This hook symlinks local licenses to the global license for
licensed software."""
licensed software.
"""
pkg = spec.package
if pkg.license_required and not pkg.spec.external:
symlink_license(pkg)

View file

@ -26,13 +26,13 @@
from six import iteritems
def post_install(pkg):
def post_install(spec):
for item, cls in iteritems(spack.modules.module_types):
generator = cls(pkg.spec)
generator = cls(spec)
generator.write()
def post_uninstall(pkg):
def post_uninstall(spec):
for item, cls in iteritems(spack.modules.module_types):
generator = cls(pkg.spec)
generator = cls(spec)
generator.remove()

View file

@ -102,14 +102,14 @@ def filter_shebangs_in_directory(directory, filenames=None):
filter_shebang(path)
def post_install(pkg):
def post_install(spec):
"""This hook edits scripts so that they call /bin/bash
$spack_prefix/bin/sbang instead of something longer than the
shebang limit.
"""
if pkg.spec.external:
if spec.external:
tty.debug('SKIP: shebang filtering [external package]')
return
for directory, _, filenames in os.walk(pkg.prefix):
for directory, _, filenames in os.walk(spec.prefix):
filter_shebangs_in_directory(directory, filenames)

View file

@ -1112,7 +1112,7 @@ def _process_external_package(self, explicit):
# post-install hooks to generate module files
message = '{s.name}@{s.version} : generating module file'
tty.msg(message.format(s=self))
spack.hooks.post_install(self)
spack.hooks.post_install(self.spec)
# Add to the DB
message = '{s.name}@{s.version} : registering into DB'
tty.msg(message.format(s=self))
@ -1248,7 +1248,7 @@ def build_process(input_stream):
with self._stage_and_write_lock():
# Run the pre-install hook in the child process after
# the directory is created.
spack.hooks.pre_install(self)
spack.hooks.pre_install(self.spec)
if fake:
self.do_fake_install()
else:
@ -1288,7 +1288,7 @@ def build_process(input_stream):
self.spec, self.prefix)
self.log()
# Run post install hooks before build stage is removed.
spack.hooks.post_install(self)
spack.hooks.post_install(self.spec)
# Stop timer.
self._total_time = time.time() - start_time
@ -1526,9 +1526,9 @@ def uninstall_by_spec(spec, force=False):
# Pre-uninstall hook runs first.
with spack.store.db.prefix_write_lock(spec):
# TODO: hooks should take specs, not packages.
if pkg is not None:
spack.hooks.pre_uninstall(pkg)
spack.hooks.pre_uninstall(spec)
# Uninstalling in Spack only requires removing the prefix.
if not spec.external:
@ -1541,9 +1541,8 @@ def uninstall_by_spec(spec, force=False):
spack.store.db.remove(spec)
tty.msg("Successfully uninstalled %s" % spec.short_spec)
# TODO: refactor hooks to use specs, not packages.
if pkg is not None:
spack.hooks.post_uninstall(pkg)
spack.hooks.post_uninstall(spec)
tty.msg("Successfully uninstalled %s" % spec.short_spec)