#! /bin/bash function Recho() { echo -e "\e[0;31m""$@""\e[0m"; } function Gecho() { echo -e "\e[0;32m""$@""\e[0m"; } function Becho() { echo -e "\e[0;34m""$@""\e[0m"; } function errexit() { exec >&2 Recho "Error: $@" exit 1 } function usage() { exec >&2 cat </dev/null || { Recho "!!!" Recho "!!! There is no LAST_RELEASE tag '$LAST_RELEASE'. Check manually. " Recho "!!! (git tag -m 'tagging $LAST_RELEASE' '$LAST_RELEASE' ?commit?)" Recho "!!!" exit 8 } if [ "$DRYRUN" == "1" ]; then newchangesentry sameVersion && { Becho "!!! Version is unchanged at $LAST_RELEASE ($LAST_COMPAT)." } exit 0 fi # check version file # while true; do # $LAST_RELEASE # $LAST_COMPAT # $THIS_RELEASE # $THIS_COMPAT sameVersion && { newchangesentry Becho "!!! Version is unchanged at $LAST_RELEASE ($LAST_COMPAT)." read -n 1 -p "$(Gecho "(a)bort, (c)ontinue, (P) patch, (M) minor, (I) incompat minor, (e)dit version [e]: ")" RES echo case "${RES:-e}" in [eE]*) $EDITOR $VERSIONFILE eval $(getversion) continue ;; [cC]) Becho "!!! Leave $VERSIONFILE untouched" break ;; [P]) setversion LIBZYPP_PATCH $(($THIS_PATCH + 1)) eval $(getversion) continue ;; [M]) setversion LIBZYPP_MINOR $(($THIS_MINOR + 1)) setversion LIBZYPP_PATCH 0 eval $(getversion) continue ;; [I]) setversion LIBZYPP_COMPATMINOR $(($THIS_MINOR + 1)) setversion LIBZYPP_MINOR $(($THIS_MINOR + 1)) setversion LIBZYPP_PATCH 0 eval $(getversion) continue ;; *) errexit "aborted" ;; esac } break done # prepare changes file # TMPFILE=$(mktemp) trap " [ -f \"$TMPFILE\" ] && /bin/rm -f -- \"$TMPFILE\" " 0 1 2 3 13 15 { newchangesentry; cat $CHANGESFILE; } >$TMPFILE RES=e while [ "$RES" == "e" ]; do $EDITOR $TMPFILE echo awk '{print}/^----------/{n=n+1; if ( n == 2 ) exit 0; }' $TMPFILE read -n 1 -p "$(Gecho "(a)bort, (c)ontinue, (s)ubmitt, (e)dit [e]: ")" RES echo case "${RES:-e}" in [eE]*) RES=e ;; [cCsS]) Becho "!!! Store new $CHANGESFILE" mv $TMPFILE $CHANGESFILE chmod 644 $CHANGESFILE test "$RES" == "s" && { if [ "$LAST_RELEASE" == "$THIS_RELEASE" ]; then git add "$CHANGESFILE" && git commit -m "changes" else Becho "!!! Remember new version $THIS_RELEASE in $VERSIONFILE" sed -i "s/^# LAST RELEASED:.*$/# LAST RELEASED: $THIS_RELEASE ($THIS_COMPAT)/" $VERSIONFILE if git add "$CHANGESFILE" "$VERSIONFILE" \ && git commit -m "changes $THIS_RELEASE ($THIS_COMPAT)" \ && git tag -m "tagging $THIS_RELEASE" "$THIS_RELEASE" HEAD; then Becho "!!!" Becho "!!! Do not forget to push the commit and the tag: $(Gecho git push --tags origin HEAD)" Becho "!!!" else Recho "!!!" Recho "!!! Commit failed. Check manually. (git reset HEAD~)" Recho "!!!" exit 9 fi fi } ;; *) Becho "!!! Leave $CHANGESFILE untouched" ;; esac done