private static int Main(string[] args) { int exitCode = (int)ExitCode.Error; try { Settings settings = null; try { settings = Settings.Create(args); if (settings.ShowHelp && IsShowMarkdownHelpIncluded(args)) { Console.WriteLine(HelpGenerator.Generate(Resources.HelpMarkdownTemplate, settings)); } else if (settings.ShowHelp) { Console.WriteLine(HelpGenerator.Generate(Resources.HelpTextTemplate, settings)); } else { Core.AutoRest.Generate(settings); } } catch (CodeGenerationException) { // Do not add the CodeGenerationException again. Will be written in finally block } catch (Exception exception) { Logger.LogError(exception, exception.Message); } finally { if ( Logger.Entries.Any( e => e.Severity == LogEntrySeverity.Error || e.Severity == LogEntrySeverity.Fatal)) { Console.ForegroundColor = ConsoleColor.Red; } else if (Logger.Entries.Any(e => e.Severity == LogEntrySeverity.Warning)) { Console.ForegroundColor = ConsoleColor.Yellow; } if (settings != null && !settings.ShowHelp) { if (Logger.Entries.Any(e => e.Severity == LogEntrySeverity.Error || e.Severity == LogEntrySeverity.Fatal)) { if (!string.Equals("None", settings.CodeGenerator, StringComparison.OrdinalIgnoreCase)) { Console.WriteLine(Resources.GenerationFailed); Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "{0} {1}", typeof(Program).Assembly.ManifestModule.Name, string.Join(" ", args))); } } else { if (!string.Equals("None", settings.CodeGenerator, StringComparison.OrdinalIgnoreCase)) { Console.WriteLine(Resources.GenerationComplete, settings.CodeGenerator, settings.Input); } exitCode = (int)ExitCode.Success; } } // Write all messages to Console var validationLevel = settings?.ValidationLevel ?? LogEntrySeverity.Error; var shouldShowVerbose = settings?.Verbose ?? false; var shouldShowDebug = settings?.Debug ?? false; foreach (var severity in (LogEntrySeverity[])Enum.GetValues(typeof(LogEntrySeverity))) { if (severity == LogEntrySeverity.Debug && !shouldShowDebug) { continue; } // Determine if this severity of messages should be treated as errors bool isErrorMessage = severity >= validationLevel; // Set the output stream based on if the severity should be an error or not var outputStream = isErrorMessage ? Console.Error : Console.Out; // If it's an error level severity or we want to see all output, write to console if (isErrorMessage || shouldShowVerbose) { // write out the message Logger.WriteMessages(outputStream, severity, shouldShowVerbose, severity.GetColorForSeverity()); } } Console.ResetColor(); } } catch (Exception exception) { Console.Error.WriteLine(Resources.ConsoleErrorMessage, exception.Message); Console.Error.WriteLine(Resources.ConsoleErrorStackTrace, exception.StackTrace); } return(exitCode); }
private static int Main(string[] args) { int exitCode = (int)ExitCode.Error; try { using (NewContext) { bool generationFailed = false; Settings settings = null; var jsonValidationLogListener = new JsonValidationLogListener(); try { settings = Settings.Create(args); // set up logging if (settings.JsonValidationMessages) { Logger.Instance.AddListener(jsonValidationLogListener); } else { Logger.Instance.AddListener(new ConsoleLogListener( settings.Debug ? Category.Debug : Category.Warning, settings.ValidationLevel, settings.Verbose)); } Logger.Instance.AddListener(new SignalingLogListener(Category.Error, _ => generationFailed = true)); // internal preprocesor if (settings.Preprocessor) { Console.Write(InternalPreprocessor(settings.FileSystemInput.ReadAllText(settings.Input))); return(0); } Settings.AutoRestFolder = Path.GetDirectoryName(typeof(Program).GetAssembly().Location); // determine some reasonable default namespace if (settings.Namespace == null) { if (settings.Input != null) { settings.Namespace = Path.GetFileNameWithoutExtension(settings.Input); } else { settings.Namespace = "default"; } } // help requested? string defCodeGen = (args.Where(arg => arg.ToLowerInvariant().Contains("codegenerator")).IsNullOrEmpty()) ? "" : settings.CodeGenerator; if (settings.ShowHelp) { settings.CodeGenerator = defCodeGen; Console.WriteLine(HelpGenerator.Generate(IsShowMarkdownHelpIncluded(args) ? Resources.HelpMarkdownTemplate : Resources.HelpTextTemplate, settings)); return(0); } // comparison? if (!string.IsNullOrEmpty(settings.Previous)) { AutoRestController.Compare(); return(0); } // main pipeline AutoRestController.Generate(); if (!Settings.Instance.JsonValidationMessages && !Settings.Instance.DisableSimplifier && Settings.Instance.CodeGenerator.IndexOf("csharp", StringComparison.OrdinalIgnoreCase) > -1) { new CSharpSimplifier().Run().ConfigureAwait(false).GetAwaiter().GetResult(); } if (!settings.JsonValidationMessages) { Settings.Instance.FileSystemOutput.CommitToDisk(Settings.Instance.OutputFileName == null ? Settings.Instance.OutputDirectory : Path.GetDirectoryName(Settings.Instance.OutputFileName)); } } catch (Exception exception) { Logger.Instance.Log(Category.Error, exception.Message); } finally { if (settings != null && settings.JsonValidationMessages) { Console.WriteLine(jsonValidationLogListener.GetValidationMessagesAsJson()); } if (settings != null && !settings.ShowHelp) { if (generationFailed) { if (!"None".EqualsIgnoreCase(settings.CodeGenerator)) { Logger.Instance.Log(Category.Error, Resources.GenerationFailed); Logger.Instance.Log(Category.Error, "{0} {1}", typeof(Program).GetAssembly().ManifestModule.Name, string.Join(" ", args)); } } else { if (!"None".EqualsIgnoreCase(settings.CodeGenerator)) { Logger.Instance.Log(Category.Info, Resources.GenerationComplete, settings.CodeGenerator, settings.Input); } exitCode = (int)ExitCode.Success; } } } } } catch (Exception exception) { Console.Error.WriteLine(Resources.ConsoleErrorMessage, exception.Message); Console.Error.WriteLine(Resources.ConsoleErrorStackTrace, exception.StackTrace); } return(exitCode); }