Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 7 additions & 16 deletions pavelib/prereqs.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,6 @@
]


def read_in_chunks(infile, chunk_size=1024 * 64):
"""
Yield a chunk of size `chunksize` from `infile` (a file handle).
"""
chunk = infile.read(chunk_size)
while chunk:
yield chunk
chunk = infile.read(chunk_size)


def compute_fingerprint(path_list):
"""
Hash the contents of all the files and directories in `path_list`.
Expand All @@ -38,17 +28,18 @@ def compute_fingerprint(path_list):

for path in path_list:

# For directories, create a hash based on the filenames in the directory
# For directories, create a hash based on the modification times
# of first-level subdirectories
if os.path.isdir(path):
for _, _, filenames in os.walk(path):
for name in filenames:
hasher.update(name)
for dirname in sorted(os.listdir(path)):
p = os.path.join(path, dirname)
if os.path.isdir(p):
hasher.update(str(os.stat(p).st_mtime))

# For files, hash the contents of the file
if os.path.isfile(path):
with open(path, "rb") as file_handle:
for chunk in read_in_chunks(file_handle):
hasher.update(chunk)
hasher.update(file_handle.read())

return hasher.hexdigest()

Expand Down