diff --git a/pisi/atomicoperations.py b/pisi/atomicoperations.py index 49bffe20..bc3bfdd5 100644 --- a/pisi/atomicoperations.py +++ b/pisi/atomicoperations.py @@ -502,17 +502,17 @@ class Install(AtomicOperation): util.clean_dir(self.old_path) ctx.ui.info(_('Storing %s') % ctx.const.files_xml, verbose=True) - self.package.extract_file(ctx.const.files_xml, self.package.pkg_dir()) + self.package.extract_file_synced(ctx.const.files_xml, self.package.pkg_dir()) ctx.ui.info(_('Storing %s') % ctx.const.metadata_xml, verbose=True) - self.package.extract_file(ctx.const.metadata_xml, self.package.pkg_dir()) + self.package.extract_file_synced(ctx.const.metadata_xml, self.package.pkg_dir()) for pcomar in self.metadata.package.providesComar: fpath = os.path.join(ctx.const.comar_dir, pcomar.script) # comar prefix is added to the pkg_dir while extracting comar # script file. so we'll use pkg_dir as destination. ctx.ui.info(_('Storing %s') % fpath, verbose=True) - self.package.extract_file(fpath, self.package.pkg_dir()) + self.package.extract_file_synced(fpath, self.package.pkg_dir()) def update_databases(self): "update databases" diff --git a/pisi/package.py b/pisi/package.py index 7121e884..366cf543 100644 --- a/pisi/package.py +++ b/pisi/package.py @@ -79,6 +79,17 @@ class Package: """Extract file with path to outdir""" self.extract_files([path], outdir) + def extract_file_synced(self, path, outdir): + """Extract file with path to outdir""" + data = self.impl.read_file(path) + fpath = util.join_path(outdir, path) + util.check_dir(os.path.dirname(fpath)) + + with open(fpath, "wb") as f: + f.write(data) + f.flush() + os.fsync(f.fileno()) + def extract_dir(self, dir, outdir): """Extract directory recursively, this function copies the directory archiveroot/dir to outdir"""