diff options
author | Todd Gamblin <tgamblin@llnl.gov> | 2015-06-01 09:58:52 -0700 |
---|---|---|
committer | Todd Gamblin <tgamblin@llnl.gov> | 2015-06-01 10:25:58 -0700 |
commit | d19538af07daca3359e0f5f22f554691f0a4ec71 (patch) | |
tree | 4bae5f95e5ff1f664df814ccf3b0b3c98eebff46 | |
parent | 123778dec253d7a1e6bd03e26708a92320ce612a (diff) | |
download | spack-d19538af07daca3359e0f5f22f554691f0a4ec71.tar.gz spack-d19538af07daca3359e0f5f22f554691f0a4ec71.tar.bz2 spack-d19538af07daca3359e0f5f22f554691f0a4ec71.tar.xz spack-d19538af07daca3359e0f5f22f554691f0a4ec71.zip |
Fix #48: Ignore hidden files when deciding how to stage.
- Expanding archvies like MAGMA 1.6.2 creates extra hidden files that
confuse Spack's staging mechanism.
- Added a special case to ignore hidden files when checking whether
the tarball exploded.
-rw-r--r-- | lib/spack/spack/fetch_strategy.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py index c892e9ea26..e46ec74e09 100644 --- a/lib/spack/spack/fetch_strategy.py +++ b/lib/spack/spack/fetch_strategy.py @@ -220,13 +220,22 @@ class URLFetchStrategy(FetchStrategy): os.chdir(tarball_container) decompress(self.archive_file) - # If the tarball *didn't* explode, move - # the expanded directory up & remove the protector directory. + # Check for an exploding tarball, i.e. one that doesn't expand + # to a single directory. If the tarball *didn't* explode, + # move contents up & remove the container directory. + # + # NOTE: The tar program on Mac OS X will encode HFS metadata + # in hidden files, which can end up *alongside* a single + # top-level directory. We ignore hidden files to accomodate + # these "semi-exploding" tarballs. files = os.listdir(tarball_container) - if len(files) == 1: - expanded_dir = os.path.join(tarball_container, files[0]) + non_hidden = filter(lambda f: not f.startswith('.'), files) + if len(non_hidden) == 1: + expanded_dir = os.path.join(tarball_container, non_hidden[0]) if os.path.isdir(expanded_dir): - shutil.move(expanded_dir, self.stage.path) + for f in files: + shutil.move(os.path.join(tarball_container, f), + os.path.join(self.stage.path, f)) os.rmdir(tarball_container) # Set the wd back to the stage when done. |