summaryrefslogtreecommitdiff
path: root/lib/spack/llnl/util/tty
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2019-06-07 18:57:26 +0200
committerTodd Gamblin <tgamblin@llnl.gov>2019-06-07 09:57:26 -0700
commit6d56d4545472ddff1cdc0e8fd49d8260428a141e (patch)
tree957a23e8bc69f7ea6d51edddedde308bcf1afa38 /lib/spack/llnl/util/tty
parent9c1c50fb7632d179cae32b28e4561c9e041b97f0 (diff)
downloadspack-6d56d4545472ddff1cdc0e8fd49d8260428a141e.tar.gz
spack-6d56d4545472ddff1cdc0e8fd49d8260428a141e.tar.bz2
spack-6d56d4545472ddff1cdc0e8fd49d8260428a141e.tar.xz
spack-6d56d4545472ddff1cdc0e8fd49d8260428a141e.zip
Compiler search uses a pool of workers (#10190)
- spack.compilers.find_compilers now uses a multiprocess.pool.ThreadPool to execute system commands for the detection of compiler versions. - A few memoized functions have been introduced to avoid poking the filesystem multiple times for the same results. - Performance is much improved, and Spack no longer fork-bombs the system when doing a `compiler find`
Diffstat (limited to 'lib/spack/llnl/util/tty')
-rw-r--r--lib/spack/llnl/util/tty/__init__.py25
-rw-r--r--lib/spack/llnl/util/tty/colify.py2
-rw-r--r--lib/spack/llnl/util/tty/color.py6
-rw-r--r--lib/spack/llnl/util/tty/log.py2
4 files changed, 22 insertions, 13 deletions
diff --git a/lib/spack/llnl/util/tty/__init__.py b/lib/spack/llnl/util/tty/__init__.py
index c02a21d4ec..8581c16045 100644
--- a/lib/spack/llnl/util/tty/__init__.py
+++ b/lib/spack/llnl/util/tty/__init__.py
@@ -3,7 +3,8 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-from datetime import datetime
+from __future__ import unicode_literals
+
import fcntl
import os
import struct
@@ -11,6 +12,8 @@ import sys
import termios
import textwrap
import traceback
+import six
+from datetime import datetime
from six import StringIO
from six.moves import input
@@ -155,7 +158,7 @@ def msg(message, *args, **kwargs):
cwrite("@*b{%s==>} %s%s" % (
st_text, get_timestamp(), cescape(message)))
for arg in args:
- print(indent + str(arg))
+ print(indent + six.text_type(arg))
def info(message, *args, **kwargs):
@@ -172,17 +175,17 @@ def info(message, *args, **kwargs):
if _stacktrace:
st_text = process_stacktrace(st_countback)
cprint("@%s{%s==>} %s%s" % (
- format, st_text, get_timestamp(), cescape(str(message))),
- stream=stream)
+ format, st_text, get_timestamp(), cescape(six.text_type(message))
+ ), stream=stream)
for arg in args:
if wrap:
lines = textwrap.wrap(
- str(arg), initial_indent=indent, subsequent_indent=indent,
- break_long_words=break_long_words)
+ six.text_type(arg), initial_indent=indent,
+ subsequent_indent=indent, break_long_words=break_long_words)
for line in lines:
stream.write(line + '\n')
else:
- stream.write(indent + str(arg) + '\n')
+ stream.write(indent + six.text_type(arg) + '\n')
def verbose(message, *args, **kwargs):
@@ -204,7 +207,7 @@ def error(message, *args, **kwargs):
kwargs.setdefault('format', '*r')
kwargs.setdefault('stream', sys.stderr)
- info("Error: " + str(message), *args, **kwargs)
+ info("Error: " + six.text_type(message), *args, **kwargs)
def warn(message, *args, **kwargs):
@@ -213,7 +216,7 @@ def warn(message, *args, **kwargs):
kwargs.setdefault('format', '*Y')
kwargs.setdefault('stream', sys.stderr)
- info("Warning: " + str(message), *args, **kwargs)
+ info("Warning: " + six.text_type(message), *args, **kwargs)
def die(message, *args, **kwargs):
@@ -237,7 +240,7 @@ def get_number(prompt, **kwargs):
while number is None:
msg(prompt, newline=False)
ans = input()
- if ans == str(abort):
+ if ans == six.text_type(abort):
return None
if ans:
@@ -303,7 +306,7 @@ def hline(label=None, **kwargs):
cols -= 2
cols = min(max_width, cols)
- label = str(label)
+ label = six.text_type(label)
prefix = char * 2 + " "
suffix = " " + (cols - len(prefix) - clen(label)) * char
diff --git a/lib/spack/llnl/util/tty/colify.py b/lib/spack/llnl/util/tty/colify.py
index 32af811b52..d5e0aa8def 100644
--- a/lib/spack/llnl/util/tty/colify.py
+++ b/lib/spack/llnl/util/tty/colify.py
@@ -6,7 +6,7 @@
"""
Routines for printing columnar output. See ``colify()`` for more information.
"""
-from __future__ import division
+from __future__ import division, unicode_literals
import os
import sys
diff --git a/lib/spack/llnl/util/tty/color.py b/lib/spack/llnl/util/tty/color.py
index fd982b54af..6789ecbdb3 100644
--- a/lib/spack/llnl/util/tty/color.py
+++ b/lib/spack/llnl/util/tty/color.py
@@ -59,10 +59,14 @@ The console can be reset later to plain text with '@.'.
To output an @, use '@@'. To output a } inside braces, use '}}'.
"""
+from __future__ import unicode_literals
import re
import sys
+
from contextlib import contextmanager
+import six
+
class ColorParseError(Exception):
"""Raised when a color format fails to parse."""
@@ -244,7 +248,7 @@ def cescape(string):
Returns:
(str): the string with color codes escaped
"""
- string = str(string)
+ string = six.text_type(string)
string = string.replace('@', '@@')
string = string.replace('}', '}}')
return string
diff --git a/lib/spack/llnl/util/tty/log.py b/lib/spack/llnl/util/tty/log.py
index 9bc2ee3915..b061e13b0e 100644
--- a/lib/spack/llnl/util/tty/log.py
+++ b/lib/spack/llnl/util/tty/log.py
@@ -5,6 +5,8 @@
"""Utility classes for logging the output of blocks of code.
"""
+from __future__ import unicode_literals
+
import multiprocessing
import os
import re