private void doTransform()

in plugins/cli/cli-lib/src/main/java/co/elastic/gradle/cli/base/ExtractAndSetExecutableTransform.java [52:97]


    private void doTransform(TransformOutputs outputs) throws IOException {
        File inputFile = getInputArtifact().get().getAsFile();
        String executableName = inputFile.getName()
                .split("\\.transform")[0]
                .replace(".tar.xz", "");

        if (inputFile.getName().contains("tar.xz")) {
            try (TarArchiveInputStream archive = new TarArchiveInputStream(
                    new XZCompressorInputStream(
                            new BufferedInputStream(new FileInputStream(inputFile))
                    ))
            ) {
                TarArchiveEntry entry;
                while ((entry = archive.getNextTarEntry()) != null) {
                    if (entry.isFile() && !List.of("README.txt", "LICENSE.txt").contains(entry.getName())) {
                        final File outputFile = outputs.file(executableName);
                        try (OutputStream out = new BufferedOutputStream(new FileOutputStream(outputFile))) {
                            out.write(IOUtils.toByteArray(archive, entry.getSize()));
                            setExecutableBit(outputFile);
                        }
                    } else {
                        IOUtils.skip(archive, entry.getSize());
                    }
                }
            }
        } else if (inputFile.getName().contains("manifest-tool") && !inputFile.getName().contains("v1")) {
            try (TarArchiveInputStream archive = new TarArchiveInputStream(
                    new GzipCompressorInputStream(
                            new BufferedInputStream(new FileInputStream(inputFile))
                    ))
            ) {
                TarArchiveEntry entry;
                while ((entry = archive.getNextTarEntry()) != null) {
                    final File outputFile = outputs.file(entry.getName());
                    try (OutputStream out = new BufferedOutputStream(new FileOutputStream(outputFile))) {
                        out.write(IOUtils.toByteArray(archive, entry.getSize()));
                    }
                    setExecutableBit(outputFile);
                }
            }
        } else {
            File outputFile = outputs.file(executableName);
            Files.copy(inputFile.toPath(), outputFile.toPath());
            setExecutableBit(outputFile);
        }
    }