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.
This commit is contained in:
		| @@ -220,13 +220,22 @@ def expand(self): | |||||||
|         os.chdir(tarball_container) |         os.chdir(tarball_container) | ||||||
|         decompress(self.archive_file) |         decompress(self.archive_file) | ||||||
|  |  | ||||||
|         # If the tarball *didn't* explode, move |         # Check for an exploding tarball, i.e. one that doesn't expand | ||||||
|         # the expanded directory up & remove the protector directory. |         # 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) |         files = os.listdir(tarball_container) | ||||||
|         if len(files) == 1: |         non_hidden = filter(lambda f: not f.startswith('.'), files) | ||||||
|             expanded_dir = os.path.join(tarball_container, files[0]) |         if len(non_hidden) == 1: | ||||||
|  |             expanded_dir = os.path.join(tarball_container, non_hidden[0]) | ||||||
|             if os.path.isdir(expanded_dir): |             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) |                 os.rmdir(tarball_container) | ||||||
|  |  | ||||||
|         # Set the wd back to the stage when done. |         # Set the wd back to the stage when done. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Todd Gamblin
					Todd Gamblin