Merge branch 'mplegendre-multi_pkgsrc_roots' into develop

- This moves var/spack/packages to var/spack/repos/builtin/packages.

- Packages that did not exist in the source branch, or were changed in
  develop, were moved into var/spack/repos/builtin/packages as part of
  the integration.

Conflicts:
	lib/spack/spack/test/unit_install.py
	var/spack/repos/builtin/packages/clang/package.py
This commit is contained in:
Todd Gamblin
2016-01-17 19:42:28 -08:00
445 changed files with 6902 additions and 840 deletions

View File

@@ -26,6 +26,7 @@
import re
import sys
import functools
import collections
import inspect
# Ignore emacs backups when listing modules
@@ -167,16 +168,32 @@ def has_method(cls, name):
return False
def memoized(obj):
class memoized(object):
"""Decorator that caches the results of a function, storing them
in an attribute of that function."""
cache = obj.cache = {}
@functools.wraps(obj)
def memoizer(*args, **kwargs):
if args not in cache:
cache[args] = obj(*args, **kwargs)
return cache[args]
return memoizer
def __init__(self, func):
self.func = func
self.cache = {}
def __call__(self, *args):
if not isinstance(args, collections.Hashable):
# Not hashable, so just call the function.
return self.func(*args)
if args not in self.cache:
self.cache[args] = self.func(*args)
return self.cache[args]
def __get__(self, obj, objtype):
"""Support instance methods."""
return functools.partial(self.__call__, obj)
def clear(self):
"""Expunge cache so that self.func will be called again."""
self.cache.clear()
def list_modules(directory, **kwargs):

View File

@@ -63,35 +63,46 @@ def msg(message, *args):
def info(message, *args, **kwargs):
format = kwargs.get('format', '*b')
stream = kwargs.get('stream', sys.stdout)
wrap = kwargs.get('wrap', False)
cprint("@%s{==>} %s" % (format, cescape(str(message))), stream=stream)
for arg in args:
lines = textwrap.wrap(
str(arg), initial_indent=indent, subsequent_indent=indent)
for line in lines:
stream.write(line + '\n')
if wrap:
lines = textwrap.wrap(
str(arg), initial_indent=indent, subsequent_indent=indent)
for line in lines:
stream.write(line + '\n')
else:
stream.write(indent + str(arg) + '\n')
def verbose(message, *args):
def verbose(message, *args, **kwargs):
if _verbose:
info(message, *args, format='c')
kwargs.setdefault('format', 'c')
info(message, *args, **kwargs)
def debug(message, *args):
def debug(message, *args, **kwargs):
if _debug:
info(message, *args, format='g', stream=sys.stderr)
kwargs.setdefault('format', 'g')
kwargs.setdefault('stream', sys.stderr)
info(message, *args, **kwargs)
def error(message, *args):
info("Error: " + str(message), *args, format='*r', stream=sys.stderr)
def error(message, *args, **kwargs):
kwargs.setdefault('format', '*r')
kwargs.setdefault('stream', sys.stderr)
info("Error: " + str(message), *args, **kwargs)
def warn(message, *args):
info("Warning: " + str(message), *args, format='*Y', stream=sys.stderr)
def warn(message, *args, **kwargs):
kwargs.setdefault('format', '*Y')
kwargs.setdefault('stream', sys.stderr)
info("Warning: " + str(message), *args, **kwargs)
def die(message, *args):
error(message, *args)
def die(message, *args, **kwargs):
error(message, *args, **kwargs)
sys.exit(1)

View File

@@ -210,6 +210,13 @@ def colify(elts, **options):
def colify_table(table, **options):
"""Version of colify() for data expressed in rows, (list of lists).
Same as regular colify but takes a list of lists, where each
sub-list must be the same length, and each is interpreted as a
row in a table. Regular colify displays a sequential list of
values in columns.
"""
if table is None:
raise TypeError("Can't call colify_table on NoneType")
elif not table or not table[0]: