From 79c5dd095273dba5481580da242959b4417e680f Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Sun, 13 Apr 2014 17:32:22 -0700 Subject: Fix SPACK-21: stage names are too long Stage names now hash dependencies like install prefixes. --- lib/spack/spack/directory_layout.py | 14 ++------------ lib/spack/spack/package.py | 2 +- lib/spack/spack/spec.py | 16 +++++++++++++--- 3 files changed, 16 insertions(+), 16 deletions(-) (limited to 'lib') diff --git a/lib/spack/spack/directory_layout.py b/lib/spack/spack/directory_layout.py index 2e4b6f89c8..ad9f669f90 100644 --- a/lib/spack/spack/directory_layout.py +++ b/lib/spack/spack/directory_layout.py @@ -138,18 +138,8 @@ class SpecHashDirectoryLayout(DirectoryLayout): def relative_path_for_spec(self, spec): _check_concrete(spec) - - path = join_path( - spec.architecture, - spec.compiler, - "%s@%s%s" % (spec.name, spec.version, spec.variants)) - - if spec.dependencies: - path += "-" - sha1 = spec.dependencies.sha1() - path += sha1[:self.prefix_size] - - return path + dir_name = spec.format('$_$@$+$#') + return join_path(spec.architecture, spec.compiler, dir_name) def write_spec(self, spec, path): diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py index ff020fb44c..b3b1538b31 100644 --- a/lib/spack/spack/package.py +++ b/lib/spack/spack/package.py @@ -407,7 +407,7 @@ class Package(object): if self._stage is None: mirror_path = "%s/%s" % (self.name, os.path.basename(self.url)) self._stage = Stage( - self.url, mirror_path=mirror_path, name=str(self.spec)) + self.url, mirror_path=mirror_path, name=self.spec.short_spec) return self._stage diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index a4f585b28a..6ec66d1afa 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -465,6 +465,13 @@ class Spec(object): yield elt + @property + def short_spec(self): + """Returns a version of the spec with the dependencies hashed + instead of completely enumerated.""" + return self.format('$_$@$%@$+$=$#') + + @property def prefix(self): return Prefix(spack.install_layout.path_for_spec(self)) @@ -998,15 +1005,18 @@ class Spec(object): $%@ Compiler & compiler version $+ Options $= Architecture - $# Dependencies' 6-char sha1 prefix + $# Dependencies' 8-char sha1 prefix $$ $ Anything else is copied verbatim into the output stream. *Example:* ``$_$@$+`` translates to the name, version, and options of the package, but no dependencies, arch, or compiler. + + TODO: allow, e.g., $6# to customize short hash length + TODO: allow, e.g., $## for full hash. """ - color = kwargs.get('color', False) + color = kwargs.get('color', False) length = len(format_string) out = StringIO() escape = compiler = False @@ -1037,7 +1047,7 @@ class Spec(object): write(c + str(self.architecture), c) elif c == '#': if self.dependencies: - out.write('-' + self.dependencies.sha1()[:6]) + out.write('-' + self.dependencies.sha1()[:8]) elif c == '$': out.write('$') escape = False -- cgit v1.2.3-60-g2f50