示例#1
0
        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);
        }
示例#2
0
        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);
        }