xref: /freebsd/contrib/ntp/scripts/build/UpdatePoint (revision e0c4386e)
1#! /bin/sh
2
3# showusage is set to 1 on any command-line syntax error
4showusage=0
5# are we playing by stable or dev rules?
6repo=
7# test is set to 1 if -t/--test is given to prevent modifications
8test=0
9
10case "$#" 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    ;;
25esac
26
27case "$repo" in
28 dev|stable)
29    ;;
30 '')
31    showusage=1
32    ;;
33 *) echo "Unexpected repo type: <$repo>!"
34    showusage=1
35    ;;
36esac
37
38case "$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    ;;
43esac
44
45
46set -e
47
48. ./packageinfo.sh
49
50case "$repotype" in
51 $repo)
52    ;;
53 *) echo "You indicated repo type <$repo> but packageinfo.sh"
54    echo "indicates <$repotype>."
55    exit 1
56    ;;
57esac
58
59ver_repo_mismatch=1
60
61case "$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    ;;
80esac
81
82case "$ver_repo_mismatch" in
83 1) echo "Minor version <$minor> mismatches repotype <$repo>."
84    exit 1
85    ;;
86esac
87
88# Do we want to bump the point?
89bp=1
90# Do we want to bump the beta point?
91bbp=0
92# Do we want to change the RC point? (n=no, z=empty rcpoint and zero
93# betapoint, i=incr)
94crcp=n
95# Do we want to change the prerelease value?
96setpr=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
115case "$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    ;;
227esac
228
229case "$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    ;;
251esac
252
253case "$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    ;;
263esac
264
265case "$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    ;;
293esac
294
295case "$setpr" in
296 0)
297    newpr=$prerelease
298esac
299
300# display results
301printf "prerelease		$prerelease"
302case "$newpr" in
303 $prerelease)
304    printf "\n"
305    ;;
306 *) printf " -> $newpr\n"
307    ;;
308esac
309printf "point			$point"
310case "$newpoint" in
311 $point)
312    printf "\n"
313    ;;
314 *) printf " -> $newpoint\n"
315    ;;
316esac
317printf "betapoint		$betapoint"
318case "$newbetapoint" in
319 $betapoint)
320    printf "\n"
321    ;;
322 *) printf " -> $newbetapoint\n"
323    ;;
324esac
325printf "rcpoint			$rcpoint"
326case "$newrcpoint" in
327 $rcpoint)
328    printf "\n"
329    ;;
330 *) printf " -> $newrcpoint\n"
331    ;;
332esac
333
334printf "Previous version: "
335scripts/build/VersionName
336
337# apply packageinfo.sh changes
338
339sed -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
346case "$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    ;;
357esac
358