1*b1cdbd2cSJim Jagielski#************************************************************** 2*b1cdbd2cSJim Jagielski# 3*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski# distributed with this work for additional information 6*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski# 11*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski# 13*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski# under the License. 19*b1cdbd2cSJim Jagielski# 20*b1cdbd2cSJim Jagielski#************************************************************** 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielskiuse warnings; 25*b1cdbd2cSJim Jagielskiuse strict; 26*b1cdbd2cSJim Jagielskiuse diagnostics; 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielskisub trim; 29*b1cdbd2cSJim Jagielskisub readIncVersions($); 30*b1cdbd2cSJim Jagielskisub processLine($$); 31*b1cdbd2cSJim Jagielskisub checkName($); 32*b1cdbd2cSJim Jagielskisub incrementNewVersion($); 33*b1cdbd2cSJim Jagielskisub incrementOldVersion($); 34*b1cdbd2cSJim Jagielskisub incrementPolicyVersion($); 35*b1cdbd2cSJim Jagielskimy $usage = 36*b1cdbd2cSJim Jagielski"The tool increments the minor version of assemblies and the major version of ". 37*b1cdbd2cSJim Jagielski"the respective policy files. This is only done if new uno types have been added since". 38*b1cdbd2cSJim Jagielski"the last product upate. This information is obtained from the file which is passed as ". 39*b1cdbd2cSJim Jagielski"argument changedTypes. The names in the version file must have a particular form. ". 40*b1cdbd2cSJim Jagielski"They must end on one of folling terms: NEW_VERSION, OLD_VERSION, POLICY_VERSION\n". 41*b1cdbd2cSJim Jagielski"If no new published types habe been added then no output, argument newVersions, is written". 42*b1cdbd2cSJim Jagielski"Usage is: \n increment_version.pl oldVersions incVersions newVersions changedTypes\n\n". 43*b1cdbd2cSJim Jagielski"oldVersion: Contains name value pairs, which are used for forming the config files of ". 44*b1cdbd2cSJim Jagielski"the policy assemblies, for building the assemblies. \n\n". 45*b1cdbd2cSJim Jagielski"incVersions: File containing the names of which the versions are to be incremented. ". 46*b1cdbd2cSJim Jagielski"Every line may only contain one name. The names must exactly match those from the ". 47*b1cdbd2cSJim Jagielski"oldVersion file.\n\n". 48*b1cdbd2cSJim Jagielski"newVersions: Contains all entries from oldVersions, but the values of the names,". 49*b1cdbd2cSJim Jagielski"which occur in selection, have been incremented.\n\n". 50*b1cdbd2cSJim Jagielski"changedTypes: File that contains the information if new published types have been added ". 51*b1cdbd2cSJim Jagielski"since the last product update.\n\n" ; 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielskimy $sNameForm = 54*b1cdbd2cSJim Jagielski"The names must end on one of these names: NEW_VERSION, OLD_VERSION, POLICY_VERSION\n". 55*b1cdbd2cSJim Jagielski"For example, valid names are: \n". 56*b1cdbd2cSJim Jagielski"CLI_URETYPES_NEW_VERSION\nCLI_URETYPES_OLD_VERSION\nCLI_URETYPES_POLICY_VERSION\n"; 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielskiif (scalar @ARGV < 4) { 59*b1cdbd2cSJim Jagielski print $usage; 60*b1cdbd2cSJim Jagielski exit -1; 61*b1cdbd2cSJim Jagielski} 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski-e "$ARGV[0]" or die "Error: wrong arguments. \n".$usage; 64*b1cdbd2cSJim Jagielski-e "$ARGV[1]" or die "Error: wrong arguments. \n".$usage; 65*b1cdbd2cSJim Jagielski-e "$ARGV[3]" or die "Error: wrong arguments. \n".$usage; 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski#check if new types have been added since last release. 68*b1cdbd2cSJim Jagielski#If not, then there is nothing to be done. 69*b1cdbd2cSJim Jagielski#read in oldVersions line by line and apply the increment operation 70*b1cdbd2cSJim Jagielskiopen TYPES, "$ARGV[3]" or die "Cannot open to $ARGV[3] $!"; 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielskimy $newTypes; 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski#We look for the line that contains the number of new types 75*b1cdbd2cSJim Jagielskiwhile(<TYPES>) 76*b1cdbd2cSJim Jagielski{ 77*b1cdbd2cSJim Jagielski if (/New and published types/i) 78*b1cdbd2cSJim Jagielski { 79*b1cdbd2cSJim Jagielski $_ =~ /=\s*(\d+)/; 80*b1cdbd2cSJim Jagielski if ( ! defined $1) 81*b1cdbd2cSJim Jagielski { 82*b1cdbd2cSJim Jagielski print "\n###$ARGV[3] contains an invalid entry for 'New and published types'. \n\n"; 83*b1cdbd2cSJim Jagielski exit -1; 84*b1cdbd2cSJim Jagielski } 85*b1cdbd2cSJim Jagielski $newTypes = $1; 86*b1cdbd2cSJim Jagielski } 87*b1cdbd2cSJim Jagielski} 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski#Check if changeTypes contained the line we are looking for 90*b1cdbd2cSJim Jagielskiif (! defined $newTypes) 91*b1cdbd2cSJim Jagielski{ 92*b1cdbd2cSJim Jagielski print "\n###$ARGV[3] does not contain entry about the new types ". 93*b1cdbd2cSJim Jagielski "or we are looking for the wrong string! \n\n"; 94*b1cdbd2cSJim Jagielski exit -1; 95*b1cdbd2cSJim Jagielski} 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielskiif ( $newTypes == 0) 98*b1cdbd2cSJim Jagielski{ 99*b1cdbd2cSJim Jagielski print "\nNo new UNO types since las product update.\n"; 100*b1cdbd2cSJim Jagielski exit 0; 101*b1cdbd2cSJim Jagielski} 102*b1cdbd2cSJim Jagielskielse 103*b1cdbd2cSJim Jagielski{ 104*b1cdbd2cSJim Jagielski print "\nNew UNO types were addes since last release. The version will be increased.\n\n"; 105*b1cdbd2cSJim Jagielski} 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski#read in incVersions in a list 108*b1cdbd2cSJim Jagielskimy @incVersions = readIncVersions($ARGV[1]); 109*b1cdbd2cSJim Jagielski#print "@incVersions"; 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski#read in oldVersions line by line and apply the increment operation 112*b1cdbd2cSJim Jagielskiopen OLDVERSION, "$ARGV[0]" or die "Cannot open to $ARGV[0] $!"; 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski#open file we want to write to 115*b1cdbd2cSJim Jagielskiopen NEWVERSION, "> $ARGV[2]" or die "Cannot write to $ARGV[2] $!"; 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielskiprint NEWVERSION processLine($_, @incVersions) while(<OLDVERSION>); 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielskiclose NEWVERSION; 120*b1cdbd2cSJim Jagielskiclose OLDVERSION; 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielskiexit 0; 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielskisub processLine($$) 125*b1cdbd2cSJim Jagielski{ 126*b1cdbd2cSJim Jagielski my $line = $_[0]; 127*b1cdbd2cSJim Jagielski #skip empty lines 128*b1cdbd2cSJim Jagielski my $trimmed; 129*b1cdbd2cSJim Jagielski return $line if (length($trimmed = trim($line)) == 0); 130*b1cdbd2cSJim Jagielski #Skip comment symbol: # 131*b1cdbd2cSJim Jagielski return $line if ($trimmed =~ /^#/); 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski #Get the left part of '=' 134*b1cdbd2cSJim Jagielski my $i = index($line, "="); 135*b1cdbd2cSJim Jagielski if( $i == -1) 136*b1cdbd2cSJim Jagielski { 137*b1cdbd2cSJim Jagielski print "Error: No '=' found in line:,: \n $line \n"; 138*b1cdbd2cSJim Jagielski exit -1; 139*b1cdbd2cSJim Jagielski } 140*b1cdbd2cSJim Jagielski my $name = substr($line, 0, $i); 141*b1cdbd2cSJim Jagielski $name = trim($name); 142*b1cdbd2cSJim Jagielski #We do not check the names here because the file can contain 143*b1cdbd2cSJim Jagielski #other names, e.g. CLI_URETYPES_POLICY_ASSEMBLY 144*b1cdbd2cSJim Jagielski if (length($name) == 0) { 145*b1cdbd2cSJim Jagielski print "Wrong line in $ARGV[0]\n", $sNameForm; 146*b1cdbd2cSJim Jagielski exit -1; 147*b1cdbd2cSJim Jagielski } 148*b1cdbd2cSJim Jagielski my $value = substr($line, $i + 1); 149*b1cdbd2cSJim Jagielski $value = trim($value); 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski #Check if the entry shall be incremented, this information is in the second 152*b1cdbd2cSJim Jagielski #argument 153*b1cdbd2cSJim Jagielski my $found; 154*b1cdbd2cSJim Jagielski for(@incVersions) { 155*b1cdbd2cSJim Jagielski if ($_ eq $name) { 156*b1cdbd2cSJim Jagielski $found = 1; 157*b1cdbd2cSJim Jagielski last; 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski } 160*b1cdbd2cSJim Jagielski if ( ! defined($found)) { 161*b1cdbd2cSJim Jagielski return $line; 162*b1cdbd2cSJim Jagielski } 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski #Check if the name represents a version we need to change 165*b1cdbd2cSJim Jagielski if ($name =~ /NEW_VERSION$/) 166*b1cdbd2cSJim Jagielski { 167*b1cdbd2cSJim Jagielski $value = incrementNewVersion($value); 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski elsif ($name =~ /OLD_VERSION$/) 170*b1cdbd2cSJim Jagielski { 171*b1cdbd2cSJim Jagielski $value = incrementOldVersion($value); 172*b1cdbd2cSJim Jagielski } 173*b1cdbd2cSJim Jagielski elsif ($name =~ /POLICY_VERSION$/) 174*b1cdbd2cSJim Jagielski { 175*b1cdbd2cSJim Jagielski $value = incrementPolicyVersion($value); 176*b1cdbd2cSJim Jagielski } 177*b1cdbd2cSJim Jagielski else 178*b1cdbd2cSJim Jagielski { 179*b1cdbd2cSJim Jagielski #other name which we ignore 180*b1cdbd2cSJim Jagielski return $line; 181*b1cdbd2cSJim Jagielski } 182*b1cdbd2cSJim Jagielski return "${name}=${value}\n"; 183*b1cdbd2cSJim Jagielski} 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski#The value of a new version has the form x.x.x.x 186*b1cdbd2cSJim Jagielski#We increment the third position from the left. 187*b1cdbd2cSJim Jagielski#Te argument must already be trimmed. 188*b1cdbd2cSJim Jagielskisub incrementNewVersion($) 189*b1cdbd2cSJim Jagielski{ 190*b1cdbd2cSJim Jagielski my @parts = split /\./,$_[0]; 191*b1cdbd2cSJim Jagielski if (scalar @parts != 4) 192*b1cdbd2cSJim Jagielski { 193*b1cdbd2cSJim Jagielski print "Error, no valid version given in $ARGV[0]\n. A 'new version' has four parts."; 194*b1cdbd2cSJim Jagielski exit -1; 195*b1cdbd2cSJim Jagielski } 196*b1cdbd2cSJim Jagielski $parts[2]++; 197*b1cdbd2cSJim Jagielski #build the version string and return 198*b1cdbd2cSJim Jagielski return "$parts[0].$parts[1].$parts[2].$parts[3]"; 199*b1cdbd2cSJim Jagielski} 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski#The value of a new version has the form x.x.x.x-x.x.x.x 202*b1cdbd2cSJim Jagielski#We increment the third position of the second part. 203*b1cdbd2cSJim Jagielski#Te argument must already be trimmed. 204*b1cdbd2cSJim Jagielskisub incrementOldVersion($) 205*b1cdbd2cSJim Jagielski{ 206*b1cdbd2cSJim Jagielski my @parts = split /[\.-]/,$_[0]; 207*b1cdbd2cSJim Jagielski if (scalar @parts != 8) 208*b1cdbd2cSJim Jagielski { 209*b1cdbd2cSJim Jagielski print "Error, no valid version given in $ARGV[0]\n. A 'old version' has the form 210*b1cdbd2cSJim Jagielskix.x.x.x-x.x.x.x\n."; 211*b1cdbd2cSJim Jagielski exit -1; 212*b1cdbd2cSJim Jagielski } 213*b1cdbd2cSJim Jagielski $parts[6]++; 214*b1cdbd2cSJim Jagielski return "$parts[0].$parts[1].$parts[2].$parts[3]-$parts[4].$parts[5].$parts[6].$parts[7]"; 215*b1cdbd2cSJim Jagielski return $_[0]; 216*b1cdbd2cSJim Jagielski} 217*b1cdbd2cSJim Jagielski 218*b1cdbd2cSJim Jagielskisub incrementPolicyVersion($) 219*b1cdbd2cSJim Jagielski{ 220*b1cdbd2cSJim Jagielski my @parts = split /\./,$_[0]; 221*b1cdbd2cSJim Jagielski if (scalar @parts != 4) 222*b1cdbd2cSJim Jagielski { 223*b1cdbd2cSJim Jagielski print "Error, no valid version given in $ARGV[0]\n. A 'policy version' has four parts."; 224*b1cdbd2cSJim Jagielski exit -1; 225*b1cdbd2cSJim Jagielski } 226*b1cdbd2cSJim Jagielski $parts[0]++; 227*b1cdbd2cSJim Jagielski #build the version string and return 228*b1cdbd2cSJim Jagielski return "$parts[0].$parts[1].$parts[2].$parts[3]"; 229*b1cdbd2cSJim Jagielski} 230*b1cdbd2cSJim Jagielski 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielskisub readIncVersions($) 233*b1cdbd2cSJim Jagielski{ 234*b1cdbd2cSJim Jagielski open INC, $_[0] or die "Could not open $_[0] $!"; 235*b1cdbd2cSJim Jagielski my $arg = $_[0]; 236*b1cdbd2cSJim Jagielski my @names; 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski while(<INC>) 239*b1cdbd2cSJim Jagielski { 240*b1cdbd2cSJim Jagielski chomp; 241*b1cdbd2cSJim Jagielski #Skip empty lines 242*b1cdbd2cSJim Jagielski my $line; 243*b1cdbd2cSJim Jagielski if (length($line = trim($_)) == 0) { 244*b1cdbd2cSJim Jagielski next; 245*b1cdbd2cSJim Jagielski } 246*b1cdbd2cSJim Jagielski #Skip comment symbol: # 247*b1cdbd2cSJim Jagielski if ($line =~ /^#/) { 248*b1cdbd2cSJim Jagielski next; 249*b1cdbd2cSJim Jagielski } 250*b1cdbd2cSJim Jagielski if (!checkName($line)) { 251*b1cdbd2cSJim Jagielski print "Wrong entry in file $_[0]\n", $sNameForm; 252*b1cdbd2cSJim Jagielski exit -1; 253*b1cdbd2cSJim Jagielski } 254*b1cdbd2cSJim Jagielski push @names, $line; 255*b1cdbd2cSJim Jagielski } 256*b1cdbd2cSJim Jagielski print "No entries found in $arg\n" if(scalar @names == 0); 257*b1cdbd2cSJim Jagielski return @names; 258*b1cdbd2cSJim Jagielski} 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski#The argument must already be trimmed 261*b1cdbd2cSJim Jagielski#returns 1 if ok 262*b1cdbd2cSJim Jagielskisub checkName($) 263*b1cdbd2cSJim Jagielski{ 264*b1cdbd2cSJim Jagielski my $name = $_[0]; 265*b1cdbd2cSJim Jagielski if ( $name !~/NEW_VERSION$|OLD_VERSION$|POLICY_VERSION$/) { 266*b1cdbd2cSJim Jagielski return 0; 267*b1cdbd2cSJim Jagielski } 268*b1cdbd2cSJim Jagielski return 1; 269*b1cdbd2cSJim Jagielski} 270*b1cdbd2cSJim Jagielski 271*b1cdbd2cSJim Jagielskisub trim($) 272*b1cdbd2cSJim Jagielski{ 273*b1cdbd2cSJim Jagielski my $string = shift; 274*b1cdbd2cSJim Jagielski $string =~ s/^\s+//; 275*b1cdbd2cSJim Jagielski $string =~ s/\s+$//; 276*b1cdbd2cSJim Jagielski return $string; 277*b1cdbd2cSJim Jagielski} 278