Replace SHA1 with hex(length) + sha512

This commit is contained in:
2014-12-11 16:27:05 +01:00
parent c322c30fe5
commit 81908c8b5d
4 changed files with 28 additions and 14 deletions

View File

@@ -220,7 +220,7 @@ class bam_session:
paths_remove = {}
paths_modified = {}
from bam_utils.system import sha1_from_file
from bam_utils.system import uuid_from_file
session_rootdir = os.path.abspath(session_rootdir)
@@ -237,7 +237,7 @@ class bam_session:
for f_rel, sha1 in paths_uuid.items():
f_abs = os.path.join(session_rootdir, f_rel)
if os.path.exists(f_abs):
sha1_modified = sha1_from_file(f_abs)
sha1_modified = uuid_from_file(f_abs)
if sha1_modified != sha1:
paths_modified[f_rel] = f_abs
if paths_uuid_update is not None:
@@ -272,7 +272,7 @@ class bam_session:
paths_add[f_rel] = f_abs
if paths_uuid_update is not None:
paths_uuid_update[f_rel] = sha1_from_file(f_abs)
paths_uuid_update[f_rel] = uuid_from_file(f_abs)
return paths_add, paths_remove, paths_modified

View File

@@ -45,13 +45,27 @@ else:
return msg
def sha1_from_file(fn, block_size=1 << 20):
def uuid_from_file(fn, block_size=1 << 20):
"""
Returns an arbitrary sized unique ASCII string based on the file contents.
(exact hashing method may change).
"""
with open(fn, 'rb') as f:
# first get the size
import os
f.seek(0, os.SEEK_END)
size = f.tell()
f.seek(0, os.SEEK_SET)
del os
# done!
import hashlib
sha1 = hashlib.new('sha1')
sha1 = hashlib.new('sha512')
while True:
data = f.read(block_size)
if not data:
break
sha1.update(data)
return sha1.hexdigest()
# skip the '0x'
return hex(size)[2:] + sha1.hexdigest()

View File

@@ -270,23 +270,23 @@ def pack(
del relbase
if paths_uuid is not None:
from bam_utils.system import sha1_from_file
from bam_utils.system import uuid_from_file
for src, dst in path_copy_files:
paths_uuid[os.path.relpath(dst, base_dir_dst).decode('utf-8')] = sha1_from_file(src)
paths_uuid[os.path.relpath(dst, base_dir_dst).decode('utf-8')] = uuid_from_file(src)
# XXX, better way to store temp target
blendfile_dst_tmp = temp_remap_cb(blendfile_src, base_dir_src)
paths_uuid[os.path.basename(blendfile_src).decode('utf-8')] = sha1_from_file(blendfile_dst_tmp)
paths_uuid[os.path.basename(blendfile_src).decode('utf-8')] = uuid_from_file(blendfile_dst_tmp)
# blend libs
for dst in path_temp_files:
k = os.path.relpath(dst[:-len(TEMP_SUFFIX)], base_dir_dst_temp).decode('utf-8')
if k not in paths_uuid:
paths_uuid[k] = sha1_from_file(dst)
paths_uuid[k] = uuid_from_file(dst)
del k
del blendfile_dst_tmp
del sha1_from_file
del uuid_from_file
# --------------------
# Handle File Copy/Zip

View File

@@ -375,9 +375,9 @@ class FileAPI(Resource):
return
else:
# non blend-file
from bam_utils.system import sha1_from_file
paths_uuid[os.path.basename(filepath)] = sha1_from_file(filepath)
del sha1_from_file
from bam_utils.system import uuid_from_file
paths_uuid[os.path.basename(filepath)] = uuid_from_file(filepath)
del uuid_from_file
import zipfile
with zipfile.ZipFile(filepath_zip, 'w', zipfile.ZIP_DEFLATED) as zip_handle: