40 lines
1.3 KiB
C#
40 lines
1.3 KiB
C#
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using ln.build.commands;
|
|
using ln.logging;
|
|
|
|
namespace ln.build.pipeline
|
|
{
|
|
public class ShellCommand : StageCommand
|
|
{
|
|
public event CommandExitedDelegate OnCommandExited;
|
|
|
|
public CommandRunner CommandRunner { get; }
|
|
|
|
public ShellCommand(string filename,params CommandRunner.Argument[] arguments)
|
|
:base("SH")
|
|
{
|
|
CommandRunner = new CommandRunner("/bin/bash", "-c"){ Throw = CRThrow.NEVER, };
|
|
CommandRunner.AddArguments(arguments);
|
|
}
|
|
public ShellCommand(string cmdline)
|
|
:base("SH")
|
|
{
|
|
CommandRunner = new CommandRunner("/bin/bash", "-c", string.Format("\"{0}\"",cmdline)){ Throw = CRThrow.NEVER, };
|
|
}
|
|
|
|
public override void Run(Stage stage)
|
|
{
|
|
MemoryStream logStream = new MemoryStream();
|
|
int result = CommandRunner.Run(stage.CommandEnvironment, logStream);
|
|
stage.CommandEnvironment.Logger.Log(LogLevel.INFO, "command output:\n{0}", Encoding.UTF8.GetString(logStream.ToArray()));
|
|
stage.CommandEnvironment.Logger.Log(LogLevel.INFO, "command exit code: {0}", result);
|
|
if (result != 0)
|
|
throw new Exception(String.Format("command exited with code {0} [0x{0:x}]", result));
|
|
}
|
|
}
|
|
|
|
} |