From f7fa7ae1a91a6a6a4fdb2ee6477e5f8a8bceb8b6 Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Thu, 7 Sep 2017 19:58:19 +0000 Subject: [PATCH] Fix #524: Init zapped the previous work contents (#530) Also add more comments to the zap function. --- pmb/chroot/zap.py | 22 ++++++++++++++++++---- pmb/config/init.py | 2 ++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/pmb/chroot/zap.py b/pmb/chroot/zap.py index a94b1c61..27638354 100644 --- a/pmb/chroot/zap.py +++ b/pmb/chroot/zap.py @@ -25,20 +25,32 @@ import pmb.helpers.run def zap(args, confirm=True, packages=False, http=False, mismatch_bins=False): + """ + Shutdown everything inside the chroots (e.g. distccd, adb), umount + everything and then safely remove folders from the work-directory. + + :arg packages: Remove *all* self-compiled packages (!) + :arg http: Clear the http cache (used e.g. for the initial apk download) + :arg mismatch_bins: Remove the packages, that have a different version + compared to what is in the abuilds folder. + + NOTE: This function gets called in pmb/config/init.py, with only args.work + and args.device set! + """ pmb.chroot.shutdown(args) + + # Deletion patterns for folders inside args.work patterns = [ "chroot_native", "chroot_buildroot_*", "chroot_rootfs_*", ] - - # Only ask for removal, if the user specificed the extra '-p' switch. - # Deleting the packages by accident is really annoying. if packages: patterns += ["packages"] if http: patterns += ["cache_http"] + # Delete everything matching the patterns for pattern in patterns: pattern = os.path.realpath(args.work + "/" + pattern) matches = glob.glob(pattern) @@ -46,9 +58,9 @@ def zap(args, confirm=True, packages=False, http=False, mismatch_bins=False): if not confirm or pmb.helpers.cli.confirm(args, "Remove " + match + "?"): pmb.helpers.run.root(args, ["rm", "-rf", match]) + # Delete packages with a different version compared to aports, then re-index if mismatch_bins: binaries(args) - # Re-index repos since apks may have been removed pmb.build.other.index_repo(args) @@ -61,6 +73,7 @@ def binaries(args): bin_pkgname = bin_apks[bin_apk]["pkgname"] bin_version = bin_apks[bin_apk]["version"] bin_apk_path = arch_pkg_path + "/" + bin_pkgname + "-" + bin_version + ".apk" + # Do not fail if unable to find aport aport = pmb.build.other.find_aport(args, bin_pkgname, False) if not aport: @@ -68,6 +81,7 @@ def binaries(args): continue apkbuild = pmb.parse.apkbuild(args, aport + "/APKBUILD") aport_version = apkbuild["pkgver"] + "-r" + apkbuild["pkgrel"] + # Clear out any binary apks that do not match what is in aports if pmb.parse.version.compare(bin_version, aport_version) and os.path.exists(bin_apk_path): logging.info("Remove mismatched binary package (aports version: " + diff --git a/pmb/config/init.py b/pmb/config/init.py index c6bd3b36..7bcb0e90 100644 --- a/pmb/config/init.py +++ b/pmb/config/init.py @@ -129,6 +129,8 @@ def init(args): # Save config pmb.config.save(args, cfg) + # Zap existing chroots + setattr(args, "work", cfg["pmbootstrap"]["work"]) if (device_exists and len(glob.glob(args.work + "/chroot_*")) and pmb.helpers.cli.confirm(args, "Zap existing chroots to apply configuration?", default=True)):