From e95a07267c7f642fdca2aca346ab4c12f46748bb Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Wed, 8 Aug 2012 13:34:15 -0700 Subject: bintree.inject(): write Packages.gz atomically --- pym/portage/dbapi/bintree.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'pym') diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py index 77fc0c4ef..8dd7aadd4 100644 --- a/pym/portage/dbapi/bintree.py +++ b/pym/portage/dbapi/bintree.py @@ -1193,13 +1193,16 @@ class binarytree(object): atime = mtime = long(pkgindex.header["TIMESTAMP"]) pkgindex_filename = os.path.join(self.pkgdir, "Packages") - output_files = [(atomic_ofstream(pkgindex_filename, mode="wb"), pkgindex_filename)] + output_files = [(atomic_ofstream(pkgindex_filename, mode="wb"), pkgindex_filename, None)] if "compress-index" in self.settings.features: gz_fname = pkgindex_filename + ".gz" - output_files.append((GzipFile(gz_fname, mode="wb"), gz_fname)) - for f, fname in output_files: + fileobj = atomic_ofstream(gz_fname, mode="wb") + output_files.append((GzipFile(filename='', mode="wb", fileobj=fileobj, mtime=mtime), gz_fname, fileobj)) + for f, fname, f_close in output_files: f.write(contents) f.close() + if f_close is not None: + f_close.close() # some seconds might have elapsed since TIMESTAMP os.utime(fname, (atime, mtime)) finally: -- cgit v1.2.3-65-gdbad