From 2e3fc9ddfc55e3c1350e890e9d1ba3c672a59bdc Mon Sep 17 00:00:00 2001 From: Marian Beermann Date: Tue, 26 Jul 2016 22:49:25 +0200 Subject: [PATCH] SyncFile/SaveFile: default binary=False, just like open() --- src/borg/cache.py | 8 ++++---- src/borg/key.py | 2 +- src/borg/platform/base.py | 10 ++++------ src/borg/platform/linux.pyx | 2 +- src/borg/repository.py | 4 ++-- 5 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/borg/cache.py b/src/borg/cache.py index 6dcd88d2e..473f156b2 100644 --- a/src/borg/cache.py +++ b/src/borg/cache.py @@ -142,11 +142,11 @@ Chunk index: {0.total_unique_chunks:20d} {0.total_chunks:20d}""" config.set('cache', 'version', '1') config.set('cache', 'repository', self.repository.id_str) config.set('cache', 'manifest', '') - with SaveFile(os.path.join(self.path, 'config'), binary=False) as fd: + with SaveFile(os.path.join(self.path, 'config')) as fd: config.write(fd) ChunkIndex().write(os.path.join(self.path, 'chunks').encode('utf-8')) os.makedirs(os.path.join(self.path, 'chunks.archive.d')) - with SaveFile(os.path.join(self.path, 'files')) as fd: + with SaveFile(os.path.join(self.path, 'files'), binary=True) as fd: pass # empty file def _do_open(self): @@ -213,7 +213,7 @@ Chunk index: {0.total_unique_chunks:20d} {0.total_chunks:20d}""" if not self.txn_active: return if self.files is not None: - with SaveFile(os.path.join(self.path, 'files')) as fd: + with SaveFile(os.path.join(self.path, 'files'), binary=True) as fd: for path_hash, item in self.files.items(): # Discard cached files with the newest mtime to avoid # issues with filesystem snapshots and mtime precision @@ -224,7 +224,7 @@ Chunk index: {0.total_unique_chunks:20d} {0.total_chunks:20d}""" self.config.set('cache', 'timestamp', self.manifest.timestamp) self.config.set('cache', 'key_type', str(self.key.TYPE)) self.config.set('cache', 'previous_location', self.repository._location.canonical_path()) - with SaveFile(os.path.join(self.path, 'config'), binary=False) as fd: + with SaveFile(os.path.join(self.path, 'config')) as fd: self.config.write(fd) self.chunks.write(os.path.join(self.path, 'chunks').encode('utf-8')) os.rename(os.path.join(self.path, 'txn.active'), diff --git a/src/borg/key.py b/src/borg/key.py index 2fd4ad3f1..b122b638c 100644 --- a/src/borg/key.py +++ b/src/borg/key.py @@ -471,7 +471,7 @@ class KeyfileKey(KeyfileKeyBase): def save(self, target, passphrase): key_data = self._save(passphrase) - with SaveFile(target, binary=False) as fd: + with SaveFile(target) as fd: fd.write('%s %s\n' % (self.FILE_ID, bin_to_hex(self.repository_id))) fd.write(key_data) fd.write('\n') diff --git a/src/borg/platform/base.py b/src/borg/platform/base.py index 2e894289b..da8d3bc0c 100644 --- a/src/borg/platform/base.py +++ b/src/borg/platform/base.py @@ -80,10 +80,8 @@ class SyncFile: TODO: A Windows implementation should use CreateFile with FILE_FLAG_WRITE_THROUGH. """ - def __init__(self, path, binary=True): - mode = 'x' - if binary: - mode += 'b' + def __init__(self, path, binary=False): + mode = 'xb' if binary else 'x' self.fd = open(path, mode) self.fileno = self.fd.fileno() @@ -122,13 +120,13 @@ class SaveFile: Must be used as a context manager (defining the scope of the transaction). On a journaling file system the file contents are always updated - atomically and won't become corrupted, even on pure failures or + atomically and won't become corrupted, even on power failures or crashes (for caveats see SyncFile). """ SUFFIX = '.tmp' - def __init__(self, path, binary=True): + def __init__(self, path, binary=False): self.binary = binary self.path = path self.tmppath = self.path + self.SUFFIX diff --git a/src/borg/platform/linux.pyx b/src/borg/platform/linux.pyx index 7dea321a0..d35b28ac2 100644 --- a/src/borg/platform/linux.pyx +++ b/src/borg/platform/linux.pyx @@ -228,7 +228,7 @@ class SyncFile(BaseSyncFile): disk in the immediate future. """ - def __init__(self, path, binary=True): + def __init__(self, path, binary=False): super().__init__(path, binary) self.offset = 0 self.write_window = (16 * 1024 ** 2) & ~PAGE_MASK diff --git a/src/borg/repository.py b/src/borg/repository.py index 9d9dc3fbf..ab65dfea3 100644 --- a/src/borg/repository.py +++ b/src/borg/repository.py @@ -160,7 +160,7 @@ class Repository: def save_config(self, path, config): config_path = os.path.join(path, 'config') - with SaveFile(config_path, binary=False) as fd: + with SaveFile(config_path) as fd: config.write(fd) def save_key(self, keydata): @@ -731,7 +731,7 @@ class LoggedIO: if not os.path.exists(dirname): os.mkdir(dirname) sync_dir(os.path.join(self.path, 'data')) - self._write_fd = SyncFile(self.segment_filename(self.segment)) + self._write_fd = SyncFile(self.segment_filename(self.segment), binary=True) self._write_fd.write(MAGIC) self.offset = MAGIC_LEN return self._write_fd