builder: add zstd support
BUG=b:187789829
TEST=CQ passes
Change-Id: I984236928260356186d9e6e9fd1ade3856e47121
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/dev-util/+/3584466
Reviewed-by: Jaques Clapauch <jaquesc@google.com>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
diff --git a/builder.py b/builder.py
index da77bc9..29d179e 100644
--- a/builder.py
+++ b/builder.py
@@ -81,16 +81,23 @@
excludes = '--anchored ' + ' '.join(masks)
gmerge_dir = os.path.dirname(out_path)
- subprocess.check_call(['mkdir', '-p', gmerge_dir])
+ os.makedirs(gmerge_dir, mode=0o755, exist_ok=True)
+
+ with open(in_path, 'rb') as f:
+ data = f.read(3)
+ if data == b'BZh':
+ decomp = 'lbzip2 -dc'
+ else:
+ decomp = 'zstd -dcf'
tmpd = tempfile.mkdtemp()
try:
# Extract package to temporary directory (excluding masked files).
- cmd = 'lbzip2 -dc %s | sudo tar -x -C %s %s --wildcards'
+ cmd = f'{decomp} %s | sudo tar -x -C %s %s --wildcards'
subprocess.check_call(cmd % (in_path, tmpd, excludes), shell=True)
# Build filtered version of package.
- cmd = 'sudo tar -c --use-compress-program=lbzip2 -C %s . > %s'
+ cmd = 'sudo tar -c --use-compress-program=zstd -C %s . > %s'
subprocess.check_call(cmd % (tmpd, out_path), shell=True)
finally:
subprocess.check_call(['sudo', 'rm', '-rf', tmpd])