Exemplo n.º 1
0
        private static bool AcceptArguments(string[] args, ref ParsedArguments parsedArgs, out string errorMessage, out IList <string> warningMessages)
        {
            errorMessage    = string.Empty;
            warningMessages = new List <string>();

            var converterOptions = new CmdConverterOptions();

            using (var parser = new CmdParser(parsingSettings => { parsingSettings.IgnoreUnknownArguments = false; }))
            {
                if (!parser.ParseArgumentsStrict(args, converterOptions, () =>
                {
                    if (!IsHelpArgumentOnly(args))
                    {
                        Logger.LogError(NewLine + "Incorrect command line arguments." + NewLine);
                    }
                }))
                {
                    errorMessage = converterOptions.GetUsage();
                    return(IsHelpArgumentOnly(args));
                }
            }

            if (converterOptions.PlogPaths.Count == 0)
            {
                errorMessage = string.Format("No input target was specified.{0}{1}{2}", NewLine, NewLine, converterOptions.GetUsage());
                return(false);
            }

            foreach (var plogPath in converterOptions.PlogPaths)
            {
                if (!File.Exists(plogPath))
                {
                    errorMessage = string.Format("File '{0}' does not exist.{1}", plogPath, NewLine);
                    return(false);
                }

                parsedArgs.RenderInfo.Logs.Add(plogPath);
            }

            parsedArgs.RenderInfo.OutputDir = converterOptions.OutputPath ?? DefaultOutputFolder;

            if (!Directory.Exists(parsedArgs.RenderInfo.OutputDir))
            {
                errorMessage = string.Format("Output directory '{0}' does not exist.{1}", converterOptions.OutputPath, NewLine);
                return(false);
            }

            // Output directory represents a root drive
            string outputDirRoot = Path.GetPathRoot(parsedArgs.RenderInfo.OutputDir);

            if (outputDirRoot.Equals(parsedArgs.RenderInfo.OutputDir, StringComparison.InvariantCultureIgnoreCase) &&
                !outputDirRoot.EndsWith(Path.DirectorySeparatorChar.ToString()))
            {
                parsedArgs.RenderInfo.OutputDir += Path.DirectorySeparatorChar;
            }

            parsedArgs.RenderInfo.SrcRoot = converterOptions.SrcRoot;

            // Getting a map for levels by the analyzer type
            IDictionary <AnalyzerType, ISet <uint> > analyzerLevelFilterMap = new Dictionary <AnalyzerType, ISet <uint> >();

            if (converterOptions.AnalyzerLevelFilter != null && converterOptions.AnalyzerLevelFilter.Count > 0 &&
                !Utils.TryParseLevelFilters(converterOptions.AnalyzerLevelFilter, analyzerLevelFilterMap,
                                            out errorMessage))
            {
                return(false);
            }

            parsedArgs.LevelMap = analyzerLevelFilterMap;

            // Getting render types
            ISet <LogRenderType> renderTypes = new HashSet <LogRenderType>();

            if (converterOptions.PlogRenderTypes != null &&
                converterOptions.PlogRenderTypes.Count > 0 &&
                !Utils.TryParseEnumValues <LogRenderType>(converterOptions.PlogRenderTypes, renderTypes,
                                                          out errorMessage))
            {
                return(false);
            }

            // Gettings error code mappings
            ISet <ErrorCodeMapping> errorCodeMappings = new HashSet <ErrorCodeMapping>();

            if (converterOptions.ErrorCodeMapping != null &&
                converterOptions.ErrorCodeMapping.Count > 0 &&
                !Utils.TryParseEnumValues <ErrorCodeMapping>(converterOptions.ErrorCodeMapping, errorCodeMappings,
                                                             out errorMessage))
            {
                return(false);
            }

            if (parsedArgs.LevelMap.Any())
            {
                if (errorCodeMappings.Contains(ErrorCodeMapping.MISRA) && !parsedArgs.LevelMap.Any(item => item.Key == AnalyzerType.MISRA))
                {
                    warningMessages.Add(string.Format("MISRA mapping is specified, but MISRA rules group is not enabled. Check the '-{0}' flag.", CmdConverterOptions.AnalyzerLevelFilter_ShortName));
                }

                if (errorCodeMappings.Contains(ErrorCodeMapping.OWASP) && !parsedArgs.LevelMap.Any(item => item.Key == AnalyzerType.OWASP))
                {
                    warningMessages.Add(string.Format("OWASP mapping is specified, but OWASP rules group is not enabled. Check the '-{0}' flag.", CmdConverterOptions.AnalyzerLevelFilter_ShortName));
                }

                if (errorCodeMappings.Contains(ErrorCodeMapping.AUTOSAR) && !parsedArgs.LevelMap.Any(item => item.Key == AnalyzerType.AUTOSAR))
                {
                    warningMessages.Add(string.Format("AUTOSAR mapping is specified, but AUTOSAR rules group is not enabled. Check the '-{0}' flag.", CmdConverterOptions.AnalyzerLevelFilter_ShortName));
                }
            }

            // Check if provided outputNameTemplate is a valid file name
            if (!string.IsNullOrWhiteSpace(converterOptions.OutputNameTemplate) && !Utils.IsValidFilename(converterOptions.OutputNameTemplate))
            {
                errorMessage = String.Format("Template \"{0}\" is not a valid file name.{1}", converterOptions.OutputNameTemplate, NewLine);
                return(false);
            }

            // Check if settings path is exists
            if (!String.IsNullOrWhiteSpace(converterOptions.SettingsPath) && !File.Exists(converterOptions.SettingsPath))
            {
                errorMessage = string.Format("Settings file '{0}' does not exist.", converterOptions.SettingsPath);
                return(false);
            }

            parsedArgs.RenderTypes        = renderTypes;
            parsedArgs.ErrorCodeMappings  = errorCodeMappings;
            parsedArgs.DisabledErrorCodes = converterOptions.DisabledErrorCodes;
            parsedArgs.SettingsPath       = converterOptions.SettingsPath;
            parsedArgs.OutputNameTemplate = converterOptions.OutputNameTemplate;
            parsedArgs.IndicateWarnings   = converterOptions.IndicateWarnings;

            errorMessage = string.Empty;
            return(true);
        }
Exemplo n.º 2
0
        private static bool AcceptArguments(string[] args, ref ParsedArguments parsedArgs, out string errorMessage)
        {
            var converterOptions = new CmdConverterOptions();
            var parser           = new CmdParser(parsingSettings =>
            {
                parsingSettings.HelpWriter             = Console.Error;
                parsingSettings.IgnoreUnknownArguments = false;
            });

            if (!parser.ParseArgumentsStrict(args, converterOptions))
            {
                errorMessage = converterOptions.GetUsage();
                return(false);
            }

            if (!File.Exists(converterOptions.PlogPath))
            {
                errorMessage = string.Format("File '{0}' does not exist{1}{2}", converterOptions.PlogPath, NewLine,
                                             converterOptions.GetUsage());
                return(false);
            }

            Reporter.Instance.Header       = converterOptions.Header;
            Reporter.Instance.Server       = converterOptions.Server;
            Reporter.Instance.Port         = converterOptions.Port;
            Reporter.Instance.SmtpUser     = converterOptions.SmtpUser;
            Reporter.Instance.SmtpPassword = converterOptions.SmtpPassword;
            Reporter.Instance.FromAddress  = converterOptions.FromAddress;
            Reporter.Instance.SendEmail    = converterOptions.SendEmail;
            SvnInfo.Instance.AutoEmail     = converterOptions.AutoEmail;
            SvnInfo.Instance.EmailList     = converterOptions.EmailList;

            parsedArgs.RenderInfo.Plog      = converterOptions.PlogPath;
            parsedArgs.RenderInfo.OutputDir = converterOptions.OutputPath ?? DefaultOutputFolder;

            if (!Directory.Exists(parsedArgs.RenderInfo.OutputDir))
            {
                errorMessage = string.Format("Output directory '{0}' does not exist{1}{2}", converterOptions.OutputPath,
                                             NewLine, converterOptions.GetUsage());
                return(false);
            }

            parsedArgs.RenderInfo.SrcRoot = converterOptions.SrcRoot;

            // Getting a map for levels by the analyzer type
            IDictionary <AnalyzerType, ISet <uint> > analyzerLevelFilterMap = new Dictionary <AnalyzerType, ISet <uint> >();

            if (converterOptions.AnalyzerLevelFilter != null && converterOptions.AnalyzerLevelFilter.Count > 0 &&
                !Utils.TryParseLevelFilters(converterOptions.AnalyzerLevelFilter, analyzerLevelFilterMap,
                                            out errorMessage))
            {
                return(false);
            }

            parsedArgs.LevelMap = analyzerLevelFilterMap;

            // Getting render types
            ISet <RenderType> renderTypes = new HashSet <RenderType>();

            if (converterOptions.PlogRenderTypes != null && converterOptions.PlogRenderTypes.Count > 0 &&
                !Utils.TryParseRenderFilter(converterOptions.PlogRenderTypes, renderTypes, out errorMessage))
            {
                return(false);
            }

            parsedArgs.RenderTypes        = renderTypes;
            parsedArgs.DisabledErrorCodes = converterOptions.DisabledErrorCodes;

            errorMessage = string.Empty;
            return(true);
        }