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)); }
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)); }