Feature: installed file verification (#12841)
This feature generates a verification manifest for each installed package and provides a command, "spack verify", which can be used to compare the current file checksums/permissions with those calculated at installed time. Verification includes * Checksums of files * File permissions * Modification time * File size Packages installed before this PR will be skipped during verification. To verify such a package you must reinstall it. The spack verify command has three modes. * With the -a,--all option it will check every installed package. * With the -f,--files option, it will check some specific files, determine which package they belong to, and confirm that they have not been changed. * With the -s,--specs option or by default, it will check some specific packages that no files havae changed.
This commit is contained in:

committed by
Peter Scheibel

parent
5ea0eed287
commit
94e80933f0
@@ -653,7 +653,7 @@ def replace_directory_transaction(directory_name, tmp_root=None):
|
||||
tty.debug('TEMPORARY DIRECTORY DELETED [{0}]'.format(tmp_dir))
|
||||
|
||||
|
||||
def hash_directory(directory):
|
||||
def hash_directory(directory, ignore=[]):
|
||||
"""Hashes recursively the content of a directory.
|
||||
|
||||
Args:
|
||||
@@ -670,11 +670,12 @@ def hash_directory(directory):
|
||||
for root, dirs, files in os.walk(directory):
|
||||
for name in sorted(files):
|
||||
filename = os.path.join(root, name)
|
||||
# TODO: if caching big files becomes an issue, convert this to
|
||||
# TODO: read in chunks. Currently it's used only for testing
|
||||
# TODO: purposes.
|
||||
with open(filename, 'rb') as f:
|
||||
md5_hash.update(f.read())
|
||||
if filename not in ignore:
|
||||
# TODO: if caching big files becomes an issue, convert this to
|
||||
# TODO: read in chunks. Currently it's used only for testing
|
||||
# TODO: purposes.
|
||||
with open(filename, 'rb') as f:
|
||||
md5_hash.update(f.read())
|
||||
|
||||
return md5_hash.hexdigest()
|
||||
|
||||
|
Reference in New Issue
Block a user