Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- #
- # Project configuration variables
- # These can be adapted to fit your project structure.
- #
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- VERSION_FILE="include/version.h"
- CHANGELOG_FILE="debian/changelog"
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- #
- # Scripts internal variables
- #
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- LF="\n"
- PARAMS=""
- DRYRUN=0
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- #
- # Helper functions
- #
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- die()
- {
- echo "Error: $@" 1>&2
- exit 1
- }
- print_usage()
- {
- echo
- echo "Usage: $0 [OPTIONS] ACTION"
- echo
- echo "Available options:"
- echo " -s,--script Format output in \"script\" mode (no trailing newline)."
- echo " -d,--dry-run Does not commit anything to any file, just prints."
- echo
- echo "Available actions:"
- echo " print [minor|major|patch] Print the current version."
- echo " release [minor|major|patch] Bump the specified version part"
- echo " check Check the changelog latest released"
- echo " version against the version file."
- echo
- echo "Please run this script from the project root folder."
- echo
- }
- check_files()
- {
- [ -f ${VERSION_FILE} ] || die "No ${VERSION_FILE} found!";
- [ -f ${CHANGELOG_FILE} ] || die "No ${CHANGELOG_FILE} found!"
- }
- # Gets a part of the version from the project version file (version.h).
- # Takes one argument: the matching version identifier in the version file, e.g.
- # TINYALSA_VERSION_MAJOR
- get_version_part()
- {
- local V=$(grep -m 1 "^#define\([ \t]*\)$1" ${VERSION_FILE} | sed 's/[^0-9]*//g')
- if [ -z ${V} ]; then
- die "Could not get $1 from ${VERSION_FILE}"
- fi
- echo ${V}
- }
- # Gets the complete version from the version file.
- # Sets VERSION_MAJOR, VERSION_MINOR and VERSION_PATCH globals
- get_version()
- {
- VERSION_MAJOR=$(get_version_part "TINYALSA_VERSION_MAJOR")
- VERSION_MINOR=$(get_version_part "TINYALSA_VERSION_MINOR")
- VERSION_PATCH=$(get_version_part "TINYALSA_VERSION_PATCH")
- }
- # Commits the new version part to the version file.
- # Takes two arguments: the version part identifier in the version file and the
- # new version number. If no arguments, do nothing.
- commit_version_part()
- {
- if [ -z $1 ] || [ -z $2 ]; then
- return 0
- fi
- sed -i "s/\(^#define[ \t]*$1\)[ \t]*\([0-9]*\)/\1 $2/g" ${VERSION_FILE} \
- || die "Could not commit version for $1";
- [ $(get_version_part $1) = "$2" ] || die "Version check after commit failed for $1"
- return 0;
- }
- # Commits the new version to the version file.
- # Takes three arguments, the new version numbers for major, minor and patch
- commit_version()
- {
- commit_version_part "TINYALSA_VERSION_PATCH" $1
- commit_version_part "TINYALSA_VERSION_MINOR" $2
- commit_version_part "TINYALSA_VERSION_MAJOR" $3
- return 0
- }
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- #
- # Actions implementations / functions
- #
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- print_version()
- {
- if [ -z $1 ]; then
- printf "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${LF}"
- else
- case "$1" in
- major)
- printf "${VERSION_MAJOR}${LF}"
- ;;
- minor)
- printf "${VERSION_MINOR}${LF}"
- ;;
- patch)
- printf "${VERSION_PATCH}${LF}"
- ;;
- *)
- die "Unknown part \"$1\" (must be one of minor, major and patch)."
- ;;
- esac
- fi
- return 0
- }
- bump_version()
- {
- local PART="patch"
- if [ ! -z $1 ]; then
- PART="$1"
- fi
- case "$PART" in
- major)
- VERSION_MAJOR=$((VERSION_MAJOR+1))
- VERSION_MINOR=0
- VERSION_PATCH=0
- ;;
- minor)
- VERSION_MINOR=$((VERSION_MINOR+1))
- VERSION_PATCH=0
- ;;
- patch)
- VERSION_PATCH=$((VERSION_PATCH+1))
- ;;
- *)
- die "Unknown part \"$1\" (must be one of minor, major and patch)."
- ;;
- esac
- if [ ${DRYRUN} -ne 1 ]; then
- commit_version ${VERSION_PATCH} ${VERSION_MINOR} ${VERSION_MAJOR}
- fi
- print_version
- return 0
- }
- check_version()
- {
- local LOG_VERSION=$(grep -m 1 "^tinyalsa (" ${CHANGELOG_FILE}| sed "s/[^0-9.]*//g")
- local REF_VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"
- if [ "${LOG_VERSION}" != "${REF_VERSION}" ]; then
- die "Changelog version (${LOG_VERSION}) does not match package version (${REF_VERSION})."
- fi
- printf "Changelog version (${LOG_VERSION}) OK!${LF}"
- return 0
- }
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- #
- # Command Line parsing
- #
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- parse_command()
- {
- if [ "$#" -eq "0" ]; then
- print_usage
- exit 1
- fi
- case "$1" in
- print)
- get_version
- print_version "$2"
- exit $?
- ;;
- release)
- get_version
- bump_version "$2"
- exit $?
- ;;
- check)
- get_version
- check_version
- exit $?
- ;;
- *)
- die "Unsupported action \"$1\"."
- ;;
- esac
- }
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- #
- # Main
- #
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- set -e
- trap "set +e" 0
- # Checking parameters
- if [ "$#" -eq "0" ]; then
- print_usage
- exit 0
- fi
- while [ "$#" -ne "0" ]; do
- case "$1" in
- -s|--script)
- unset LF
- shift
- ;;
- -d|--dry-run)
- DRYRUN=1
- shift
- ;;
- --)
- shift
- break
- ;;
- -*|--*=)
- die "Unsupported flag \"$1\"."
- ;;
- *)
- PARAMS="$PARAMS ${1}"
- shift
- ;;
- esac
- done
- # set positional arguments in their proper place
- set -- "${PARAMS}"
- check_files
- parse_command ${PARAMS}
- # The script should never reach this place.
- die "Internal error. Please report this."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement