From dacd3b42154210e1d50fbe947a9bf9a7136d3081 Mon Sep 17 00:00:00 2001 From: "Robin H. Johnson" Date: Sat, 30 May 2020 23:38:58 -0700 Subject: genrdeps-index: safely create/overwrite rdeps tarball Signed-off-by: Robin H. Johnson --- genrdeps-index.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/genrdeps-index.py b/genrdeps-index.py index 1f0b24c..feea62c 100755 --- a/genrdeps-index.py +++ b/genrdeps-index.py @@ -11,6 +11,7 @@ import os.path import shutil import subprocess import sys +import tempfile import pkgcore.config from pkgcore.ebuild.atom import atom @@ -102,12 +103,24 @@ def main(): os.rename(newdir, outdir) shutil.rmtree(olddir, onerror=rmtree_ignore_enoent) - subprocess.check_call( - ['tar', '-cf', 'rdeps.tar'] + [gi for g, gi in GROUPS], - cwd=args.outputdir) - subprocess.check_call( - ['xz', '-9', 'rdeps.tar'], - cwd=args.outputdir) + with tempfile.NamedTemporaryFile(prefix='.tmp.rdeps-', suffix='.tar', dir=args.outputdir, delete=False) as tmpf: + try: + subprocess.check_call( + ['tar', '-cf', tmpf.name] + [gi for g, gi in GROUPS], + cwd=args.outputdir) + subprocess.check_call( + ['xz', '-9', tmpf.name], + cwd=args.outputdir) + os.rename(tmpf.name + '.xz', os.path.join(args.outputdir, 'rdeps.tar.xz')) + except Exception as e: + raise e + finally: + # Cleanup: + for f in [tmpf.name, (tmpf.name + '.xz')]: + try: + os.unlink(f) + except FileNotFoundError as e: + pass return 0 -- cgit v1.2.3-18-g5258