1# 2# SPDX-License-Identifier: GPL-2.0-only 3# 4 5import bb.compress._pipecompress 6import shutil 7 8 9def open(*args, **kwargs): 10 return bb.compress._pipecompress.open_wrap(ZstdFile, *args, **kwargs) 11 12 13class ZstdFile(bb.compress._pipecompress.PipeFile): 14 def __init__(self, *args, num_threads=1, compresslevel=3, **kwargs): 15 self.num_threads = num_threads 16 self.compresslevel = compresslevel 17 super().__init__(*args, **kwargs) 18 19 def _get_zstd(self): 20 if self.num_threads == 1 or not shutil.which("pzstd"): 21 return ["zstd"] 22 return ["pzstd", "-p", "%d" % self.num_threads] 23 24 def get_compress(self): 25 return self._get_zstd() + ["-c", "-%d" % self.compresslevel] 26 27 def get_decompress(self): 28 return self._get_zstd() + ["-d", "-c"] 29