Ability to ignore files in activate/deactivate for extensions.

This commit is contained in:
Todd Gamblin 2015-01-20 15:07:53 -08:00
parent ff9cb94f4f
commit de91c95e8e
4 changed files with 26 additions and 22 deletions

View File

@ -72,8 +72,7 @@ def traverse(self, dest_root, **kwargs):
order=[pre|post] -- Whether to do pre- or post-order traveral.
ignore=<container> -- Optional container of root-relative
paths to ignore.
ignore=<predicate> -- Predicate indicating which files to ignore.
follow_nonexisting -- Whether to descend into directories in
src that do not exit in dest.
@ -85,9 +84,7 @@ def traverse(self, dest_root, **kwargs):
raise ValueError("Order must be 'pre' or 'post'.")
# List of relative paths to ignore under the src root.
ignore = kwargs.get('ignore', None)
if isinstance(ignore, basestring):
ignore = (ignore,)
ignore = kwargs.get('ignore', lambda filename: False)
# Whether to descend when dirs dont' exist in dest.
follow_nonexisting = kwargs.get('follow_nonexisting', True)
@ -98,7 +95,7 @@ def traverse(self, dest_root, **kwargs):
dest_dirpath = os.path.join(dest_root, rel_path)
# Don't descend into ignored directories
if ignore and dest_dirpath in ignore:
if ignore(dest_dirpath):
return
# Don't descend into dirs in dest that do not exist in src.
@ -118,7 +115,7 @@ def traverse(self, dest_root, **kwargs):
# Ignore particular paths inside the install root.
src_relpath = src_file[len(self._root):]
src_relpath = src_relpath.lstrip(os.path.sep)
if ignore and src_relpath in ignore:
if ignore(src_relpath):
continue
yield (src_file, dest_file)

View File

@ -995,14 +995,15 @@ def activate(self, extension, **kwargs):
always executed.
"""
ignore_files = set(spack.install_layout.hidden_file_paths)
ignore_files.update(kwargs.get('ignore', ()))
def ignore(filename):
return (filename in spack.install_layout.hidden_file_paths or
kwargs.get('ignore', lambda f: False)(filename))
tree = LinkTree(extension.prefix)
conflict = tree.find_conflict(self.prefix, ignore=ignore_files)
conflict = tree.find_conflict(self.prefix, ignore=ignore)
if conflict:
raise ExtensionConflictError(conflict)
tree.merge(self.prefix, ignore=ignore_files)
tree.merge(self.prefix, ignore=ignore)
def do_deactivate(self):
@ -1026,11 +1027,12 @@ def deactivate(self, extension, **kwargs):
always executed.
"""
ignore_files = set(spack.install_layout.hidden_file_paths)
ignore_files.update(kwargs.get('ignore', ()))
def ignore(filename):
return (filename in spack.install_layout.hidden_file_paths or
kwargs.get('ignore', lambda f: False)(filename))
tree = LinkTree(extension.prefix)
tree.unmerge(self.prefix, ignore=ignore_files)
tree.unmerge(self.prefix, ignore=ignore)
def do_clean(self):

View File

@ -1,7 +1,9 @@
from spack import *
class PyNose(Package):
"""nose extends the test loading and running features of unittest, making it easier to write, find and run tests."""
"""nose extends the test loading and running features of unittest,
making it easier to write, find and run tests."""
homepage = "https://pypi.python.org/pypi/nose"
url = "https://pypi.python.org/packages/source/n/nose/nose-1.3.4.tar.gz"

View File

@ -1,5 +1,6 @@
from spack import *
import os
import re
class Python(Package):
"""The Python programming language."""
@ -59,19 +60,21 @@ def setup_extension_environment(self, module, spec, ext_spec):
mkdirp(module.site_packages_dir)
def add_ignore_files(self, args):
def make_ignore(self, args):
"""Add some ignore files to activate/deactivate args."""
ignore = set(args.get('ignore', ()))
ignore.add(os.path.join(self.site_packages_dir, 'site.py'))
ignore.add(os.path.join(self.site_packages_dir, 'site.pyc'))
args.update(ignore=ignore)
orig_ignore = args.get('ignore', lambda f: False)
def ignore(filename):
return (re.search(r'/site\.pyc?$', filename) or
re.search(r'\.pth$', filename) or
orig_ignore(filename))
return ignore
def activate(self, ext_pkg, **args):
self.add_ignore_files(args)
args.update(ignore=self.make_ignore(args))
super(Python, self).activate(ext_pkg, **args)
def deactivate(self, ext_pkg, **args):
self.add_ignore_files(args)
args.update(ignore=self.make_ignore(args))
super(Python, self).deactivate(ext_pkg, **args)