]> CyberLeo.Net >> Repos - FreeBSD/releng/10.3.git/blob - contrib/ntp/scripts/build/UpdatePoint
Fix multiple vulnerabilities in ntp. [SA-18:02.ntp]
[FreeBSD/releng/10.3.git] / contrib / ntp / scripts / build / UpdatePoint
1 #! /bin/sh
2
3 # showusage is set to 1 on any command-line syntax error
4 showusage=0
5 # are we playing by stable or dev rules?
6 repo=
7 # test is set to 1 if -t/--test is given to prevent modifications
8 test=0
9
10 case "$#" in
11  1) repo=$1
12     ;;
13  2) repo=$2
14     case $1 in
15      -t|--test)
16         test=1
17         ;;
18      *)
19         showusage=1
20         ;;
21     esac
22     ;;
23  *) showusage=1
24     ;;
25 esac
26
27 case "$repo" in
28  dev|stable)
29     ;;
30  '')
31     showusage=1
32     ;;
33  *) echo "Unexpected repo type: <$repo>!"
34     showusage=1
35     ;;
36 esac
37
38 case "$showusage" in
39  1) echo "Usage: $0 [-t] <stable|dev>"
40     echo "No changes are made to packageinfo.sh if -t is given."
41     exit 1
42     ;;
43 esac
44
45
46 set -e
47  
48 . ./packageinfo.sh
49
50 case "$repotype" in
51  $repo)
52     ;;
53  *) echo "You indicated repo type <$repo> but packageinfo.sh"
54     echo "indicates <$repotype>."
55     exit 1
56     ;;
57 esac
58
59 ver_repo_mismatch=1
60
61 case "$minor" in
62  1|3|5|7|9)
63     case "$repo" in
64      dev)
65         ver_repo_mismatch=0
66         ;;
67      stable)
68         ;;
69     esac
70     ;;
71  0|2|4|6|8)
72     case "$repo" in
73      dev)
74         ;;
75      stable)
76         ver_repo_mismatch=0
77         ;;
78     esac
79     ;;
80 esac
81
82 case "$ver_repo_mismatch" in
83  1) echo "Minor version <$minor> mismatches repotype <$repo>."
84     exit 1
85     ;;
86 esac
87
88 # Do we want to bump the point?
89 bp=1
90 # Do we want to bump the beta point?
91 bbp=0
92 # Do we want to change the RC point? (n=no, z=empty rcpoint and zero
93 # betapoint, i=incr)
94 crcp=n
95 # Do we want to change the prerelease value?
96 setpr=0
97
98 # for stable:
99 # if we are not in a beta or RC state, enter beta unless point is NEW.
100 # if we are in a beta state:
101 # - bump the beta point
102 # else if we are in an RC state:
103 # - if rcpoint is GO:
104 # - - set rcpoint= (empty)
105 # - - set prerelease= (empty)
106 # - - set betapoint=0
107 # - else
108 # - - if rcpoint==(empty)
109 # - - - (bump-point) and set rcpoint to 0 (and fall thru, so -RC1 is first)
110 # - - bump the RC point
111
112 # for dev, we only want to bump-point and possibly clear prerelease, 
113 # but we do not modify rcpoint nor betapoint.
114
115 case "$repo" in
116  dev)
117     case "$point" in
118      [Nn][Ee][Ww])
119         crcp=z
120         ;;
121      *)
122         # crcp=n
123         ;;
124     esac
125     # bp=1
126     ;;
127  stable)
128     case "$prerelease" in
129      '')
130         # echo "Checking <$betapoint::$rcpoint::$point>"
131         case "$betapoint::$rcpoint::$point" in
132          *::*::NEW)
133             # new minor release (no p)
134             crcp=z
135             # bp=1
136             ;;
137          0::::*)
138             # start of first beta cycle for the next point release
139             setpr=1
140             newpr=beta
141             # bp=1
142             bbp=1
143             ;;
144          0::[Gg][Oo]::*)
145             # skip all -beta and -RC prereleases to the next point.
146             crcp=z
147             setpr=1
148             newpr=
149             # bp=1
150             # bbp=0
151             ;;
152          ::[Gg][Oo]::*)
153             # echo "Good - betapoint is empty.  Look in $0 and figure out what's going on here."
154             crcp=z
155             ;;
156          *::[Gg][Oo]::*)
157             echo "betapoint is NOT empty.  Look in $0 and figure out what's going on here."
158             test=1
159             ;;
160          *) echo "betapoint is <$betapoint>, rcpoint is <$rcpoint>"
161             echo "betapoint must be 0 and rcpoint must be empty to start the"
162             echo "beta cycle."
163             exit 1
164             ;;
165         esac
166         ;;
167      beta)
168         case "$betapoint::$rcpoint" in
169          [1-9]*::*)
170             bp=0
171             bbp=1
172             ;;
173          0::) echo "betapoint is 0, rcpoint emtpy, and prerelease is beta."
174             echo "You probably intended prerelease=  (that is, empty).  It"
175             echo "will then be changed to beta by this script, starting the"
176             echo "first beta for the next point release."
177             exit 1
178             ;;
179          *)
180             bp=0
181             bbp=1
182             ;;
183         esac
184         case "$rcpoint" in
185          [Gg][Oo])
186             echo "prerelease is beta, rcpoint is GO, disallowed."
187             echo "rcpoint GO is allowed only when prerelease is RC or empty."
188             exit 1
189             ;;
190         esac
191         ;;
192      rc|RC)
193         case "$rcpoint" in
194          '')
195             case "$betapoint" in
196              0) # bp=1
197                 ;;
198              *) bp=0
199                 ;;
200             esac
201             crcp=i
202             ;;
203          [1-9]*)
204             bp=0
205             crcp=i
206             ;;
207          [Gg][Oo])
208             bp=0
209             crcp=z
210             setpr=1
211             newpr=
212             ;;
213          *) echo "Unexpected value for 'rcpoint' <$rcpoint>!"
214             exit 1
215             ;;
216         esac
217         ;;
218      *)
219         echo "prerelease <$prerelease> unexpected"
220         exit 1
221         ;;
222     esac
223     ;;
224  *) echo "impossible: repo <$repo>!"
225     exit 1
226     ;;
227 esac
228
229 case "$repo::$bp::$point" in
230  *::0::*)
231     newpoint=$point
232     ;;
233  dev::1::0)
234     newpoint=`expr $point + 1`
235     ;;
236  *::1::[1-9]*)
237     newpoint=`expr $point + 1`
238     ;;
239  dev::1::)
240     newpoint=0
241     ;;
242  stable::1::)
243     newpoint=1
244     ;;
245  *::1::[Nn][Ee][Ww])
246     newpoint=
247     ;;
248  *) echo "Unexpected value for 'point' <$point>! (repo::bp::point is $repo::$bp::$point)"
249     exit 1
250     ;;
251 esac
252
253 case "$bbp::$betapoint" in
254  0::*)
255     newbetapoint=$betapoint
256     ;;
257  1::[0-9]*)
258     newbetapoint=`expr $betapoint + 1`
259     ;;
260  *) echo "Unexpected value for 'betapoint' <$betapoint>!"
261     exit 1
262     ;;
263 esac
264
265 case "$crcp::$rcpoint" in
266  n::*)
267     newrcpoint=$rcpoint
268     ;;
269  i::)
270     newrcpoint=1
271     ;;
272  i::[0-9]*)
273     newrcpoint=`expr $rcpoint + 1`
274     ;;
275  z::*)
276     newrcpoint=
277     case "$repo" in
278      dev)
279         newbetapoint=0
280         ;;
281      stable)
282         newbetapoint=
283         ;;
284      *)
285         echo "crcp::rcpoint - bogus repo <$repo>"
286         exit 1
287         ;;
288     esac
289     ;;
290  *) echo "Unexpected value for 'crcp::rcpoint' <$crcp::$rcpoint>!"
291     exit 1
292     ;;
293 esac
294
295 case "$setpr" in
296  0)
297     newpr=$prerelease
298 esac
299
300 # display results
301 printf "prerelease              $prerelease"
302 case "$newpr" in
303  $prerelease)
304     printf "\n"
305     ;;
306  *) printf " -> $newpr\n"
307     ;;
308 esac
309 printf "point                   $point"
310 case "$newpoint" in
311  $point)
312     printf "\n"
313     ;;
314  *) printf " -> $newpoint\n"
315     ;;
316 esac
317 printf "betapoint               $betapoint"
318 case "$newbetapoint" in
319  $betapoint)
320     printf "\n"
321     ;;
322  *) printf " -> $newbetapoint\n"
323     ;;
324 esac
325 printf "rcpoint                 $rcpoint"
326 case "$newrcpoint" in
327  $rcpoint)
328     printf "\n"
329     ;;
330  *) printf " -> $newrcpoint\n"
331     ;;
332 esac
333
334 printf "Previous version: "
335 scripts/build/VersionName
336
337 # apply packageinfo.sh changes
338
339 sed -e "s/^point=.*/point=$newpoint/"                   \
340     -e "s/^betapoint=.*/betapoint=$newbetapoint/"       \
341     -e "s/^rcpoint=.*/rcpoint=$newrcpoint/"             \
342     -e "s/^prerelease=.*/prerelease=$newpr/"            \
343         < packageinfo.sh                                        \
344         > packageinfo.sh+
345
346 case "$test" in
347  0)
348     mv packageinfo.sh+ packageinfo.sh
349     printf "Updated version: "
350     scripts/build/VersionName
351     ;;
352  *)
353     printf "Next version would be: "
354     scripts/build/VersionName -p ./packageinfo.sh+
355     rm packageinfo.sh+
356     ;;
357 esac