55 lines
1.4 KiB
C#
55 lines
1.4 KiB
C#
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<String> 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;
|
|
}
|
|
} |