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 Jagielskipackage installer::patch::Version; 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski=head1 NAME 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski package installer::patch::Version - Functions for handling version numbers. 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski=cut 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski# We handle version numbers that consist of three parts: major, minor and micro version number. 34*b1cdbd2cSJim Jagielskimy $VersionPartCount = 3; 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski=head2 StringToNumberArray($version_string) 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski Convert a version string (where the individual parts are separated by '.') into an array of three numbers. 41*b1cdbd2cSJim Jagielski Missing numbers are filled with 0. 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski Returns an array with three elements (major, minor, micro). 44*b1cdbd2cSJim Jagielski=cut 45*b1cdbd2cSJim Jagielskisub StringToNumberArray ($) 46*b1cdbd2cSJim Jagielski{ 47*b1cdbd2cSJim Jagielski my ($version_string) = @_; 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski my @version_parts = split(/\./, $version_string); 50*b1cdbd2cSJim Jagielski while (scalar @version_parts < $VersionPartCount) 51*b1cdbd2cSJim Jagielski { 52*b1cdbd2cSJim Jagielski push @version_parts, "0"; 53*b1cdbd2cSJim Jagielski } 54*b1cdbd2cSJim Jagielski return @version_parts; 55*b1cdbd2cSJim Jagielski} 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski=head2 ArrayToDirectoryName (@) 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski Return a directory name (without any path) for the given array of version numbers. 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski=cut 65*b1cdbd2cSJim Jagielskisub ArrayToDirectoryName (@) 66*b1cdbd2cSJim Jagielski{ 67*b1cdbd2cSJim Jagielski return "v-".join("-", @_); 68*b1cdbd2cSJim Jagielski} 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski=head2 ArrayToNoDotName (@) 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski This symply creates a version array (A,B,C) into a version string 75*b1cdbd2cSJim Jagielski "ABC" with no dots between major, minor and micro version number. 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski=cut 78*b1cdbd2cSJim Jagielskisub ArrayToNoDotName (@) 79*b1cdbd2cSJim Jagielski{ 80*b1cdbd2cSJim Jagielski return join("", @_); 81*b1cdbd2cSJim Jagielski} 82*b1cdbd2cSJim Jagielski 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski=head2 IsMajorVersion ($version_string) 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski Return 1 if $version_string is a major version, ie. ?.0.0 89*b1cdbd2cSJim Jagielski Return 0 otherwise. 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski=cut 92*b1cdbd2cSJim Jagielskisub IsMajorVersion ($) 93*b1cdbd2cSJim Jagielski{ 94*b1cdbd2cSJim Jagielski my ($version_string) = @_; 95*b1cdbd2cSJim Jagielski my @version = installer::patch::Version::StringToNumberArray($version_string); 96*b1cdbd2cSJim Jagielski for (my $index=1; $index<$VersionPartCount; ++$index) 97*b1cdbd2cSJim Jagielski { 98*b1cdbd2cSJim Jagielski return 0 if $version[$index] ne "0"; 99*b1cdbd2cSJim Jagielski } 100*b1cdbd2cSJim Jagielski return 1; 101*b1cdbd2cSJim Jagielski} 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski 105*b1cdbd2cSJim Jagielski1; 106