| #!/usr/bin/perl |
| |
| # NOTE: this script is used by generate-new-scores; it is meant to be copied |
| # to and called from the masses/ directory of the checkout being used |
| # for the score generation run for the particular scoreset; you |
| # shouldn't need to call this script manually |
| # |
| # locks the score ranges for the base release rules to their original scores |
| # from 50_scores.cf |
| # |
| # the script also uses existing scores in 72_active.cf (even commented ones) |
| # to set the absolute min or max score in the ranges.data file |
| # |
| # if called with a 1 parameter new rules that aren't in the most current copy |
| # of the active.list file will be locked to zero so that the GA can ignore |
| # rules that aren't in the most current update (this is used for zeroing rules |
| # found in the weekly net checks that are no longer in the nightly non-net |
| # checks which 6 of 7 updates a week are based on) |
| # |
| # <@LICENSE> |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to you under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at: |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # </@LICENSE> |
| |
| use strict; |
| use warnings; |
| |
| my $scoreset = 0; # default |
| |
| my %rulescores; |
| my %newrulescores; |
| my %currently_active; |
| |
| my $only_currently_active_rules = (defined $ARGV[0] && $ARGV[0] == 1 ? 1 : 0); |
| |
| open(CONFIG, "config") or die "Cannot open config file: $!"; |
| while (<CONFIG>) { |
| /^\s*SCORESET=(\d)\s*$/; |
| $scoreset = $1; |
| # don't exit loop in case scoreset appears in config again |
| } |
| close CONFIG; |
| |
| print "Fixing score range for existing rules to current scoreset $scoreset score\n"; |
| |
| open(ORIG, "../rules/50_scores.cf") or die "Cannot open original score file: $!"; |
| while(<ORIG>) { |
| if (/^score/) { |
| /^score\s+(\S+)\s+(-?[\d.]+)(?:\s+(-?[\d.]+)\s+(-?[\d.]+)\s+(-?[\d.]+))?/; |
| my @scores; |
| if (defined $3) { |
| push @scores, ($2, $3, $4, $5); |
| } else { |
| push @scores, ($2, $2, $2, $2); |
| } |
| $rulescores{$1} = $scores[$scoreset]; |
| } |
| } |
| close ORIG; |
| |
| open(ORIG, "../rules/72_active.cf") or die "Cannot open original score file: $!"; |
| while(<ORIG>) { |
| if (/^(?:\#\s*)?score/) { |
| /^(?:\#\s*)?score\s+(\S+)\s+(-?[\d.]+)(?:\s+(-?[\d.]+)\s+(-?[\d.]+)\s+(-?[\d.]+))?/; |
| my @scores; |
| if (defined $3) { |
| push @scores, ($2, $3, $4, $5); |
| } else { |
| push @scores, ($2, $2, $2, $2); |
| } |
| $newrulescores{$1} = $scores[$scoreset]; |
| } |
| } |
| close ORIG; |
| |
| if ($only_currently_active_rules) { |
| open(ACTIVE, "../rules-current/active.list") or die "Cannot open rules-current/active.list: $!"; |
| while(<ACTIVE>) { |
| $currently_active{$1} = undef if (/^(?!#)(\S+)$/); |
| } |
| close ACTIVE; |
| } |
| |
| open(ORIG, "tmp/ranges.data") or die "Cannot open original range.data file: $!"; |
| open(NEW, ">tmp/ranges.data-new") or die "Cannot open range.data-new file: $!"; |
| while (<ORIG>) { |
| # if (/^(?:(?:-?[\d.]+) ){3}(\S+)$/) { |
| if (/^(-?[\d.]+) (-?[\d.]+) (-?[\d.]+) (\S+)$/) { |
| if (defined $rulescores{$4}) { |
| print NEW "$rulescores{$4} $rulescores{$4} 0 $4\n"; |
| } else { |
| if ($only_currently_active_rules) { |
| if (exists $currently_active{$4}) { |
| if (defined $newrulescores{$4}) { |
| if ($newrulescores{$4} > 0) { |
| print NEW "0 $newrulescores{$4} $3 $4\n" |
| } else { |
| print NEW "$newrulescores{$4} 0 $3 $4\n" |
| } |
| } else { |
| print NEW $_; |
| } |
| } else { |
| print NEW "0 0 0 $4\n"; |
| } |
| } else { |
| print NEW $_; |
| } |
| } |
| } else { |
| print NEW $_; |
| } |
| } |
| close ORIG; |
| close NEW; |