Skip to content
Snippets Groups Projects
Commit 67db8ddc authored by Todd Gamblin's avatar Todd Gamblin
Browse files

Factor ignore logic into a predicate builder.

parent 06d6b0b2
Branches
Tags
No related merge requests found
......@@ -291,6 +291,37 @@ def foo(self, **kwargs):
% (next(kwargs.iterkeys()), fun.__name__))
def match_predicate(*args):
"""Utility function for making string matching predicates.
Each arg can be a:
- regex
- list or tuple of regexes
- predicate that takes a string.
This returns a predicate that is true if:
- any arg regex matches
- any regex in a list or tuple of regexes matches.
- any predicate in args matches.
"""
def match(string):
for arg in args:
if isinstance(arg, basestring):
if re.search(arg, string):
return True
elif isinstance(arg, list) or isinstance(arg, tuple):
if any(re.search(i, string) for i in arg):
return True
elif callable(arg):
if arg(string):
return True
else:
raise ValueError("args to match_predicate must be regex, "
"list of regexes, or callable.")
return False
return match
class RequiredAttributeError(ValueError):
def __init__(self, message):
super(RequiredAttributeError, self).__init__(message)
import os
import re
from contextlib import closing
from llnl.util.lang import match_predicate
from spack import *
import spack
......@@ -85,23 +86,19 @@ def setup_dependent_environment(self, module, spec, ext_spec):
def python_ignore(self, ext_pkg, args):
"""Add some ignore files to activate/deactivate args."""
orig_ignore = args.get('ignore', lambda f: False)
ignore_arg = args.get('ignore', lambda f: False)
def ignore(filename):
# Always ignore easy-install.pth, as it needs to be merged.
patterns = [r'easy-install\.pth$']
# Always ignore easy-install.pth, as it needs to be merged.
patterns = [r'easy-install\.pth$']
# Ignore pieces of setuptools installed by other packages.
if ext_pkg.name != 'py-setuptools':
patterns.append(r'/site\.pyc?$')
patterns.append(r'setuptools\.pth')
patterns.append(r'bin/easy_install[^/]*$')
patterns.append(r'setuptools.*egg$')
# Ignore pieces of setuptools installed by other packages.
if ext_pkg.name != 'py-setuptools':
patterns.append(r'/site\.pyc?$')
patterns.append(r'setuptools\.pth')
patterns.append(r'bin/easy_install[^/]*$')
patterns.append(r'setuptools.*egg$')
return (any(re.search(p, filename) for p in patterns) or
orig_ignore(filename))
return ignore
return match_predicate(ignore_arg, patterns)
def write_easy_install_pth(self, exts):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment