Innovenergy_trunk/csharp/app/VenusFirmwareCiDaemon/src/Cpio.cs

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;
}
}