From: Fredrik Tolf Date: Sun, 13 Jan 2019 01:56:44 +0000 (+0100) Subject: Ensure tpkg-new files are removed on errors. X-Git-Url: http://git.dolda2000.com/gitweb/?a=commitdiff_plain;h=93be9605bde5853cbf4b48d279ba885cf3c76454;p=tpkg.git Ensure tpkg-new files are removed on errors. --- diff --git a/tpkg b/tpkg index 95623f0..34c8ff3 100755 --- a/tpkg +++ b/tpkg @@ -255,11 +255,18 @@ def install(pfx, pkg, pkgname): os.makedirs(tpdir) tmpp = tp + ".tpkg-new" sb = fl.stat() - with open(tmpp, "wb") as ofp: - os.fchmod(ofp.fileno(), sb.st_mode & 0o7777) - with fl.open() as ifp: - dig = copy(ofp, ifp) - pfx.regfile(fl.path, pkgname, dig) + try: + with open(tmpp, "wb") as ofp: + os.fchmod(ofp.fileno(), sb.st_mode & 0o7777) + with fl.open() as ifp: + dig = copy(ofp, ifp) + pfx.regfile(fl.path, pkgname, dig) + except: + try: + os.unlink(tmpp) + except FileNotFoundError: + pass + raise os.rename(tmpp, tp) os.utime(tp, ns=(time.time() * 1e9, sb.st_mtime * 1e9))