X-Git-Url: http://dolda2000.com/gitweb/?p=tpkg.git;a=blobdiff_plain;f=tpkg;fp=tpkg;h=34c8ff3b70be44cab0c05f2184d2bb267105d433;hp=95623f0dd2603e387927825467ce776287ab605c;hb=93be9605bde5853cbf4b48d279ba885cf3c76454;hpb=ffedc67b9b9380a8702c58a3270b8a568d18c266 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))