summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2015-12-06 16:19:36 +0100
committerLars Wirzenius <liw@liw.fi>2015-12-06 16:40:16 +0100
commit4523f153cd37fe54f7e88214cfaedb94d078fa46 (patch)
tree07ffb3da205475c7009b447164eb3452b1cd1dfd
parent94803f3ebd6d13e56469e025ae5414658566bc42 (diff)
downloadobnam-4523f153cd37fe54f7e88214cfaedb94d078fa46.tar.gz
Don't compute whole-file MD5 unless allowed
-rw-r--r--obnamlib/plugins/backup_plugin.py11
-rw-r--r--obnamlib/plugins/restore_plugin.py10
2 files changed, 15 insertions, 6 deletions
diff --git a/obnamlib/plugins/backup_plugin.py b/obnamlib/plugins/backup_plugin.py
index 88134a2d..7e0f771e 100644
--- a/obnamlib/plugins/backup_plugin.py
+++ b/obnamlib/plugins/backup_plugin.py
@@ -727,7 +727,10 @@ class BackupPlugin(obnamlib.ObnamPlugin):
tracing.trace('opening file for reading')
f = self.fs.open(filename, 'r')
- summer = hashlib.md5()
+ if obnamlib.REPO_FILE_MD5 in self.repo.get_allowed_file_keys():
+ summer = hashlib.md5()
+ else:
+ summer = None
chunk_size = int(self.app.settings['chunk-size'])
while True:
@@ -739,7 +742,8 @@ class BackupPlugin(obnamlib.ObnamPlugin):
break
tracing.trace('got %d bytes of data' % len(data))
self.progress.update_progress_with_scanned(len(data))
- summer.update(data)
+ if summer:
+ summer.update(data)
if not self.pretend:
chunk_id = self.backup_file_chunk(data)
self.repo.append_file_chunk_id(
@@ -758,7 +762,8 @@ class BackupPlugin(obnamlib.ObnamPlugin):
self.app.dump_memory_profile('at end of file content backup for %s' %
filename)
tracing.trace('done backing up file contents')
- metadata.md5 = summer.digest()
+ if summer:
+ metadata.md5 = summer.digest()
def backup_file_chunk(self, data):
'''Back up a chunk of data by putting it into the repository.'''
diff --git a/obnamlib/plugins/restore_plugin.py b/obnamlib/plugins/restore_plugin.py
index 239eef45..f24ac491 100644
--- a/obnamlib/plugins/restore_plugin.py
+++ b/obnamlib/plugins/restore_plugin.py
@@ -274,7 +274,10 @@ class RestorePlugin(obnamlib.ObnamPlugin):
logging.debug('restoring regular %s', filename)
if self.write_ok:
f = self.fs.open('./' + filename, 'wb')
- summer = hashlib.md5()
+ if obnamlib.REPO_FILE_MD5 in self.repo.get_allowed_file_keys():
+ summer = hashlib.md5()
+ else:
+ summer = None
try:
chunkids = self.repo.get_file_chunk_ids(gen, filename)
@@ -287,7 +290,7 @@ class RestorePlugin(obnamlib.ObnamPlugin):
f.close()
correct_checksum = metadata.md5
- if summer.digest() != correct_checksum:
+ if summer and summer.digest() != correct_checksum:
msg = 'File checksum restore error: %s' % filename
msg += ' (%s vs %s)' % (
summer.hexdigest(), correct_checksum.encode('hex'))
@@ -301,7 +304,8 @@ class RestorePlugin(obnamlib.ObnamPlugin):
for chunkid in chunkids:
data = self.repo.get_chunk_content(chunkid)
self.verify_chunk_checksum(data, chunkid)
- checksummer.update(data)
+ if checksummer:
+ checksummer.update(data)
self.downloaded_bytes += len(data)
if len(data) != len(zeroes):
zeroes = '\0' * len(data)