public void LogErrorFromException(Exception ex, string file, int lineNumber, int linePosition) { _exceptions.Add(ex); _console.Write("ERROR "); WriteFile(file, lineNumber, linePosition); _console.WriteLine(ex.Message); }
public async static Task <int> ExecuteAsync <T>(T options, Func <ConsoleTask, Task> func, Action <ConsoleTask> config = null) { var task = new ConsoleTask(); config?.Invoke(task); var verb = options.GetType().GetCustomAttributes(typeof(VerbAttribute), true) .OfType <VerbAttribute>() .FirstOrDefault() ?.Name ?? "Task"; verb = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(verb); try { task.LogWriter?.WriteLine(Parser.Default.FormatCommandLine(options)); task.LogWriter?.WriteLine(); await func.Invoke(task); task.WriteLine(); task.WriteLine(verb + " succeeded"); return(0); } catch (Exception ex) { var flat = ex; if (ex is AggregateException agg) { flat = agg.Flatten(); } task.LogWriter?.WriteLine(); task.LogWriter?.WriteLine(); var errorOutput = task.LogWriter; if (errorOutput == Console.Out) { errorOutput = Console.Error; } errorOutput?.WriteLine(@"{0:hh\:mm\:ss} {1} failed.", task.Elapsed, verb); errorOutput?.WriteLine(); errorOutput?.WriteLine(flat.ToString()); return(-1); } finally { if (task.LogWriter != null && task.LogWriter != Console.Out) { task.LogWriter.Dispose(); } } }
public static void WritePackage(ConsoleTask console, InstallScript script, string output, bool multipleDirectories, bool cleanOutput) { multipleDirectories = multipleDirectories || string.Equals(Path.GetExtension(output), ".mf", StringComparison.OrdinalIgnoreCase); if (cleanOutput) { console.Write("Cleaning output... "); if (multipleDirectories) { var dir = new DirectoryInfo(Path.GetDirectoryName(output)); if (dir.Exists) { Parallel.ForEach(dir.EnumerateFileSystemInfos(), fs => { if (fs is DirectoryInfo di) { di.Delete(true); } else { fs.Delete(); } }); } else { dir.Create(); } } else { File.Delete(output); } console.WriteLine("Done."); } console.Write("Writing package... "); var outputDir = Path.GetDirectoryName(output); if (!Directory.Exists(outputDir)) { Directory.CreateDirectory(outputDir); } switch (Path.GetExtension(output).ToLowerInvariant()) { case ".mf": var manifest = new ManifestFolder(output); manifest.Write(script); break; case ".innpkg": if (multipleDirectories) { using (var pkgFolder = new InnovatorPackageFolder(output)) pkgFolder.Write(script); } else { if (File.Exists(output)) { File.Delete(output); } using (var pkgFile = new InnovatorPackageFile(output)) pkgFile.Write(script); } break; default: throw new NotSupportedException("Output file type is not supported"); } console.WriteLine("Done."); }