X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=tpkg;h=34c8ff3b70be44cab0c05f2184d2bb267105d433;hb=93be9605bde5853cbf4b48d279ba885cf3c76454;hp=aba1fd0b8e4997280e0e15cd743f882bd4c7af06;hpb=d414a6a0a1a7006075317b1aa1566ab59ac3ef6e;p=tpkg.git diff --git a/tpkg b/tpkg index aba1fd0..34c8ff3 100755 --- a/tpkg +++ b/tpkg @@ -255,13 +255,20 @@ 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(), sb.st_mtime)) + os.utime(tp, ns=(time.time() * 1e9, sb.st_mtime * 1e9)) def uninstall(pfx, pkg): for fn in pfx.pkgfiles(pkg):