export LC_ALL=""
export LANG="en"
-EDITOR=${EDITOR:-vi}
+
+function Edit()
+{
+ local FILE="$1"
+ vi "$FILE"
+ sed -i 's/ \+$//' "$FILE"
+}
EMAIL="$(git config --get user.email)"
printf "LAST_COMPAT='%s'\n", lastcompat
printf "THIS_RELEASE='%s'\n", major"."minor"."patch
printf "THIS_COMPAT='%s'\n", compatminor
+ printf "THIS_MINOR='%s'\n", minor
+ printf "THIS_PATCH='%s'\n", patch
}
'
}
+function setversion() {
+ local KEY="$1"
+ local VAL="$2"
+ sed -i "s/^ *SET *( *${KEY} .*/SET(${KEY} \"${VAL}\")/" "$VERSIONFILE"
+}
+
function sameVersion() {
test "$LAST_RELEASE" == "$THIS_RELEASE" -a "$LAST_COMPAT" == "$THIS_COMPAT"
}
function getchanges() {
- git log --no-merges --pretty=format:'- %s' "$LAST_RELEASE"..HEAD | grep -v 'po.tar.bz2'
+ git log --no-merges --pretty=format:'@@%B' "$LAST_RELEASE"..HEAD \
+ | awk '/^@@/{p=1}/^@@Translated using Weblate/{p=0}(p){print}' \
+ | sed '/./{H;$!d};x;/./{s/ *\n */ /g;s/^ *//;s/ *$//;/[^]})!?:.]$/s/$/./;p};d' \
+ | fold -s -w 66 | sed '/^@@/{s/^../- /;p;d};s/^/ /'
}
function newchangesentry() {
echo ""
}
+function is_fast_forward() {
+ git fetch
+ test "$(git rev-list HEAD..origin/$(git name-rev --name-only HEAD) --count)" == "0"
+}
+
+is_fast_forward || {
+ Recho "!!!"
+ Recho "!!! Branch is not fast-forward. Pull changes first."
+ Recho "!!!"
+ exit 7
+}
+
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
- eval $(getversion)
newchangesentry
sameVersion && {
Becho "!!! Version is unchanged at $LAST_RELEASE ($LAST_COMPAT)."
exit 0
fi
-
# check version file
#
while true; do
# $LAST_COMPAT
# $THIS_RELEASE
# $THIS_COMPAT
- eval $(getversion)
sameVersion && {
newchangesentry
Becho "!!! Version is unchanged at $LAST_RELEASE ($LAST_COMPAT)."
- read -n 1 -p "$(Gecho "(a)bort, (c)ontinue, (e)dit version: ")" RES
+ read -n 1 -p "$(Gecho "(a)bort, (c)ontinue, (P) patch, (M) minor, (I) incompat minor, (e)dit version [e]: ")" RES
echo
- case "$RES" in
+ case "${RES:-e}" in
[eE]*)
- $EDITOR $VERSIONFILE
+ 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"
;;
RES=e
while [ "$RES" == "e" ]; do
- $EDITOR $TMPFILE
+ Edit $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 : ")" RES
+ read -n 1 -p "$(Gecho "(a)bort, (c)ontinue, (s)ubmitt, (e)dit [e]: ")" RES
echo
- case "$RES" in
+ 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
else
Becho "!!! Remember new version $THIS_RELEASE in $VERSIONFILE"
sed -i "s/^# LAST RELEASED:.*$/# LAST RELEASED: $THIS_RELEASE ($THIS_COMPAT)/" $VERSIONFILE
- git add "$CHANGESFILE" "$VERSIONFILE" \
- && git commit -m "changes $THIS_RELEASE ($THIS_COMPAT)" \
- && git tag -m "tagging $THIS_RELEASE" "$THIS_RELEASE" HEAD
- Becho "!!!"
- Becho "!!! Do not forget to push the commit and the tag: $(Gecho git push --tags)"
- Becho "!!!"
+ 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
}
;;