|
1 #!/usr/bin/perl -w |
|
2 # This Source Code Form is subject to the terms of the Mozilla Public |
|
3 # License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
|
5 |
|
6 package Moz::Milestone; |
|
7 use strict; |
|
8 |
|
9 use vars qw($officialMilestone |
|
10 $milestone); |
|
11 |
|
12 local $Moz::Milestone::milestone; |
|
13 local $Moz::Milestone::officialMilestone; |
|
14 |
|
15 # |
|
16 # Usage: getOfficialMilestone($milestoneFile) |
|
17 # Returns full milestone (x.x.x.x[ab12pre+]) |
|
18 # |
|
19 sub getOfficialMilestone($) { |
|
20 my $mfile = $_[0]; |
|
21 open(FILE,"$mfile") || |
|
22 die ("Can't open $mfile for reading!"); |
|
23 |
|
24 my $num = <FILE>; |
|
25 while($num =~ /^\s*#/ || $num !~ /^\d/) { |
|
26 $num = <FILE>; |
|
27 } |
|
28 |
|
29 close(FILE); |
|
30 if ($num !~ /^\d/) { return; } |
|
31 chomp($num); |
|
32 # Remove extra ^M caused by using dos-mode line-endings |
|
33 chop $num if (substr($num, -1, 1) eq "\r"); |
|
34 $Moz::Milestone::officialMilestone = $num; |
|
35 $Moz::Milestone::milestone = &getMilestoneNum; |
|
36 return $num; |
|
37 } |
|
38 |
|
39 # |
|
40 # Usage: getMilestoneNum($num) |
|
41 # Returns: milestone without a + if it exists. |
|
42 # |
|
43 sub getMilestoneNum { |
|
44 if (defined($Moz::Milestone::milestone)) { |
|
45 return $Moz::Milestone::milestone; |
|
46 } |
|
47 |
|
48 if (defined($Moz::Milestone::officialMilestone)) { |
|
49 $Moz::Milestone::milestone = $Moz::Milestone::officialMilestone; |
|
50 } else { |
|
51 $Moz::Milestone::milestone = $_[0]; |
|
52 } |
|
53 |
|
54 if ($Moz::Milestone::milestone =~ /\+$/) { # for x.x.x+, strip off the + |
|
55 $Moz::Milestone::milestone =~ s/\+$//; |
|
56 } |
|
57 |
|
58 return $Moz::Milestone::milestone; |
|
59 } |
|
60 |
|
61 # |
|
62 # Usage: getMilestoneQualifier($num) |
|
63 # Returns: + if it exists. |
|
64 # |
|
65 sub getMilestoneQualifier { |
|
66 my $milestoneQualifier; |
|
67 if (defined($Moz::Milestone::officialMilestone)) { |
|
68 $milestoneQualifier = $Moz::Milestone::officialMilestone; |
|
69 } else { |
|
70 $milestoneQualifier = $_[0]; |
|
71 } |
|
72 |
|
73 if ($milestoneQualifier =~ /\+$/) { |
|
74 return "+"; |
|
75 } |
|
76 } |
|
77 |
|
78 sub getMilestoneMajor { |
|
79 my $milestoneMajor; |
|
80 if (defined($Moz::Milestone::milestone)) { |
|
81 $milestoneMajor = $Moz::Milestone::milestone; |
|
82 } else { |
|
83 $milestoneMajor = $_[0]; |
|
84 } |
|
85 my @parts = split(/\./,$milestoneMajor); |
|
86 return $parts[0]; |
|
87 } |
|
88 |
|
89 sub getMilestoneMinor { |
|
90 my $milestoneMinor; |
|
91 if (defined($Moz::Milestone::milestone)) { |
|
92 $milestoneMinor = $Moz::Milestone::milestone; |
|
93 } else { |
|
94 $milestoneMinor = $_[0]; |
|
95 } |
|
96 my @parts = split(/\./,$milestoneMinor); |
|
97 |
|
98 if ($#parts < 1 ) { return 0; } |
|
99 return $parts[1]; |
|
100 } |
|
101 |
|
102 sub getMilestoneMini { |
|
103 my $milestoneMini; |
|
104 if (defined($Moz::Milestone::milestone)) { |
|
105 $milestoneMini = $Moz::Milestone::milestone; |
|
106 } else { |
|
107 $milestoneMini = $_[0]; |
|
108 } |
|
109 my @parts = split(/\./,$milestoneMini); |
|
110 |
|
111 if ($#parts < 2 ) { return 0; } |
|
112 return $parts[2]; |
|
113 } |
|
114 |
|
115 sub getMilestoneMicro { |
|
116 my $milestoneMicro; |
|
117 if (defined($Moz::Milestone::milestone)) { |
|
118 $milestoneMicro = $Moz::Milestone::milestone; |
|
119 } else { |
|
120 $milestoneMicro = $_[0]; |
|
121 } |
|
122 my @parts = split(/\./,$milestoneMicro); |
|
123 |
|
124 if ($#parts < 3 ) { return 0; } |
|
125 return $parts[3]; |
|
126 } |
|
127 |
|
128 sub getMilestoneAB { |
|
129 my $milestoneAB; |
|
130 if (defined($Moz::Milestone::milestone)) { |
|
131 $milestoneAB = $Moz::Milestone::milestone; |
|
132 } else { |
|
133 $milestoneAB = $_[0]; |
|
134 } |
|
135 |
|
136 if ($milestoneAB =~ /a/) { return "alpha"; } |
|
137 if ($milestoneAB =~ /b/) { return "beta"; } |
|
138 return "final"; |
|
139 } |
|
140 |
|
141 # |
|
142 # Usage: getMilestoneABWithNum($milestoneFile) |
|
143 # Returns the alpha and beta tag with its number (a1, a2, b3, ...) |
|
144 # |
|
145 sub getMilestoneABWithNum { |
|
146 my $milestoneABNum; |
|
147 if (defined($Moz::Milestone::milestone)) { |
|
148 $milestoneABNum = $Moz::Milestone::milestone; |
|
149 } else { |
|
150 $milestoneABNum = $_[0]; |
|
151 } |
|
152 |
|
153 if ($milestoneABNum =~ /([ab]\d+)/) { |
|
154 return $1; |
|
155 } else { |
|
156 return ""; |
|
157 } |
|
158 } |
|
159 |
|
160 # |
|
161 # build_file($template_file,$output_file) |
|
162 # |
|
163 sub build_file($$) { |
|
164 my @FILE; |
|
165 my @MILESTONE_PARTS; |
|
166 my $MINI_VERSION = 0; |
|
167 my $MICRO_VERSION = 0; |
|
168 my $OFFICIAL = 0; |
|
169 my $QUALIFIER = ""; |
|
170 |
|
171 if (!defined($Moz::Milestone::milestone)) { die("$0: no milestone file set!\n"); } |
|
172 @MILESTONE_PARTS = split(/\./, &getMilestoneNum); |
|
173 if ($#MILESTONE_PARTS >= 2) { |
|
174 $MINI_VERSION = 1; |
|
175 } else { |
|
176 $MILESTONE_PARTS[2] = 0; |
|
177 } |
|
178 if ($#MILESTONE_PARTS >= 3) { |
|
179 $MICRO_VERSION = 1; |
|
180 } else { |
|
181 $MILESTONE_PARTS[3] = 0; |
|
182 } |
|
183 if (! &getMilestoneQualifier) { |
|
184 $OFFICIAL = 1; |
|
185 } else { |
|
186 $QUALIFIER = "+"; |
|
187 } |
|
188 |
|
189 if (-e $_[0]) { |
|
190 open(FILE, "$_[0]") || die("$0: Can't open $_[0] for reading!\n"); |
|
191 @FILE = <FILE>; |
|
192 close(FILE); |
|
193 |
|
194 open(FILE, ">$_[1]") || die("$0: Can't open $_[1] for writing!\n"); |
|
195 |
|
196 # |
|
197 # There will be more of these based on what we need for files. |
|
198 # |
|
199 foreach(@FILE) { |
|
200 s/__MOZ_MAJOR_VERSION__/$MILESTONE_PARTS[0]/g; |
|
201 s/__MOZ_MINOR_VERSION__/$MILESTONE_PARTS[1]/g; |
|
202 s/__MOZ_MINI_VERSION__/$MILESTONE_PARTS[2]/g; |
|
203 s/__MOZ_MICRO_VERSION__/$MILESTONE_PARTS[3]/g; |
|
204 if ($MINI_VERSION) { |
|
205 s/__MOZ_OPTIONAL_MINI_VERSION__/.$MILESTONE_PARTS[2]/g; |
|
206 } |
|
207 if ($MICRO_VERSION) { |
|
208 s/__MOZ_OPTIONAL_MICRO_VERSION__/.$MILESTONE_PARTS[3]/g; |
|
209 } |
|
210 |
|
211 print FILE $_; |
|
212 } |
|
213 close(FILE); |
|
214 } else { |
|
215 die("$0: $_[0] doesn't exist for autoversioning!\n"); |
|
216 } |
|
217 |
|
218 } |
|
219 |
|
220 1; |