private static int VerifyOutputArgsRun(CLIAnalyzeCmdOptions options) { Logger logger = Utils.SetupLogging(options, true); WriteOnce.Log = logger; options.Log = logger; //analyze with html format limit checks if (options.OutputFileFormat == "html") { options.OutputFilePath = options.OutputFilePath ?? "output.html"; string extensionCheck = Path.GetExtension(options.OutputFilePath); if (extensionCheck != ".html" && extensionCheck != ".htm") { WriteOnce.Info(MsgHelp.GetString(MsgHelp.ID.ANALYZE_HTML_EXTENSION)); } if (options.AllowDupTags) //fix #183; duplicates results for html format is not supported which causes filedialog issues { WriteOnce.Error(MsgHelp.GetString(MsgHelp.ID.ANALYZE_NODUPLICATES_HTML_FORMAT)); throw new OpException(MsgHelp.GetString(MsgHelp.ID.ANALYZE_NODUPLICATES_HTML_FORMAT)); } if (options.SimpleTagsOnly) //won't work for html that expects full data for UI { WriteOnce.Error(MsgHelp.GetString(MsgHelp.ID.ANALYZE_SIMPLETAGS_HTML_FORMAT)); throw new Exception(MsgHelp.GetString(MsgHelp.ID.ANALYZE_SIMPLETAGS_HTML_FORMAT)); } } CommonOutputChecks((CLICommandOptions)options); return(RunAnalyzeCommand(options)); }
private static int VerifyOutputArgsRun(CLIPackRulesCmdOptions options) { Logger logger = Utils.SetupLogging(options, true); WriteOnce.Log = logger; options.Log = logger; if (options.RepackDefaultRules && !string.IsNullOrEmpty(options.OutputFilePath)) { WriteOnce.Info("output file argument ignored for -d option"); } options.OutputFilePath = options.RepackDefaultRules ? Utils.GetPath(Utils.AppPath.defaultRulesPackedFile) : options.OutputFilePath; if (string.IsNullOrEmpty(options.OutputFilePath)) { WriteOnce.Error(MsgHelp.GetString(MsgHelp.ID.PACK_MISSING_OUTPUT_ARG)); throw new OpException(MsgHelp.GetString(MsgHelp.ID.PACK_MISSING_OUTPUT_ARG)); } else { CommonOutputChecks(options); } return(RunPackRulesCommand(options)); }
private static int VerifyOutputArgsRun(CLIAnalyzeCmdOptions options) { Logger logger = Utils.SetupLogging(options, true); WriteOnce.Log = logger; options.Log = logger; //analyze with html format limit checks if (options.OutputFileFormat == "html") { if (!string.IsNullOrEmpty(options.OutputFilePath)) //dependent local files won't be there; TODO look into dir copy to target! { WriteOnce.Info("-o output file argument ignored for html format"); } options.OutputFilePath = "output.html"; if (options.AllowDupTags) //fix #183; duplicates results for html format is not supported which causes filedialog issues { WriteOnce.Error(MsgHelp.GetString(MsgHelp.ID.ANALYZE_NODUPLICATES_HTML_FORMAT)); throw new OpException(MsgHelp.GetString(MsgHelp.ID.ANALYZE_NODUPLICATES_HTML_FORMAT)); } if (options.SimpleTagsOnly) //won't work for html that expects full data for UI { WriteOnce.Error(MsgHelp.GetString(MsgHelp.ID.ANALYZE_SIMPLETAGS_HTML_FORMAT)); throw new Exception(MsgHelp.GetString(MsgHelp.ID.ANALYZE_SIMPLETAGS_HTML_FORMAT)); } } CommonOutputChecks((CLICommandOptions)options); return(RunAnalyzeCommand(options)); }
public static void Write(Result result, CLICommandOptions options) { CommandResultsWriter?writer = WriterFactory.GetWriter(options); string commandCompletedMsg; //perform type checking and assign final msg string if (result is TagTestResult) { commandCompletedMsg = "Tag Test"; } else if (result is TagDiffResult) { commandCompletedMsg = "Tag Diff"; } else if (result is ExportTagsResult) { commandCompletedMsg = "Export Tags"; } else if (result is VerifyRulesResult) { commandCompletedMsg = "Verify Rules"; } else if (result is PackRulesResult) { commandCompletedMsg = "Pack Rules"; } else if (result is AnalyzeResult analyzeResult && options is CLIAnalyzeCmdOptions cLIAnalyzeCmdOptions) //special handling for html format { commandCompletedMsg = "Analyze"; //additional prechecks required for analyze html format if (cLIAnalyzeCmdOptions.OutputFileFormat == "html") { int MAX_HTML_REPORT_FILE_SIZE = 1024 * 1000 * 3; //warn about potential slow rendering //prechecks if (analyzeResult.ResultCode != AnalyzeResult.ExitCode.Success) { Finalize(writer, commandCompletedMsg); return; } writer?.WriteResults(analyzeResult, cLIAnalyzeCmdOptions); //post checks if (File.Exists(options.OutputFilePath) && new FileInfo(options.OutputFilePath).Length > MAX_HTML_REPORT_FILE_SIZE) { WriteOnce.Info(MsgHelp.GetString(MsgHelp.ID.ANALYZE_REPORTSIZE_WARN)); } if (!cLIAnalyzeCmdOptions.SuppressBrowserOpen) { Utils.OpenBrowser(cLIAnalyzeCmdOptions.OutputFilePath); } Finalize(writer, "Analyze"); return; } }
/// <summary> /// CLI program entry point which defines command verbs and options to running /// </summary> /// <param name="args"></param> static int Main(string[] args) { int finalResult = (int)Utils.ExitCode.CriticalError; Utils.CLIExecutionContext = true;//set manually at start from CLI WriteOnce.Verbosity = WriteOnce.ConsoleVerbosity.Medium; try { var argsResult = Parser.Default.ParseArguments <AnalyzeCommandOptions, TagDiffCommandOptions, TagTestCommandOptions, ExportTagsCommandOptions, VerifyRulesCommandOptions, PackRulesCommandOptions>(args) .MapResult( (AnalyzeCommandOptions opts) => RunAnalyzeCommand(opts), (TagDiffCommandOptions opts) => RunTagDiffCommand(opts), (TagTestCommandOptions opts) => RunTagTestCommand(opts), (ExportTagsCommandOptions opts) => RunExportTagsCommand(opts), (VerifyRulesCommandOptions opts) => RunVerifyRulesCommand(opts), (PackRulesCommandOptions opts) => RunPackRulesCommand(opts), errs => 1 ); finalResult = argsResult; } catch (Exception) //a controlled exit; details not req but written out in command to ensure NuGet+CLI both can console write and log the error { if (!String.IsNullOrEmpty(Utils.LogFilePath)) { WriteOnce.Info(ErrMsg.FormatString(ErrMsg.ID.RUNTIME_ERROR_NAMED, Utils.LogFilePath), true, WriteOnce.ConsoleVerbosity.Low, false); } else { WriteOnce.Info(ErrMsg.GetString(ErrMsg.ID.RUNTIME_ERROR_PRELOG), true, WriteOnce.ConsoleVerbosity.Medium, false); } return(finalResult);//avoid double reporting } if (finalResult == (int)Utils.ExitCode.CriticalError) //case where exception not thrown but result was still a failure; Run() vs constructor exception etc. { if (!String.IsNullOrEmpty(Utils.LogFilePath)) { WriteOnce.Info(ErrMsg.FormatString(ErrMsg.ID.RUNTIME_ERROR_UNNAMED, Utils.LogFilePath), true, WriteOnce.ConsoleVerbosity.Low, false); } else { WriteOnce.Info(ErrMsg.GetString(ErrMsg.ID.RUNTIME_ERROR_PRELOG), true, WriteOnce.ConsoleVerbosity.Medium, false); } } return(finalResult); }
/// <summary> /// CLI program entry point which defines command verbs and options to running /// </summary> /// <param name="args"></param> private static int Main(string[] args) { int finalResult = (int)Utils.ExitCode.CriticalError; Utils.CLIExecutionContext = true;//set manually at start from CLI WriteOnce.Verbosity = WriteOnce.ConsoleVerbosity.Medium; try { var argsResult = Parser.Default.ParseArguments <CLIAnalyzeCmdOptions, CLITagDiffCmdOptions, CLITagTestCmdOptions, CLIExportTagsCmdOptions, CLIVerifyRulesCmdOptions, CLIPackRulesCmdOptions>(args) .MapResult( (CLIAnalyzeCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), (CLITagDiffCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), (CLITagTestCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), (CLIExportTagsCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), (CLIVerifyRulesCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), (CLIPackRulesCmdOptions cliOptions) => VerifyOutputArgsRun(cliOptions), errs => 1 ); finalResult = argsResult; } catch (OpException) { //log, output file and console have already been written to ensure all are updated for NuGet and CLI callers //that may exit at different call points } catch (Exception e) { //unlogged exception so report out for CLI callers WriteOnce.SafeLog(e.Message + "\n" + e.StackTrace, NLog.LogLevel.Error); } //final exit msg to review log if (finalResult == (int)Utils.ExitCode.CriticalError) { if (!String.IsNullOrEmpty(Utils.LogFilePath)) { WriteOnce.Info(MsgHelp.FormatString(MsgHelp.ID.RUNTIME_ERROR_UNNAMED, Utils.LogFilePath), true, WriteOnce.ConsoleVerbosity.Low, false); } else { WriteOnce.Info(MsgHelp.GetString(MsgHelp.ID.RUNTIME_ERROR_PRELOG), true, WriteOnce.ConsoleVerbosity.Medium, false); } } return(finalResult); }
/// <summary> /// CLI program entry point which defines command verbs and options to running /// </summary> /// <param name="args"></param> static int Main(string[] args) { int finalResult = -1; WriteOnce.Verbosity = WriteOnce.ConsoleVerbosity.Medium; try { WriteOnce.Info(Utils.GetVersionString()); var argsResult = Parser.Default.ParseArguments <AnalyzeCommandOptions, TagDiffCommandOptions, TagTestCommandOptions, ExportTagsCommandOptions, VerifyRulesCommandOptions, PackRulesCommandOptions>(args) .MapResult( (AnalyzeCommandOptions opts) => RunAnalyzeCommand(opts), (TagDiffCommandOptions opts) => RunTagDiffCommand(opts), (TagTestCommandOptions opts) => RunTagTestCommand(opts), (ExportTagsCommandOptions opts) => RunExportTagsCommand(opts), (VerifyRulesCommandOptions opts) => RunVerifyRulesCommand(opts), (PackRulesCommandOptions opts) => RunPackRulesCommand(opts), errs => 1 ); finalResult = argsResult; } catch (OpException e) { if (Logger != null) { WriteOnce.Error(ErrMsg.FormatString(ErrMsg.ID.RUNTIME_ERROR_NAMED, e.Message)); Logger.Error($"Runtime error: {e.StackTrace}"); } else { WriteOnce.Error(ErrMsg.FormatString(ErrMsg.ID.RUNTIME_ERROR_PRELOG, e.Message)); } } catch (Exception e) { if (Logger != null) { WriteOnce.Error(ErrMsg.FormatString(ErrMsg.ID.RUNTIME_ERROR_UNNAMED)); Logger.Error($"Runtime error: {e.Message} {e.StackTrace}"); } else { WriteOnce.Error(ErrMsg.FormatString(ErrMsg.ID.RUNTIME_ERROR_PRELOG, e.Message)); } } return(finalResult); }
private static int VerifyOutputArgsRun(CLIAnalyzeCmdOptions options) { Logger logger = Common.Utils.SetupLogging(options, true); WriteOnce.Log = logger; options.Log = logger; //analyze with html format limit checks if (options.OutputFileFormat == "html") { options.OutputFilePath ??= "output.html"; string extensionCheck = Path.GetExtension(options.OutputFilePath); if (extensionCheck is not ".html" and not ".htm") { WriteOnce.Info(MsgHelp.GetString(MsgHelp.ID.ANALYZE_HTML_EXTENSION)); } } CommonOutputChecks(options); return(RunAnalyzeCommand(options)); }