+git status --porcelain | grep '^[^ ?]' | grep -v "$VERSIONFILE\|$CHANGESFILE" && {
+ Becho "!!! Files other than version and changes are added to the index."
+ Becho "!!! Doing dryrun..."
+ DRYRUN=1
+}
+
+# A tag for $LAST_RELEASE must exist!
+eval $(getversion)
+git rev-parse -q --verify "$LAST_RELEASE" >/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]*)
+ Edit $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
+#