in shim/shim.py [0:0]
def _extract_jex_file_if_exists(path: Path, target: str, build_directory: Path) -> Path:
jex_extract_directory: Path = Path(build_directory) / "jex"
def run_unzip_command(command: List[str]) -> Path:
output = subprocess.run(command, stderr=subprocess.PIPE)
if output.returncode != 0:
stderr = output.stderr.decode()
if (
command[0] == "unzip"
and output.returncode == 1
and "extra bytes at beginning or within zipfile" in stderr
):
# This warning is fine to ignore, because *.jar files have been properly extracted
LOG.warning(f"`unzip` warning: {stderr}")
else:
command_string = " ".join(command)
raise ExtractJexException(
f"Unable to extract binary file `{path}` with command `{command_string}`:\n{stderr}"
)
jar_file_path = jex_extract_directory / (
target.rsplit(":", maxsplit=1)[1] + ".jar"
)
if jar_file_path.exists():
return jar_file_path
else:
raise ClientError(
f"Could not find jar file `{path}` in `{jex_extract_directory}`."
)
# If the target is java_binary, then the output is a JEX file
if path.suffix != ".jex":
return path
# Try to extract *.jex files with various unzip tools, until one of them succeeds. See D22579374 for why doing this
try:
return run_unzip_command(
["unsquashfs", "-d", str(jex_extract_directory), "-o", "4096", str(path)]
)
except ExtractJexException:
LOG.warning(f"Running `unsquashfs` on file `{path}` failed.")
LOG.warning(f"Trying to extract file `{path}` with `unzip`.")
return run_unzip_command(["unzip", "-d", str(jex_extract_directory), str(path)])