public MainController(IHostingEnvironment env, RunFlags runFlags) { ConsoleHelper.Logger.SetWorkingFolder(env.ContentRootPath); _env = env; _runFlags = runFlags; _completedSuitesFileName = Path.Combine(_env.ContentRootPath, "testing/CompletedSuites.txt"); }
public RunRecord(int flags, byte[] data) { this.flags = (RunFlags)flags; List <string> items = Helpers.SplitString(data, true); filename = items[0]; args = items[1]; workingDir = items[2]; }
public string GetOutput(string filename, string args, string workingDir, RunFlags flags, string input, out int exitCode) { var proc = CreateProcess(filename, args, workingDir); var list = new List <string>(); Log.VeryVerbose(GetCommand(proc.StartInfo.FileName, proc.StartInfo.Arguments, workingDir), ConsoleColor.Cyan); proc.OutputDataReceived += (s, e) => { if (e.Data != null) { list.Add(e.Data); } }; proc.ErrorDataReceived += (s, e) => { if (e.Data != null) { list.Add(e.Data); } }; lock (Processes) Processes.Add(proc); using (new ProcessRunner(proc, input)) { proc.WaitForExit(); lock (Processes) Processes.Remove(proc); var output = string.Join("\n", list); if (proc.ExitCode == 0 || flags.HasFlag(RunFlags.NoThrow)) { if (!flags.HasFlag(RunFlags.NoOutput)) { Log.Verbose(output); } if (proc.ExitCode != 0) { Log.VeryVerbose("(exit code: " + proc.ExitCode + ")\n", ConsoleColor.Gray); } exitCode = proc.ExitCode; return(output); } Log.OutWriter.Write(output); throw new InvalidOperationException("Process " + proc.ProcessName.Quote() + " exited with code " + proc.ExitCode); } }
public int Run(string filename, string args, string workingDir, RunFlags flags = 0, string input = null) { try { return(Start(filename, args, workingDir, flags, input).Result); } catch (Exception e) { Log.Error("Exception while running " + filename.Quote() + ": " + e.Message); Log.Trace(e); return(0xFF); } }
public async Task <int> Start(string filename, string args, string workingDir, RunFlags flags = 0, string input = null, CancellationToken ct = default(CancellationToken)) { var level = flags.HasFlag(RunFlags.Compact) ? LogLevel.Verbose : LogLevel.Compact; var output = new StringBuilder(); var exitCode = await Start(filename, args, workingDir, (s, e) => { if (e.Data == null) { return; } if (level == LogLevel.Verbose && !Log.IsVerbose) { output.AppendLine(e.Data); } if (!flags.HasFlag(RunFlags.Colors)) { Log.WriteLine(level, e.Data); } else if (e.Data.Length > 2 && e.Data[0] == '#' && e.Data[1] == '#') { Log.WriteLine(e.Data.Substring(2).TrimStart(), ConsoleColor.DarkGreen); } else if (e.Data.IndexOf("error:", StringComparison.InvariantCultureIgnoreCase) != -1 || e.Data.IndexOf(": error", StringComparison.InvariantCultureIgnoreCase) != -1 || e.Data.IndexOf(": fatal error", StringComparison.InvariantCultureIgnoreCase) != -1 || e.Data.StartsWith("npm ERR!")) { Log.WriteErrorLine(e.Data.Trim(), ConsoleColor.Red); } else if (e.Data.IndexOf("warning:", StringComparison.InvariantCultureIgnoreCase) != -1 || e.Data.IndexOf(": warning", StringComparison.InvariantCultureIgnoreCase) != -1 || e.Data.StartsWith("npm WARN")) { Log.WriteErrorLine(e.Data.Trim(), ConsoleColor.Yellow); } else if (e.Data.StartsWith("Downloading ", StringComparison.InvariantCultureIgnoreCase) || e.Data.StartsWith("Download ", StringComparison.InvariantCultureIgnoreCase)) { Log.WriteLine(e.Data, ConsoleColor.Blue); } else { Log.WriteLine(level, e.Data); } }, (s, e) => { if (e.Data == null) { return; } if (!flags.HasFlag(RunFlags.Colors)) { Log.WriteErrorLine(e.Data); } else if (e.Data.IndexOf("error:", StringComparison.InvariantCultureIgnoreCase) != -1) { Log.WriteErrorLine(e.Data, ConsoleColor.Red); } else { Log.WriteErrorLine(e.Data, ConsoleColor.Yellow); } }, input, ct).ConfigureAwait(false); if (exitCode != 0 && output.Length > 0) { Log.WriteLine(output.ToString().Trim()); } return(exitCode); }
public Task <int> Start(string filename, string args = "", RunFlags flags = 0, string input = null, CancellationToken ct = default(CancellationToken)) { return(Start(filename, args, null, flags, input, ct)); }
public int Run(string filename, string args = "", RunFlags flags = 0, string input = null) { return(Run(filename, args, null, flags, input)); }
public string GetOutput(string filename, string args, string workingDir, RunFlags flags = 0, string input = null) { int exitCode; return(GetOutput(filename, args, workingDir, flags, input, out exitCode)); }
public MainController(IHostingEnvironment env, RunFlags runFlags) { _env = env; _runFlags = runFlags; }
private void RemoveRunFlag(RunFlags flag) { this.runFlags = (this.runFlags | flag) ^ flag; }
private void AddRunFlag(RunFlags flag) { this.runFlags |= flag; }
private bool CheckRunFlags(RunFlags flag) { return((this.runFlags & flag) == flag); }
private static bool runAgainstObject(object obj, Type objType, string func, Array a, RunFlags flags, out object retVal) { try { BindingFlags bf = BindingFlags.Public | BindingFlags.Default | BindingFlags.IgnoreCase | BindingFlags.FlattenHierarchy; if ((flags & RunFlags.AccessPrivate) != 0) { bf |= BindingFlags.NonPublic; } bool newFlag = (flags & RunFlags.New) != 0; bool propFlag = (flags & RunFlags.Property) != 0; if (newFlag) { if (objType == null) { throw new TypeLoadException("Unknown class '" + func + "'"); } if (propFlag && a != null) { objType = objType.MakeArrayType(a.Length); propFlag = false; } func = objType.FullName; bf |= BindingFlags.CreateInstance; } else { bf |= BindingFlags.InvokeMethod; } if (obj == null && !newFlag) { bf |= BindingFlags.Static; } else { bf |= BindingFlags.Instance; } if (propFlag) { return(evalProperty(obj, objType, bf, func, a, out retVal)); } if (newFlag) { return(evalConstructor(objType, bf, a, out retVal)); } return(evalMethod(obj, objType, bf, func, a, out retVal)); } catch (TargetInvocationException e) { if (e.InnerException != null) { throw e.InnerException; } throw; } }
public MainController(IHostingEnvironment env, RunFlags runFlags) { ConsoleHelper.Logger.SetWorkingFolder(env.ContentRootPath); _env = env; _runFlags = runFlags; }
/// <see cref="RunEntry.Flags"/> public Builder Flags(RunFlags flags) { _run.Flags = flags; return(this); }