xref: /netbsd-src/external/bsd/ntp/dist/scripts/build/UpdatePoint (revision 56f2724e8b3d0a7f0bf50fb521c1043c1f9f007c)
18585484eSchristos#! /bin/sh
28585484eSchristos
38585484eSchristos# showusage is set to 1 on any command-line syntax error
48585484eSchristosshowusage=0
58585484eSchristos# are we playing by stable or dev rules?
68585484eSchristosrepo=
78585484eSchristos# test is set to 1 if -t/--test is given to prevent modifications
88585484eSchristostest=0
98585484eSchristos
108585484eSchristoscase "$#" in
118585484eSchristos 1) repo=$1
128585484eSchristos    ;;
138585484eSchristos 2) repo=$2
148585484eSchristos    case $1 in
158585484eSchristos     -t|--test)
168585484eSchristos	test=1
178585484eSchristos	;;
188585484eSchristos     *)
198585484eSchristos	showusage=1
208585484eSchristos	;;
218585484eSchristos    esac
228585484eSchristos    ;;
238585484eSchristos *) showusage=1
248585484eSchristos    ;;
258585484eSchristosesac
268585484eSchristos
278585484eSchristoscase "$repo" in
288585484eSchristos dev|stable)
298585484eSchristos    ;;
308585484eSchristos '')
318585484eSchristos    showusage=1
328585484eSchristos    ;;
338585484eSchristos *) echo "Unexpected repo type: <$repo>!"
348585484eSchristos    showusage=1
358585484eSchristos    ;;
368585484eSchristosesac
378585484eSchristos
388585484eSchristoscase "$showusage" in
398585484eSchristos 1) echo "Usage: $0 [-t] <stable|dev>"
408585484eSchristos    echo "No changes are made to packageinfo.sh if -t is given."
418585484eSchristos    exit 1
428585484eSchristos    ;;
438585484eSchristosesac
448585484eSchristos
458585484eSchristos
468585484eSchristosset -e
478585484eSchristos
488585484eSchristos. ./packageinfo.sh
498585484eSchristos
508585484eSchristoscase "$repotype" in
518585484eSchristos $repo)
528585484eSchristos    ;;
538585484eSchristos *) echo "You indicated repo type <$repo> but packageinfo.sh"
548585484eSchristos    echo "indicates <$repotype>."
558585484eSchristos    exit 1
568585484eSchristos    ;;
578585484eSchristosesac
588585484eSchristos
598585484eSchristosver_repo_mismatch=1
608585484eSchristos
618585484eSchristoscase "$minor" in
628585484eSchristos 1|3|5|7|9)
638585484eSchristos    case "$repo" in
648585484eSchristos     dev)
658585484eSchristos	ver_repo_mismatch=0
668585484eSchristos	;;
678585484eSchristos     stable)
688585484eSchristos	;;
698585484eSchristos    esac
708585484eSchristos    ;;
718585484eSchristos 0|2|4|6|8)
728585484eSchristos    case "$repo" in
738585484eSchristos     dev)
748585484eSchristos	;;
758585484eSchristos     stable)
768585484eSchristos	ver_repo_mismatch=0
778585484eSchristos	;;
788585484eSchristos    esac
798585484eSchristos    ;;
808585484eSchristosesac
818585484eSchristos
828585484eSchristoscase "$ver_repo_mismatch" in
838585484eSchristos 1) echo "Minor version <$minor> mismatches repotype <$repo>."
848585484eSchristos    exit 1
858585484eSchristos    ;;
868585484eSchristosesac
878585484eSchristos
888585484eSchristos# Do we want to bump the point?
898585484eSchristosbp=1
908585484eSchristos# Do we want to bump the beta point?
918585484eSchristosbbp=0
928585484eSchristos# Do we want to change the RC point? (n=no, z=empty rcpoint and zero
938585484eSchristos# betapoint, i=incr)
948585484eSchristoscrcp=n
958585484eSchristos# Do we want to change the prerelease value?
968585484eSchristossetpr=0
978585484eSchristos
988585484eSchristos# for stable:
998585484eSchristos# if we are not in a beta or RC state, enter beta unless point is NEW.
1008585484eSchristos# if we are in a beta state:
1018585484eSchristos# - bump the beta point
1028585484eSchristos# else if we are in an RC state:
1038585484eSchristos# - if rcpoint is GO:
1048585484eSchristos# - - set rcpoint= (empty)
1058585484eSchristos# - - set prerelease= (empty)
1068585484eSchristos# - - set betapoint=0
1078585484eSchristos# - else
1088585484eSchristos# - - if rcpoint==(empty)
1098585484eSchristos# - - - (bump-point) and set rcpoint to 0 (and fall thru, so -RC1 is first)
1108585484eSchristos# - - bump the RC point
1118585484eSchristos
1128585484eSchristos# for dev, we only want to bump-point and possibly clear prerelease,
1138585484eSchristos# but we do not modify rcpoint nor betapoint.
1148585484eSchristos
1158585484eSchristoscase "$repo" in
1168585484eSchristos dev)
1178585484eSchristos    case "$point" in
1188585484eSchristos     [Nn][Ee][Ww])
1198585484eSchristos	crcp=z
1208585484eSchristos	;;
1218585484eSchristos     *)
1228585484eSchristos	# crcp=n
1238585484eSchristos	;;
1248585484eSchristos    esac
1258585484eSchristos    # bp=1
1268585484eSchristos    ;;
1278585484eSchristos stable)
1288585484eSchristos    case "$prerelease" in
1298585484eSchristos     '')
130*56f2724eSchristos	# echo "Checking <$betapoint::$rcpoint::$point>"
1318585484eSchristos	case "$betapoint::$rcpoint::$point" in
1328585484eSchristos	 *::*::NEW)
1338585484eSchristos	    # new minor release (no p)
1348585484eSchristos	    crcp=z
1358585484eSchristos	    # bp=1
1368585484eSchristos	    ;;
1378585484eSchristos	 0::::*)
1388585484eSchristos	    # start of first beta cycle for the next point release
1398585484eSchristos	    setpr=1
1408585484eSchristos	    newpr=beta
1418585484eSchristos	    # bp=1
1428585484eSchristos	    bbp=1
1438585484eSchristos	    ;;
1448585484eSchristos	 0::[Gg][Oo]::*)
1458585484eSchristos	    # skip all -beta and -RC prereleases to the next point.
1468585484eSchristos	    crcp=z
1478585484eSchristos	    setpr=1
1488585484eSchristos	    newpr=
1498585484eSchristos	    # bp=1
1508585484eSchristos	    # bbp=0
1518585484eSchristos	    ;;
152*56f2724eSchristos	 ::[Gg][Oo]::*)
153*56f2724eSchristos	    # echo "Good - betapoint is empty.  Look in $0 and figure out what's going on here."
154*56f2724eSchristos	    crcp=z
155*56f2724eSchristos	    ;;
156*56f2724eSchristos	 *::[Gg][Oo]::*)
157*56f2724eSchristos	    echo "betapoint is NOT empty.  Look in $0 and figure out what's going on here."
158*56f2724eSchristos	    test=1
159*56f2724eSchristos	    ;;
1608585484eSchristos	 *) echo "betapoint is <$betapoint>, rcpoint is <$rcpoint>"
1618585484eSchristos	    echo "betapoint must be 0 and rcpoint must be empty to start the"
1628585484eSchristos	    echo "beta cycle."
1638585484eSchristos	    exit 1
1648585484eSchristos	    ;;
1658585484eSchristos	esac
1668585484eSchristos	;;
1678585484eSchristos     beta)
1688585484eSchristos	case "$betapoint::$rcpoint" in
1698585484eSchristos	 [1-9]*::*)
1708585484eSchristos	    bp=0
1718585484eSchristos	    bbp=1
1728585484eSchristos	    ;;
1738585484eSchristos	 0::) echo "betapoint is 0, rcpoint emtpy, and prerelease is beta."
1748585484eSchristos	    echo "You probably intended prerelease=  (that is, empty).  It"
1758585484eSchristos	    echo "will then be changed to beta by this script, starting the"
1768585484eSchristos	    echo "first beta for the next point release."
1778585484eSchristos	    exit 1
1788585484eSchristos	    ;;
1798585484eSchristos	 *)
1808585484eSchristos	    bp=0
1818585484eSchristos	    bbp=1
1828585484eSchristos	    ;;
1838585484eSchristos	esac
1848585484eSchristos	case "$rcpoint" in
1858585484eSchristos	 [Gg][Oo])
1868585484eSchristos	    echo "prerelease is beta, rcpoint is GO, disallowed."
1878585484eSchristos	    echo "rcpoint GO is allowed only when prerelease is RC or empty."
1888585484eSchristos	    exit 1
1898585484eSchristos	    ;;
1908585484eSchristos	esac
1918585484eSchristos	;;
1928585484eSchristos     rc|RC)
1938585484eSchristos	case "$rcpoint" in
1948585484eSchristos	 '')
1958585484eSchristos	    case "$betapoint" in
1968585484eSchristos	     0) # bp=1
1978585484eSchristos		;;
1988585484eSchristos	     *) bp=0
1998585484eSchristos		;;
2008585484eSchristos	    esac
2018585484eSchristos	    crcp=i
2028585484eSchristos	    ;;
2038585484eSchristos	 [1-9]*)
2048585484eSchristos	    bp=0
2058585484eSchristos	    crcp=i
2068585484eSchristos	    ;;
2078585484eSchristos	 [Gg][Oo])
2088585484eSchristos	    bp=0
2098585484eSchristos	    crcp=z
2108585484eSchristos	    setpr=1
2118585484eSchristos	    newpr=
2128585484eSchristos	    ;;
2138585484eSchristos	 *) echo "Unexpected value for 'rcpoint' <$rcpoint>!"
2148585484eSchristos	    exit 1
2158585484eSchristos	    ;;
2168585484eSchristos	esac
2178585484eSchristos	;;
2188585484eSchristos     *)
2198585484eSchristos	echo "prerelease <$prerelease> unexpected"
2208585484eSchristos	exit 1
2218585484eSchristos	;;
2228585484eSchristos    esac
2238585484eSchristos    ;;
2248585484eSchristos *) echo "impossible: repo <$repo>!"
2258585484eSchristos    exit 1
2268585484eSchristos    ;;
2278585484eSchristosesac
2288585484eSchristos
229b5bbe2e3Schristoscase "$repo::$bp::$point" in
230b5bbe2e3Schristos *::0::*)
2318585484eSchristos    newpoint=$point
2328585484eSchristos    ;;
233b5bbe2e3Schristos dev::1::0)
2348585484eSchristos    newpoint=`expr $point + 1`
2358585484eSchristos    ;;
236b5bbe2e3Schristos *::1::[1-9]*)
237b5bbe2e3Schristos    newpoint=`expr $point + 1`
238b5bbe2e3Schristos    ;;
239b5bbe2e3Schristos dev::1::)
240b5bbe2e3Schristos    newpoint=0
241b5bbe2e3Schristos    ;;
242b5bbe2e3Schristos stable::1::)
2438585484eSchristos    newpoint=1
2448585484eSchristos    ;;
245b5bbe2e3Schristos *::1::[Nn][Ee][Ww])
2468585484eSchristos    newpoint=
2478585484eSchristos    ;;
248b5bbe2e3Schristos *) echo "Unexpected value for 'point' <$point>! (repo::bp::point is $repo::$bp::$point)"
2498585484eSchristos    exit 1
2508585484eSchristos    ;;
2518585484eSchristosesac
2528585484eSchristos
2538585484eSchristoscase "$bbp::$betapoint" in
2548585484eSchristos 0::*)
2558585484eSchristos    newbetapoint=$betapoint
2568585484eSchristos    ;;
2578585484eSchristos 1::[0-9]*)
2588585484eSchristos    newbetapoint=`expr $betapoint + 1`
2598585484eSchristos    ;;
2608585484eSchristos *) echo "Unexpected value for 'betapoint' <$betapoint>!"
2618585484eSchristos    exit 1
2628585484eSchristos    ;;
2638585484eSchristosesac
2648585484eSchristos
2658585484eSchristoscase "$crcp::$rcpoint" in
2668585484eSchristos n::*)
2678585484eSchristos    newrcpoint=$rcpoint
2688585484eSchristos    ;;
2698585484eSchristos i::)
2708585484eSchristos    newrcpoint=1
2718585484eSchristos    ;;
2728585484eSchristos i::[0-9]*)
2738585484eSchristos    newrcpoint=`expr $rcpoint + 1`
2748585484eSchristos    ;;
2758585484eSchristos z::*)
2768585484eSchristos    newrcpoint=
277*56f2724eSchristos    case "$repo" in
278*56f2724eSchristos     dev)
2798585484eSchristos	newbetapoint=0
2808585484eSchristos	;;
281*56f2724eSchristos     stable)
282*56f2724eSchristos	newbetapoint=
283*56f2724eSchristos	;;
284*56f2724eSchristos     *)
285*56f2724eSchristos	echo "crcp::rcpoint - bogus repo <$repo>"
286*56f2724eSchristos	exit 1
287*56f2724eSchristos	;;
288*56f2724eSchristos    esac
289*56f2724eSchristos    ;;
2908585484eSchristos *) echo "Unexpected value for 'crcp::rcpoint' <$crcp::$rcpoint>!"
2918585484eSchristos    exit 1
2928585484eSchristos    ;;
2938585484eSchristosesac
2948585484eSchristos
2958585484eSchristoscase "$setpr" in
2968585484eSchristos 0)
2978585484eSchristos    newpr=$prerelease
2988585484eSchristosesac
2998585484eSchristos
3008585484eSchristos# display results
3018585484eSchristosprintf "prerelease		$prerelease"
3028585484eSchristoscase "$newpr" in
3038585484eSchristos $prerelease)
3048585484eSchristos    printf "\n"
3058585484eSchristos    ;;
3068585484eSchristos *) printf " -> $newpr\n"
3078585484eSchristos    ;;
3088585484eSchristosesac
3098585484eSchristosprintf "point			$point"
3108585484eSchristoscase "$newpoint" in
3118585484eSchristos $point)
3128585484eSchristos    printf "\n"
3138585484eSchristos    ;;
3148585484eSchristos *) printf " -> $newpoint\n"
3158585484eSchristos    ;;
3168585484eSchristosesac
3178585484eSchristosprintf "betapoint		$betapoint"
3188585484eSchristoscase "$newbetapoint" in
3198585484eSchristos $betapoint)
3208585484eSchristos    printf "\n"
3218585484eSchristos    ;;
3228585484eSchristos *) printf " -> $newbetapoint\n"
3238585484eSchristos    ;;
3248585484eSchristosesac
3258585484eSchristosprintf "rcpoint			$rcpoint"
3268585484eSchristoscase "$newrcpoint" in
3278585484eSchristos $rcpoint)
3288585484eSchristos    printf "\n"
3298585484eSchristos    ;;
3308585484eSchristos *) printf " -> $newrcpoint\n"
3318585484eSchristos    ;;
3328585484eSchristosesac
3338585484eSchristos
3348585484eSchristosprintf "Previous version: "
3358585484eSchristosscripts/build/VersionName
3368585484eSchristos
3378585484eSchristos# apply packageinfo.sh changes
3388585484eSchristos
3398585484eSchristossed -e "s/^point=.*/point=$newpoint/"			\
3408585484eSchristos    -e "s/^betapoint=.*/betapoint=$newbetapoint/"	\
3418585484eSchristos    -e "s/^rcpoint=.*/rcpoint=$newrcpoint/"		\
3428585484eSchristos    -e "s/^prerelease=.*/prerelease=$newpr/"		\
3438585484eSchristos	< packageinfo.sh					\
3448585484eSchristos	> packageinfo.sh+
3458585484eSchristos
3468585484eSchristoscase "$test" in
3478585484eSchristos 0)
3488585484eSchristos    mv packageinfo.sh+ packageinfo.sh
3498585484eSchristos    printf "Updated version: "
3508585484eSchristos    scripts/build/VersionName
3518585484eSchristos    ;;
3528585484eSchristos *)
3538585484eSchristos    printf "Next version would be: "
3548585484eSchristos    scripts/build/VersionName -p ./packageinfo.sh+
3558585484eSchristos    rm packageinfo.sh+
3568585484eSchristos    ;;
3578585484eSchristosesac
358