Beispiel #1
0
        public virtual ISubCommand Create(string[] args, ISubCommandController controller, SubCommandParseOption option)
        {
            var  parser  = CommandUtility.GetParser(option);
            var  options = Activator.CreateInstance <TOptions>();
            bool parsed  = parser.ParseArguments(args, options);

            if (!parsed && option == SubCommandParseOption.Strict)
            {
                throw new OptionParserException();
            }
            var helpOption = options as ICanPrintHelpMessage;

            if (helpOption != null && helpOption.PrintHelpMessage)
            {
                return(new HelpCommand(GetHelpText()));
            }

            var    buildOption = options as BuildCommandOptions;
            string root        = Path.GetDirectoryName(buildOption?.ConfigFile ?? Directory.GetCurrentDirectory());

            var logOption = options as LogOptions;

            if (logOption != null)
            {
                if (!string.IsNullOrWhiteSpace(logOption.LogFilePath) && Logger.FindAsyncListener(l => l is ReportLogListener) == null)
                {
                    Logger.RegisterAsyncListener(new ReportLogListener(logOption.LogFilePath, logOption.RepoRoot ?? string.Empty, root));
                }

                if (logOption.LogLevel.HasValue)
                {
                    Logger.LogLevelThreshold = logOption.LogLevel.Value;
                }

                Logger.WarningsAsErrors = logOption.WarningsAsErrors;

                if (!string.IsNullOrEmpty(logOption.CorrelationId))
                {
                    if (AmbientContext.CurrentContext == null)
                    {
                        AmbientContext.InitializeAmbientContext(logOption.CorrelationId);
                    }
                }
            }

            return(CreateCommand(options, controller));
        }
Beispiel #2
0
        public virtual ISubCommand Create(string[] args, ISubCommandController controller, SubCommandParseOption option)
        {
            var  parser  = CommandUtility.GetParser(option);
            var  options = Activator.CreateInstance <TOptions>();
            bool parsed  = parser.ParseArguments(args, options);

            if (!parsed && option == SubCommandParseOption.Strict)
            {
                throw new OptionParserException();
            }
            var helpOption = options as ICanPrintHelpMessage;

            if (helpOption != null && helpOption.PrintHelpMessage)
            {
                return(new HelpCommand(GetHelpText()));
            }
            var logOption = options as ILoggable;

            if (logOption != null)
            {
                if (!string.IsNullOrWhiteSpace(logOption.LogFilePath) && Logger.FindListener(l => l is ReportLogListener) == null)
                {
                    if (string.IsNullOrWhiteSpace(logOption.RepoRoot))
                    {
                        Logger.RegisterListener(new ReportLogListener(logOption.LogFilePath, string.Empty));
                    }
                    else
                    {
                        Logger.RegisterListener(new ReportLogListener(logOption.LogFilePath, logOption.RepoRoot));
                    }
                }

                if (logOption.LogLevel.HasValue)
                {
                    Logger.LogLevelThreshold = logOption.LogLevel.Value;
                }
            }

            return(CreateCommand(options, controller));
        }