def remove_cache(): '''remove our cache dirs''' conf = Config(upgradeconf) cleanup = conf.get("cleanup", "dirs") or '' cleanup = cleanup.split(';') cleanup += [cachedir, packagedir] # just to be sure for d in cleanup: log.info("removing %s", d) rm_rf(d)
def link_pkgs(pkgs): '''link the named pkgs into packagedir, overwriting existing files. also removes any .rpm files in packagedir that aren't in pkgs. finally, write a list of packages to upgrade and a list of dirs to clean up after successful upgrade.''' log.info("linking required packages into packagedir") log.info("packagedir = %s", packagedir) mkdir_p(packagedir) pkgbasenames = set() for pkg in pkgs: pkgpath = pkg.localPkg() if pkg.remote_url.startswith("file://"): pkgbasename = "media/%s" % pkg.relativepath pkgbasenames.add(pkgbasename) continue if not os.path.exists(pkgpath): log.warning("%s missing", pkgpath) continue pkgbasename = os.path.basename(pkgpath) pkgbasenames.add(pkgbasename) target = os.path.join(packagedir, pkgbasename) if os.path.exists(target) and os.lstat(pkgpath) == os.lstat(target): log.info("%s already in packagedir", pkgbasename) continue else: if os.path.isdir(target): log.info("deleting weirdo directory named %s", pkgbasename) rm_rf(target) elif os.path.exists(target): os.remove(target) try: os.link(pkgpath, target) except OSError as e: if e.errno == 18: copy2(pkgpath, target) else: raise # remove spurious / leftover RPMs for f in os.listdir(packagedir): if f.endswith(".rpm") and f not in pkgbasenames: os.remove(os.path.join(packagedir, f)) # write packagelist with open(packagelist, 'w') as outf: outf.writelines(p+'\n' for p in pkgbasenames) # write cleanup data with Config(upgradeconf) as conf: # packagedir should probably be last, since it contains upgradeconf cleanupdirs = [cachedir, packagedir] conf.set("cleanup", "dirs", ';'.join(cleanupdirs))
def misc_cleanup(): log.info("removing symlink %s", upgradelink) rm_f(upgradelink) for d in (upgraderoot, upgrade_target_wants): log.info("removing %s", d) rm_rf(d)