X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=tpkg;h=34c8ff3b70be44cab0c05f2184d2bb267105d433;hb=93be9605bde5853cbf4b48d279ba885cf3c76454;hp=319d2482b831d51c8ef2a921863dedcc4904e053;hpb=215990533d5eccc9e8a8b571114ea6e1925b4900;p=tpkg.git diff --git a/tpkg b/tpkg index 319d248..34c8ff3 100755 --- a/tpkg +++ b/tpkg @@ -69,7 +69,7 @@ class prefix(object): def env(self): if self._env is None: if not os.path.isdir(self.envdir): - sys.stderr.write("tpkg: creatings %s...\n" % (self.envdir)) + sys.stderr.write("tpkg: creating %s...\n" % (self.envdir)) os.makedirs(self.envdir) env = bd.DBEnv() env.set_lk_detect(bd.DB_LOCK_RANDOM) @@ -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):