@@ -126,6 +126,13 @@ private static void Main(string[] args)
126126 Environment . Exit ( ( int ) argsResult ) ;
127127 }
128128
129+ /// <summary>
130+ /// Loads the rules from the provided file, if it is not null or empty. Or falls back to the embedded rules if it is.
131+ /// </summary>
132+ /// <param name="analysisFile"></param>
133+ /// <returns>The loaded RuleFile</returns>
134+ private static RuleFile LoadRulesFromFileOrEmbedded ( string ? analysisFile ) => string . IsNullOrEmpty ( analysisFile ) ? RuleFile . LoadEmbeddedFilters ( ) : RuleFile . FromFile ( analysisFile ) ;
135+
129136 private static ASA_ERROR RunGuidedModeCommand ( GuidedModeCommandOptions opts )
130137 {
131138 opts . RunId = opts . RunId ? . Trim ( ) ?? DateTime . Now . ToString ( "o" , CultureInfo . InvariantCulture ) ;
@@ -156,7 +163,13 @@ private static ASA_ERROR RunGuidedModeCommand(GuidedModeCommandOptions opts)
156163
157164 RunCollectCommand ( collectorOpts ) ;
158165
159- var analysisFile = string . IsNullOrEmpty ( opts . AnalysesFile ) ? RuleFile . LoadEmbeddedFilters ( ) : RuleFile . FromFile ( opts . AnalysesFile ) ;
166+ var analysisFile = LoadRulesFromFileOrEmbedded ( opts . AnalysesFile ) ;
167+
168+ if ( ! analysisFile . Rules . Any ( ) )
169+ {
170+ Log . Warning ( Strings . Get ( "Err_NoRules" ) ) ;
171+ return ASA_ERROR . INVALID_RULES ;
172+ }
160173
161174 var compareOpts = new CompareCommandOptions ( firstCollectRunId , secondCollectRunId )
162175 {
@@ -211,6 +224,7 @@ private static ASA_ERROR RunGuidedModeCommand(GuidedModeCommandOptions opts)
211224 {
212225 if ( opts is null ) { return new ConcurrentDictionary < ( RESULT_TYPE , CHANGE_TYPE ) , List < CompareResult > > ( ) ; }
213226 var results = new ConcurrentDictionary < ( RESULT_TYPE , CHANGE_TYPE ) , List < CompareResult > > ( ) ;
227+ var analysesHash = ruleFile . GetHash ( ) ;
214228 Parallel . ForEach ( collectObjects , monitorResult =>
215229 {
216230 var shellResult = new CompareResult ( )
@@ -220,7 +234,7 @@ private static ASA_ERROR RunGuidedModeCommand(GuidedModeCommandOptions opts)
220234 } ;
221235
222236 shellResult . Rules = analyzer . Analyze ( ruleFile . Rules , shellResult ) . ToList ( ) ;
223- shellResult . AnalysesHash = ruleFile . GetHash ( ) ;
237+ shellResult . AnalysesHash = analysesHash ;
224238
225239 if ( opts . ApplySubObjectRulesToMonitor )
226240 {
@@ -247,8 +261,13 @@ private static ASA_ERROR RunGuidedModeCommand(GuidedModeCommandOptions opts)
247261 private static ASA_ERROR RunVerifyRulesCommand ( VerifyOptions opts )
248262 {
249263 var analyzer = new AsaAnalyzer ( new AnalyzerOptions ( opts . RunScripts ) ) ;
250- var ruleFile = string . IsNullOrEmpty ( opts . AnalysisFile ) ? RuleFile . LoadEmbeddedFilters ( ) : RuleFile . FromFile ( opts . AnalysisFile ) ;
251- var violations = analyzer . EnumerateRuleIssues ( ruleFile . GetRules ( ) ) ;
264+ var ruleFile = LoadRulesFromFileOrEmbedded ( opts . AnalysisFile ) ;
265+ if ( ! ruleFile . Rules . Any ( ) )
266+ {
267+ Log . Warning ( Strings . Get ( "Err_NoRules" ) ) ;
268+ return ASA_ERROR . INVALID_RULES ;
269+ }
270+ var violations = analyzer . EnumerateRuleIssues ( ruleFile . Rules ) ;
252271 OAT . Utils . Strings . Setup ( ) ;
253272 OAT . Utils . Helpers . PrintViolations ( violations ) ;
254273 if ( violations . Any ( ) )
@@ -469,12 +488,19 @@ private static ASA_ERROR RunExportCollectCommand(ExportCollectCommandOptions opt
469488 }
470489 }
471490
491+ var ruleFile = LoadRulesFromFileOrEmbedded ( opts . AnalysesFile ) ;
492+ if ( ! ruleFile . Rules . Any ( ) )
493+ {
494+ Log . Warning ( Strings . Get ( "Err_NoRules" ) ) ;
495+ return ASA_ERROR . INVALID_RULES ;
496+ }
497+
472498 Log . Information ( Strings . Get ( "Comparing" ) , opts . FirstRunId , opts . SecondRunId ) ;
473499
474500 CompareCommandOptions options = new CompareCommandOptions ( opts . FirstRunId , opts . SecondRunId )
475501 {
476502 DatabaseFilename = opts . DatabaseFilename ,
477- AnalysesFile = string . IsNullOrEmpty ( opts . AnalysesFile ) ? RuleFile . LoadEmbeddedFilters ( ) : RuleFile . FromFile ( opts . AnalysesFile ) ,
503+ AnalysesFile = ruleFile ,
478504 DisableAnalysis = opts . DisableAnalysis ,
479505 SaveToDatabase = opts . SaveToDatabase ,
480506 RunScripts = opts . RunScripts
@@ -659,10 +685,17 @@ private static ASA_ERROR RunExportMonitorCommand(ExportMonitorCommandOptions opt
659685 return ASA_ERROR . INVALID_ID ;
660686 }
661687 }
688+
689+ var ruleFile = LoadRulesFromFileOrEmbedded ( opts . AnalysesFile ) ;
690+ if ( ! ruleFile . Rules . Any ( ) )
691+ {
692+ Log . Warning ( Strings . Get ( "Err_NoRules" ) ) ;
693+ return ASA_ERROR . INVALID_RULES ;
694+ }
662695 var monitorCompareOpts = new CompareCommandOptions ( null , opts . RunId )
663696 {
664697 DisableAnalysis = opts . DisableAnalysis ,
665- AnalysesFile = string . IsNullOrEmpty ( opts . AnalysesFile ) ? RuleFile . LoadEmbeddedFilters ( ) : RuleFile . FromFile ( opts . AnalysesFile ) ,
698+ AnalysesFile = ruleFile ,
666699 ApplySubObjectRulesToMonitor = opts . ApplySubObjectRulesToMonitor ,
667700 RunScripts = opts . RunScripts
668701 } ;
@@ -883,7 +916,8 @@ public static List<BaseCompare> GetComparators()
883916 watch = Stopwatch . StartNew ( ) ;
884917 var analyzer = new AsaAnalyzer ( new AnalyzerOptions ( opts . RunScripts ) ) ;
885918 var platform = DatabaseManager . RunIdToPlatform ( opts . SecondRunId ) ;
886- var violations = analyzer . EnumerateRuleIssues ( opts . AnalysesFile . GetRules ( ) ) ;
919+ var violations = analyzer . EnumerateRuleIssues ( opts . AnalysesFile . Rules ) ;
920+ var analysesHash = opts . AnalysesFile . GetHash ( ) ;
887921 OAT . Utils . Strings . Setup ( ) ;
888922 OAT . Utils . Helpers . PrintViolations ( violations ) ;
889923 if ( violations . Any ( ) )
@@ -910,7 +944,7 @@ public static List<BaseCompare> GetComparators()
910944 res . Rules = analyzer . Analyze ( selectedRules , res . Base , res . Compare ) . ToList ( ) ;
911945 res . Analysis = res . Rules . Count
912946 > 0 ? res . Rules . Max ( x => ( ( AsaRule ) x ) . Flag ) : opts . AnalysesFile . DefaultLevels [ res . ResultType ] ;
913- res . AnalysesHash = opts . AnalysesFile . GetHash ( ) ;
947+ res . AnalysesHash = analysesHash ;
914948 } ) ;
915949 }
916950 }
0 commit comments