1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/config/Moz/Milestone.pm Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,220 @@ 1.4 +#!/usr/bin/perl -w 1.5 +# This Source Code Form is subject to the terms of the Mozilla Public 1.6 +# License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 +# file, You can obtain one at http://mozilla.org/MPL/2.0/. 1.8 + 1.9 +package Moz::Milestone; 1.10 +use strict; 1.11 + 1.12 +use vars qw($officialMilestone 1.13 + $milestone); 1.14 + 1.15 +local $Moz::Milestone::milestone; 1.16 +local $Moz::Milestone::officialMilestone; 1.17 + 1.18 +# 1.19 +# Usage: getOfficialMilestone($milestoneFile) 1.20 +# Returns full milestone (x.x.x.x[ab12pre+]) 1.21 +# 1.22 +sub getOfficialMilestone($) { 1.23 + my $mfile = $_[0]; 1.24 + open(FILE,"$mfile") || 1.25 + die ("Can't open $mfile for reading!"); 1.26 + 1.27 + my $num = <FILE>; 1.28 + while($num =~ /^\s*#/ || $num !~ /^\d/) { 1.29 + $num = <FILE>; 1.30 + } 1.31 + 1.32 + close(FILE); 1.33 + if ($num !~ /^\d/) { return; } 1.34 + chomp($num); 1.35 + # Remove extra ^M caused by using dos-mode line-endings 1.36 + chop $num if (substr($num, -1, 1) eq "\r"); 1.37 + $Moz::Milestone::officialMilestone = $num; 1.38 + $Moz::Milestone::milestone = &getMilestoneNum; 1.39 + return $num; 1.40 +} 1.41 + 1.42 +# 1.43 +# Usage: getMilestoneNum($num) 1.44 +# Returns: milestone without a + if it exists. 1.45 +# 1.46 +sub getMilestoneNum { 1.47 + if (defined($Moz::Milestone::milestone)) { 1.48 + return $Moz::Milestone::milestone; 1.49 + } 1.50 + 1.51 + if (defined($Moz::Milestone::officialMilestone)) { 1.52 + $Moz::Milestone::milestone = $Moz::Milestone::officialMilestone; 1.53 + } else { 1.54 + $Moz::Milestone::milestone = $_[0]; 1.55 + } 1.56 + 1.57 + if ($Moz::Milestone::milestone =~ /\+$/) { # for x.x.x+, strip off the + 1.58 + $Moz::Milestone::milestone =~ s/\+$//; 1.59 + } 1.60 + 1.61 + return $Moz::Milestone::milestone; 1.62 +} 1.63 + 1.64 +# 1.65 +# Usage: getMilestoneQualifier($num) 1.66 +# Returns: + if it exists. 1.67 +# 1.68 +sub getMilestoneQualifier { 1.69 + my $milestoneQualifier; 1.70 + if (defined($Moz::Milestone::officialMilestone)) { 1.71 + $milestoneQualifier = $Moz::Milestone::officialMilestone; 1.72 + } else { 1.73 + $milestoneQualifier = $_[0]; 1.74 + } 1.75 + 1.76 + if ($milestoneQualifier =~ /\+$/) { 1.77 + return "+"; 1.78 + } 1.79 +} 1.80 + 1.81 +sub getMilestoneMajor { 1.82 + my $milestoneMajor; 1.83 + if (defined($Moz::Milestone::milestone)) { 1.84 + $milestoneMajor = $Moz::Milestone::milestone; 1.85 + } else { 1.86 + $milestoneMajor = $_[0]; 1.87 + } 1.88 + my @parts = split(/\./,$milestoneMajor); 1.89 + return $parts[0]; 1.90 +} 1.91 + 1.92 +sub getMilestoneMinor { 1.93 + my $milestoneMinor; 1.94 + if (defined($Moz::Milestone::milestone)) { 1.95 + $milestoneMinor = $Moz::Milestone::milestone; 1.96 + } else { 1.97 + $milestoneMinor = $_[0]; 1.98 + } 1.99 + my @parts = split(/\./,$milestoneMinor); 1.100 + 1.101 + if ($#parts < 1 ) { return 0; } 1.102 + return $parts[1]; 1.103 +} 1.104 + 1.105 +sub getMilestoneMini { 1.106 + my $milestoneMini; 1.107 + if (defined($Moz::Milestone::milestone)) { 1.108 + $milestoneMini = $Moz::Milestone::milestone; 1.109 + } else { 1.110 + $milestoneMini = $_[0]; 1.111 + } 1.112 + my @parts = split(/\./,$milestoneMini); 1.113 + 1.114 + if ($#parts < 2 ) { return 0; } 1.115 + return $parts[2]; 1.116 +} 1.117 + 1.118 +sub getMilestoneMicro { 1.119 + my $milestoneMicro; 1.120 + if (defined($Moz::Milestone::milestone)) { 1.121 + $milestoneMicro = $Moz::Milestone::milestone; 1.122 + } else { 1.123 + $milestoneMicro = $_[0]; 1.124 + } 1.125 + my @parts = split(/\./,$milestoneMicro); 1.126 + 1.127 + if ($#parts < 3 ) { return 0; } 1.128 + return $parts[3]; 1.129 +} 1.130 + 1.131 +sub getMilestoneAB { 1.132 + my $milestoneAB; 1.133 + if (defined($Moz::Milestone::milestone)) { 1.134 + $milestoneAB = $Moz::Milestone::milestone; 1.135 + } else { 1.136 + $milestoneAB = $_[0]; 1.137 + } 1.138 + 1.139 + if ($milestoneAB =~ /a/) { return "alpha"; } 1.140 + if ($milestoneAB =~ /b/) { return "beta"; } 1.141 + return "final"; 1.142 +} 1.143 + 1.144 +# 1.145 +# Usage: getMilestoneABWithNum($milestoneFile) 1.146 +# Returns the alpha and beta tag with its number (a1, a2, b3, ...) 1.147 +# 1.148 +sub getMilestoneABWithNum { 1.149 + my $milestoneABNum; 1.150 + if (defined($Moz::Milestone::milestone)) { 1.151 + $milestoneABNum = $Moz::Milestone::milestone; 1.152 + } else { 1.153 + $milestoneABNum = $_[0]; 1.154 + } 1.155 + 1.156 + if ($milestoneABNum =~ /([ab]\d+)/) { 1.157 + return $1; 1.158 + } else { 1.159 + return ""; 1.160 + } 1.161 +} 1.162 + 1.163 +# 1.164 +# build_file($template_file,$output_file) 1.165 +# 1.166 +sub build_file($$) { 1.167 + my @FILE; 1.168 + my @MILESTONE_PARTS; 1.169 + my $MINI_VERSION = 0; 1.170 + my $MICRO_VERSION = 0; 1.171 + my $OFFICIAL = 0; 1.172 + my $QUALIFIER = ""; 1.173 + 1.174 + if (!defined($Moz::Milestone::milestone)) { die("$0: no milestone file set!\n"); } 1.175 + @MILESTONE_PARTS = split(/\./, &getMilestoneNum); 1.176 + if ($#MILESTONE_PARTS >= 2) { 1.177 + $MINI_VERSION = 1; 1.178 + } else { 1.179 + $MILESTONE_PARTS[2] = 0; 1.180 + } 1.181 + if ($#MILESTONE_PARTS >= 3) { 1.182 + $MICRO_VERSION = 1; 1.183 + } else { 1.184 + $MILESTONE_PARTS[3] = 0; 1.185 + } 1.186 + if (! &getMilestoneQualifier) { 1.187 + $OFFICIAL = 1; 1.188 + } else { 1.189 + $QUALIFIER = "+"; 1.190 + } 1.191 + 1.192 + if (-e $_[0]) { 1.193 + open(FILE, "$_[0]") || die("$0: Can't open $_[0] for reading!\n"); 1.194 + @FILE = <FILE>; 1.195 + close(FILE); 1.196 + 1.197 + open(FILE, ">$_[1]") || die("$0: Can't open $_[1] for writing!\n"); 1.198 + 1.199 + # 1.200 + # There will be more of these based on what we need for files. 1.201 + # 1.202 + foreach(@FILE) { 1.203 + s/__MOZ_MAJOR_VERSION__/$MILESTONE_PARTS[0]/g; 1.204 + s/__MOZ_MINOR_VERSION__/$MILESTONE_PARTS[1]/g; 1.205 + s/__MOZ_MINI_VERSION__/$MILESTONE_PARTS[2]/g; 1.206 + s/__MOZ_MICRO_VERSION__/$MILESTONE_PARTS[3]/g; 1.207 + if ($MINI_VERSION) { 1.208 + s/__MOZ_OPTIONAL_MINI_VERSION__/.$MILESTONE_PARTS[2]/g; 1.209 + } 1.210 + if ($MICRO_VERSION) { 1.211 + s/__MOZ_OPTIONAL_MICRO_VERSION__/.$MILESTONE_PARTS[3]/g; 1.212 + } 1.213 + 1.214 + print FILE $_; 1.215 + } 1.216 + close(FILE); 1.217 + } else { 1.218 + die("$0: $_[0] doesn't exist for autoversioning!\n"); 1.219 + } 1.220 + 1.221 +} 1.222 + 1.223 +1;