Allow long names in format string variables
This commit is contained in:
parent
cc6252cdfa
commit
59f89dd3be
1 changed files with 63 additions and 8 deletions
|
@ -1503,14 +1503,28 @@ def format(self, format_string='$_$@$%@$+$=', **kwargs):
|
|||
in the format string. The format strings you can provide are::
|
||||
|
||||
$_ Package name
|
||||
$@ Version
|
||||
$% Compiler
|
||||
$%@ Compiler & compiler version
|
||||
$@ Version with '@' prefix
|
||||
$% Compiler with '%' prefix
|
||||
$%@ Compiler with '%' prefix & compiler version with '@' prefix
|
||||
$+ Options
|
||||
$= Architecture
|
||||
$# 7-char prefix of DAG hash
|
||||
$= Architecture with '=' prefix
|
||||
$# 7-char prefix of DAG hash with '-' prefix
|
||||
$$ $
|
||||
|
||||
You can also use full-string versions, which leave off the prefixes:
|
||||
|
||||
${PACKAGE} Package name
|
||||
${VERSION} Version
|
||||
${COMPILER} Full compiler string
|
||||
${COMPILERNAME} Compiler name
|
||||
${COMPILERVER} Compiler version
|
||||
${OPTIONS} Options
|
||||
${ARCHITECTURE} Architecture
|
||||
${SHA1} Dependencies 8-char sha1 prefix
|
||||
|
||||
${SPACK_ROOT} The spack root directory
|
||||
${SPACK_INSTALL} The default spack install directory, ${SPACK_PREFIX}/opt
|
||||
|
||||
Optionally you can provide a width, e.g. $20_ for a 20-wide name.
|
||||
Like printf, you can provide '-' for left justification, e.g.
|
||||
$-20_ for a left-justified name.
|
||||
|
@ -1526,7 +1540,8 @@ def format(self, format_string='$_$@$%@$+$=', **kwargs):
|
|||
color = kwargs.get('color', False)
|
||||
length = len(format_string)
|
||||
out = StringIO()
|
||||
escape = compiler = False
|
||||
named = escape = compiler = False
|
||||
named_str = fmt = ''
|
||||
|
||||
def write(s, c):
|
||||
if color:
|
||||
|
@ -1566,9 +1581,12 @@ def write(s, c):
|
|||
elif c == '#':
|
||||
out.write('-' + fmt % (self.dag_hash(7)))
|
||||
elif c == '$':
|
||||
if fmt != '':
|
||||
if fmt != '%s':
|
||||
raise ValueError("Can't use format width with $$.")
|
||||
out.write('$')
|
||||
elif c == '{':
|
||||
named = True
|
||||
named_str = ''
|
||||
escape = False
|
||||
|
||||
elif compiler:
|
||||
|
@ -1582,6 +1600,43 @@ def write(s, c):
|
|||
out.write(c)
|
||||
compiler = False
|
||||
|
||||
elif named:
|
||||
if not c == '}':
|
||||
if i == length - 1:
|
||||
raise ValueError("Error: unterminated ${ in format: '%s'"
|
||||
% format_string)
|
||||
named_str += c
|
||||
continue;
|
||||
if named_str == 'PACKAGE':
|
||||
write(fmt % self.name, '@')
|
||||
if named_str == 'VERSION':
|
||||
if self.versions and self.versions != _any_version:
|
||||
write(fmt % str(self.versions), '@')
|
||||
elif named_str == 'COMPILER':
|
||||
if self.compiler:
|
||||
write(fmt % self.compiler, '%')
|
||||
elif named_str == 'COMPILERNAME':
|
||||
if self.compiler:
|
||||
write(fmt % self.compiler.name, '%')
|
||||
elif named_str == 'COMPILERVER':
|
||||
if self.compiler:
|
||||
write(fmt % self.compiler.versions, '%')
|
||||
elif named_str == 'OPTIONS':
|
||||
if self.variants:
|
||||
write(fmt % str(self.variants), '+')
|
||||
elif named_str == 'ARCHITECTURE':
|
||||
if self.architecture:
|
||||
write(fmt % str(self.architecture), '=')
|
||||
elif named_str == 'SHA1':
|
||||
if self.dependencies:
|
||||
out.write(fmt % str(self.dep_hash(8)))
|
||||
elif named_str == 'SPACK_ROOT':
|
||||
out.write(fmt % spack.prefix)
|
||||
elif named_str == 'SPACK_INSTALL':
|
||||
out.write(fmt % spack.install_path)
|
||||
|
||||
named = False
|
||||
|
||||
elif c == '$':
|
||||
escape = True
|
||||
if i == length - 1:
|
||||
|
|
Loading…
Reference in a new issue