using CliWrap; using InnovEnergy.Lib.Utils; using static InnovEnergy.Server.FirmwareCiDaemon.ExitException; using static InnovEnergy.Server.FirmwareCiDaemon.Logger; namespace InnovEnergy.Server.FirmwareCiDaemon; public static class Cpio { public static void Write(String cpioDir, String swuFile) { var swuFileName = Path.GetFileName(swuFile); Log($"writing {swuFileName}"); // ls | cpio -o -H crc > "../$swu" 2>/dev/null var ls = Cli .Wrap("ls") .WithWorkingDirectory(cpioDir); var cpio = Cli .Wrap("cpio") .WithArguments("-o -H crc") .WithStandardOutputPipe(PipeTarget.ToFile(swuFile)) .WithWorkingDirectory(cpioDir); var lsCpio = (ls | cpio).ExecuteAsync().Task.Result; if (lsCpio.ExitCode != 0) Exit($"Failed to write {swuFileName}"); } public static Disposable Extract(String swuFile) { Log($"extracting {Path.GetFileName(swuFile)}"); var cpioDir = FileSystem.CreateTmpDir(); var cpio = Cli .Wrap("cpio") .WithArguments("-id") .WithStandardInputPipe(PipeSource.FromFile(swuFile)) .WithWorkingDirectory(cpioDir) .ExecuteSync(); if (cpio.exitCode != 0) { cpioDir.Dispose(); Exit("Failed to extract swu"); } return cpioDir; } }