summaryrefslogtreecommitdiff
path: root/poky/scripts/lib/wic/engine.py
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@fuzziesquirrel.com>2019-11-25 17:41:34 +0300
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2019-11-25 17:41:44 +0300
commit6dbb316ab9052d4dbf158377e1ffe36f205d5477 (patch)
tree721c5dfa7946f5188240620aa7d138f8a688e9f7 /poky/scripts/lib/wic/engine.py
parent8410d61f39efb52ffab1dc89efb05ca3ae837907 (diff)
downloadopenbmc-6dbb316ab9052d4dbf158377e1ffe36f205d5477.tar.xz
poky: subtree update:a616ffebdc..9052e5b32a
Adrian Bunk (1): bind: Whitelist CVE-2019-6470 Alexander Kanavin (13): python: update to 2.7.17 tiff: update to 4.1.0 librepo: upgrade 1.10.6 -> 1.11.0 btrfs-tools: upgrade 5.3 -> 5.3.1 psmisc: update to 23.3 libxslt: update to 1.1.34 Revert "devtool/standard.py: Not filtering devtool workspace for devtool finish" mpg123: upgrade 1.25.12 -> 1.25.13 vala: upgrade 0.46.3 -> 0.46.4 sysstat: upstream version check is working again cairo: the component is dual licensed selftest: check that 'devtool upgrade' correctly drops backported patches runqemu: add options that enable virgl with the SDL frontend Alistair Francis (1): mesa: Upgrade to 19.2.4 Anuj Mittal (7): boost: fix build for x32 rng-tools: upgrade 6.7 -> 6.8 harfbuzz: upgrade 2.6.1 -> 2.6.4 libsolv: upgrade 0.7.6 -> 0.7.8 sqlite3: upgrade 3.30.0 -> 3.30.1 stress-ng: upgrade 0.10.08 -> 0.10.10 glib-2.0: upgrade 2.62.1 -> 2.62.2 Armin Kuster (9): oeqa/manual/bsp-hw: remove rpm -ivh test oeqa/runtime/boot: add reboot test oeqa/manual/bsp-hw: remove reboot test oeqa/manual/bsp-hw: move storage tests to runtime oeqa/manual/bsp-hw: remove usb and SDmicro tests manual/bsd-hw: remove bash tests oeqa/manual/compliance-test: remove crashme tests oeqa/manual/compliance-test: move crashme to runtime /oeqa/manual/compliance-test: remove obsolete test Chee Yang Lee (2): wic: rm with -r flag support selftest/wic: test wic rm with -r flag Denys Dmytriyenko (1): distro_features_check: expand with MACHINE_FEATURES and COMBINED_FEATURES, rename Kai Kang (1): systemd: remove ${PN}-xorg-xinitrc Khem Raj (1): webkitgtk: Remove clang specific option Paul Barker (1): cdrtools-native: Don't set uid/gid during install Paul Eggleton (1): devtool: fix devtool upgrade with reproducible_builds class Richard Purdie (10): oeqa/devtool: Avoid unbound variable errors recipetool/create: Fix to work with reproducible_builds opkg: Add upstream fixes for empty packages opkg-utils: Fix silent empty/broken opkg package creation core-image-full-cmdline: Add less bitbake: fetch2/clearcase: Fix warnings from python 3.8 bitbake: runqueue: Fix hash equivalence duplicate tasks running sanity: Add check for tar older than 1.28 oeqa/selftest/sstatetests: Ensure we don't use hashequiv for sstatesigs tests package_ipk: Remove pointless comment to trigger rebuild Ross Burton (8): cve-update-db-native: don't hardcode the database name cve-update-db-native: add an index on the CVE ID column cve-update-db-native: clean up proxy handling cve-check: rewrite look to fix false negatives cve-check: neaten get_cve_info cve-check: fetch CVE data once at a time instead of in a single call bitbake: tests: add test for the hashing functions bitbake: utils: also use mmap for SHA256 and SHA1, for performance Yi Zhao (1): bitbake: contrib/vim/indent/bitbake.vim: move it to correct directory Change-Id: I526155f21145180c764252a2ae5bfba33def10ff Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'poky/scripts/lib/wic/engine.py')
-rw-r--r--poky/scripts/lib/wic/engine.py62
1 files changed, 45 insertions, 17 deletions
diff --git a/poky/scripts/lib/wic/engine.py b/poky/scripts/lib/wic/engine.py
index 18776fa8a..7e6620747 100644
--- a/poky/scripts/lib/wic/engine.py
+++ b/poky/scripts/lib/wic/engine.py
@@ -19,6 +19,7 @@ import os
import tempfile
import json
import subprocess
+import re
from collections import namedtuple, OrderedDict
from distutils.spawn import find_executable
@@ -335,25 +336,52 @@ class Disk:
exec_cmd(cmd, as_shell=True)
self._put_part_image(pnum)
- def remove(self, pnum, path):
+ def remove_ext(self, pnum, path, recursive):
+ """
+ Remove files/dirs and their contents from the partition.
+ This only applies to ext* partition.
+ """
+ abs_path = re.sub('\/\/+', '/', path)
+ cmd = "{} {} -wR 'rm \"{}\"'".format(self.debugfs,
+ self._get_part_image(pnum),
+ abs_path)
+ out = exec_cmd(cmd , as_shell=True)
+ for line in out.splitlines():
+ if line.startswith("rm:"):
+ if "file is a directory" in line:
+ if recursive:
+ # loop through content and delete them one by one if
+ # flaged with -r
+ subdirs = iter(self.dir(pnum, abs_path).splitlines())
+ next(subdirs)
+ for subdir in subdirs:
+ dir = subdir.split(':')[1].split(" ", 1)[1]
+ if not dir == "." and not dir == "..":
+ self.remove_ext(pnum, "%s/%s" % (abs_path, dir), recursive)
+
+ rmdir_out = exec_cmd("{} {} -wR 'rmdir \"{}\"'".format(self.debugfs,
+ self._get_part_image(pnum),
+ abs_path.rstrip('/'))
+ , as_shell=True)
+
+ for rmdir_line in rmdir_out.splitlines():
+ if "directory not empty" in rmdir_line:
+ raise WicError("Could not complete operation: \n%s \n"
+ "use -r to remove non-empty directory" % rmdir_line)
+ if rmdir_line.startswith("rmdir:"):
+ raise WicError("Could not complete operation: \n%s "
+ "\n%s" % (str(line), rmdir_line))
+
+ else:
+ raise WicError("Could not complete operation: \n%s "
+ "\nUnable to remove %s" % (str(line), abs_path))
+
+ def remove(self, pnum, path, recursive):
"""Remove files/dirs from the partition."""
partimg = self._get_part_image(pnum)
if self.partitions[pnum].fstype.startswith('ext'):
- cmd = "{} {} -wR 'rm {}'".format(self.debugfs,
- self._get_part_image(pnum),
- path)
- out = exec_cmd(cmd , as_shell=True)
- for line in out.splitlines():
- if line.startswith("rm:"):
- if "file is a directory" in line:
- # Try rmdir to see if this is an empty directory. This won't delete
- # any non empty directory so let user know about any error that this might
- # generate.
- print(exec_cmd("{} {} -wR 'rmdir {}'".format(self.debugfs,
- self._get_part_image(pnum),
- path), as_shell=True))
- else:
- raise WicError("Could not complete operation: wic %s" % str(line))
+ self.remove_ext(pnum, path, recursive)
+
else: # fat
cmd = "{} -i {} ::{}".format(self.mdel, partimg, path)
try:
@@ -535,7 +563,7 @@ def wic_rm(args, native_sysroot):
partitioned image.
"""
disk = Disk(args.path.image, native_sysroot)
- disk.remove(args.path.part, args.path.path)
+ disk.remove(args.path.part, args.path.path, args.recursive_delete)
def wic_write(args, native_sysroot):
"""