Multi-Platform Package Manager for Stable Diffusion
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.2 KiB

using System.Diagnostics;
using System.Text;
using StabilityMatrix.Core.Processes;
namespace StabilityMatrix.Core.Exceptions;
/// <summary>
/// Exception that is thrown when a process fails.
/// </summary>
public class ProcessException : Exception
{
public ProcessResult? ProcessResult { get; }
public ProcessException(string message)
: base(message) { }
public ProcessException(ProcessResult processResult)
: base(
$"Process {processResult.ProcessName} exited with code {processResult.ExitCode}. "
+ $"{{StdOut = {processResult.StandardOutput}, StdErr = {processResult.StandardError}}}"
)
{
ProcessResult = processResult;
}
public static void ThrowIfNonZeroExitCode(ProcessResult processResult)
{
if (processResult.IsSuccessExitCode)
return;
throw new ProcessException(processResult);
}
public static void ThrowIfNonZeroExitCode(Process process, string output)
{
if (!process.HasExited || process.ExitCode == 0)
return;
throw new ProcessException(
new ProcessResult
{
ProcessName = process.StartInfo.FileName,
ExitCode = process.ExitCode,
StandardOutput = output
}
);
}
public static void ThrowIfNonZeroExitCode(Process process, StringBuilder outputBuilder)
{
if (!process.HasExited || process.ExitCode == 0)
return;
throw new ProcessException(
new ProcessResult
{
ProcessName = process.StartInfo.FileName,
ExitCode = process.ExitCode,
StandardOutput = outputBuilder.ToString()
}
);
}
public static void ThrowIfNonZeroExitCode(Process process, string stdOut, string stdErr)
{
if (!process.HasExited || process.ExitCode == 0)
return;
throw new ProcessException(
new ProcessResult
{
ProcessName = process.StartInfo.FileName,
ExitCode = process.ExitCode,
StandardOutput = stdOut,
StandardError = stdErr
}
);
}
}