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