Increment version number
When we use some tools to automatise rpm build, it is a mandatory to find and bump the version in cvs
script to increment version number
For use with scripts, or more customizability to apply to various versioning systems. It could use a couple more options, but as it stands now it works for my projects using the "major.minor[.maintenance[.build]]" version sequences. Obviously, this is excessive just to increment a version string. But I wrote this because I had a need for different types of projects, and because if speed is not an issue, I prefer reusability over tweaking the same code across dozens of scripts. I guess that's just my object-oriented side leaking into my scripts.
from that source -> http://stackoverflow.com/questions/8653126/how-to-increment-version-number-in-a-shell-script
# Accepts a version string and prints it incremented by one. # Usage: increment_version <version> [<position>] [<leftmost>] increment_version() { local usage=" USAGE: $FUNCNAME [-l] [-t] <version> [<position>] [<leftmost>] -l : remove leading zeros -t : drop trailing zeros <version> : The version string. <position> : Optional. The position (starting with one) of the number within <version> to increment. If the position does not exist, it will be created. Defaults to last position. <leftmost> : The leftmost position that can be incremented. If does not exist, position will be created. This right-padding will occur even to right of <position>, unless passed the -t flag." # Get flags. local flag_remove_leading_zeros=0 local flag_drop_trailing_zeros=0 while [ "${1:0:1}" == "-" ]; do if [ "$1" == "--" ]; then shift; break elif [ "$1" == "-l" ]; then flag_remove_leading_zeros=1 elif [ "$1" == "-t" ]; then flag_drop_trailing_zeros=1 else echo -e "Invalid flag: ${1}\n$usage"; return 1; fi shift; done # Get arguments. if [ ${#@} -lt 1 ]; then echo "$usage"; return 1; fi local v="${1}" # version string local targetPos=${2-last} # target position local minPos=${3-${2-0}} # minimum position # Split version string into array using its periods. local IFSbak; IFSbak=IFS; IFS='.' # IFS restored at end of func to read -ra v <<< "$v" # avoid breaking other scripts. # Determine target position. if [ "${targetPos}" == "last" ]; then if [ "${minPos}" == "last" ]; then minPos=0; fi targetPos=$((${#v[@]}>${minPos}?${#v[@]}:$minPos)); fi if [[ ! ${targetPos} -gt 0 ]]; then echo -e "Invalid position: '$targetPos'\n$usage"; return 1; fi (( targetPos-- )) || true # offset to match array index # Make sure minPosition exists. while [ ${#v[@]} -lt ${minPos} ]; do v+=("0"); done; # Increment target position. v[$targetPos]=`printf %0${#v[$targetPos]}d $((${v[$targetPos]}+1))`; # Remove leading zeros, if -l flag passed. if [ $flag_remove_leading_zeros == 1 ]; then for (( pos=0; $pos<${#v[@]}; pos++ )); do v[$pos]=$((${v[$pos]}*1)); done; fi # If targetPosition was not at end of array, reset following positions to # zero (or remove them if -t flag was passed). if [[ ${flag_drop_trailing_zeros} -eq "1" ]]; then for (( p=$((${#v[@]}-1)); $p>$targetPos; p-- )); do unset v[$p]; done else for (( p=$((${#v[@]}-1)); $p>$targetPos; p-- )); do v[$p]=0; done; fi echo "${v[*]}" IFS=IFSbak return 0 } # EXAMPLE -------------> # RESULT increment_version 1 # 2 increment_version 1 2 # 1.1 increment_version 1 3 # 1.0.1 increment_version 1.0.0 # 1.0.1 increment_version 1.2.3.9 # 1.2.3.10 increment_version 00.00.001 # 00.00.002 increment_version -l 00.001 # 0.2 increment_version 1.1.1.1 2 # 1.2.0.0 increment_version -t 1.1.1 2 # 1.2 increment_version v1.1.3 # v1.1.4 increment_version 1.2.9 2 4 # 1.3.0.0 increment_version -t 1.2.9 2 4 # 1.3 increment_version 1.2.9 last 4 # 1.2.9.1
find version number
in a script you can use this from your spec file
version=$(grep -sri 'define version' *.spec | sed 's/%define version //gI') versionincr=$(increment_version $version 2)
or also
# Informations needed from the spec file version=$(rpm -q --qf "%{version}\n" --specfile $name.spec | head -1) versionincr=$(increment_version $version 2)
find and bump release number
from your spec file
release=$(grep -sri 'define release' *.spec | sed 's/%define release //gI') #bump the release release=$((release + 1))
or
# Informations needed from the spec file release=$(rpm -q --qf "%{release}\n" --specfile $name.spec | head -1| sed s/\.el.//) release=$((release + 1))