diff options
author | Lars Wirzenius <liw@liw.fi> | 2015-12-06 16:19:36 +0100 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2015-12-06 16:40:16 +0100 |
commit | 4523f153cd37fe54f7e88214cfaedb94d078fa46 (patch) | |
tree | 07ffb3da205475c7009b447164eb3452b1cd1dfd | |
parent | 94803f3ebd6d13e56469e025ae5414658566bc42 (diff) | |
download | obnam-4523f153cd37fe54f7e88214cfaedb94d078fa46.tar.gz |
Don't compute whole-file MD5 unless allowed
-rw-r--r-- | obnamlib/plugins/backup_plugin.py | 11 | ||||
-rw-r--r-- | obnamlib/plugins/restore_plugin.py | 10 |
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) |