1cfcb4484SDaniel P. Berrangé# SPDX-License-Identifier: GPL-2.0-or-later 2cfcb4484SDaniel P. Berrangé# 3cfcb4484SDaniel P. Berrangé# Utilities for python-based QEMU tests 4cfcb4484SDaniel P. Berrangé# 5cfcb4484SDaniel P. Berrangé# Copyright 2024 Red Hat, Inc. 6cfcb4484SDaniel P. Berrangé# 7cfcb4484SDaniel P. Berrangé# Authors: 8cfcb4484SDaniel P. Berrangé# Thomas Huth <thuth@redhat.com> 9cfcb4484SDaniel P. Berrangé 10cfcb4484SDaniel P. Berrangéimport os 11cfcb4484SDaniel P. Berrangéimport subprocess 12cfcb4484SDaniel P. Berrangéimport tarfile 13*379ee839SDaniel P. Berrangéimport zipfile 14cfcb4484SDaniel P. Berrangé 15cfcb4484SDaniel P. Berrangé 16cfcb4484SDaniel P. Berrangédef tar_extract(archive, dest_dir, member=None): 17cfcb4484SDaniel P. Berrangé with tarfile.open(archive) as tf: 18cfcb4484SDaniel P. Berrangé if hasattr(tarfile, 'data_filter'): 19cfcb4484SDaniel P. Berrangé tf.extraction_filter = getattr(tarfile, 'data_filter', 20cfcb4484SDaniel P. Berrangé (lambda member, path: member)) 21cfcb4484SDaniel P. Berrangé if member: 22cfcb4484SDaniel P. Berrangé tf.extract(member=member, path=dest_dir) 23cfcb4484SDaniel P. Berrangé else: 24cfcb4484SDaniel P. Berrangé tf.extractall(path=dest_dir) 25cfcb4484SDaniel P. Berrangé 26cfcb4484SDaniel P. Berrangédef cpio_extract(cpio_handle, output_path): 27cfcb4484SDaniel P. Berrangé cwd = os.getcwd() 28cfcb4484SDaniel P. Berrangé os.chdir(output_path) 29cfcb4484SDaniel P. Berrangé subprocess.run(['cpio', '-i'], 30cfcb4484SDaniel P. Berrangé input=cpio_handle.read(), 31cfcb4484SDaniel P. Berrangé stderr=subprocess.DEVNULL) 32cfcb4484SDaniel P. Berrangé os.chdir(cwd) 33*379ee839SDaniel P. Berrangé 34*379ee839SDaniel P. Berrangédef zip_extract(archive, dest_dir, member=None): 35*379ee839SDaniel P. Berrangé with zipfile.ZipFile(archive, 'r') as zf: 36*379ee839SDaniel P. Berrangé if member: 37*379ee839SDaniel P. Berrangé zf.extract(member=member, path=dest_dir) 38*379ee839SDaniel P. Berrangé else: 39*379ee839SDaniel P. Berrangé zf.extractall(path=dest_dir) 40