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);
 }
Exemple #2
0
        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();
                }
            }
        }
Exemple #3
0
        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.");
        }