* [gentoo-commits] proj/R_overlay:master commit in: bin/build/
@ 2014-06-05 22:09 André Erdmann
0 siblings, 0 replies; 3+ messages in thread
From: André Erdmann @ 2014-06-05 22:09 UTC (permalink / raw
To: gentoo-commits
commit: 280c04d3d53b3ce3fac72f035811b7514722a81a
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Wed Apr 2 19:53:47 2014 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Wed Apr 2 20:00:30 2014 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=280c04d3
bin/build/setver: --git-{add,commit,tag}, --reset
---
bin/build/setver.sh | 180 +++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 157 insertions(+), 23 deletions(-)
diff --git a/bin/build/setver.sh b/bin/build/setver.sh
index 470e529..ae8b048 100755
--- a/bin/build/setver.sh
+++ b/bin/build/setver.sh
@@ -2,7 +2,8 @@
#
# Sets roverlay's version.
#
-# Usage: setver [-S,--src <dir>] [--pretend] [--suffix <str>]
+# Usage: setver [-S,--src <dir>] [--pretend] [--suffix <str>] [--reset]
+# [--git-add] [--git-commit] [--force-commit] [--git-tag]
# [+,pbump|++,mbump|Mbump|[setver] <ver>]
#
# Actions:
@@ -15,40 +16,140 @@
# -S, --src <dir> -- set roverlay source directory (default: $PWD)
# --pretend -- just show what would be done
# --suffix <str> -- replace old version suffix with <str>
+# -l, --list-files -- just list files that would be edited by this script
+# (usage example: setver -l | xargs git checkout HEAD --)
+# --reset -- check out VERSION file from git HEAD before doing anything
+# --git-add -- git-add modified files
+# --git-commit -- commit changes (commit message: "roverlay <newver>")
+# --force-commit -- enforce git commit (allow other files)
+# --git-tag -- run git-tag <newver> after git-commit
#
+set -e
set -u
-IFS_DEFAULT="${IFS}"
+readonly IFS_DEFAULT="${IFS}"
-PY_FILES_TO_EDIT="roverlay/core.py setup.py"
+readonly PY_FILES_TO_EDIT="roverlay/core.py setup.py"
+readonly X_GIT="${X_GIT:-git}"
+# get_git_commit_message ( new_version, **commit_msg! )
+#
+# Creates a commit message and stores it in $commit_msg.
+# An empty str can be set if no commit should be made.
+#
+get_git_commit_message() {
+ commit_msg="roverlay ${1:?}"
+}
+
+# get_git_tag ( new_version, **tag! )
+#
+# Creates a git tag str and stores it in $tag.
+# An empty str suppresses tag creation.
+#
+get_git_tag() {
+ tag="${1:?}"
+}
+# @noreturn die ( [message], [exit_code] ), raises exit($exit_code)
+#
+# Lets the script die.
+#
die() {
- echo "${1:-unknown error.}" 1>&2; exit ${2:-2};
+ echo "${1:+died: }${1:-died.}" 1>&2; exit ${2:-2};
+}
+
+# autodie ( *cmdv )
+#
+# Runs *cmdv and dies on non-zero return.
+# ("set -ex" is too verbose)
+#
+autodie() {
+ "$@" || die "command '${*}' returned ${?}." ${?}
}
+# parse_version ( version_str, **major!, **minor!, **plvl!, **suffix! )
+#
+# Splits a version_str into its components.
+#
+# Example: 0.2.6-pre1 => major=0 minor=2 plvl=6 suffix=-pre1
+#
parse_version() {
+ unset -v major minor plvl suffix
local IFS="."
set -- ${1}
IFS="${IFS_DEFAULT}"
- [ ${#} -ge 3 ] || return 2
+ [ -n "${1-}" ] && [ -n "${2-}" ] && [ -n "${3-}" ] || return 2
major="${1:?}"
minor="${2:?}"
plvl="${3:?}"
shift 3 || die "error in parse_version()"
- suffix="${*}"
+ suffix=
+ while [ ${#} -gt 0 ]; do suffix="${suffix}.${1}"; shift; done
+ suffix="${suffix#.}"
}
+# inc ( k, **v0! )
+#
+# Increments $k by one and stores the result in $v0.
+#
inc() {
- v0=$(( ${1} + 1 ))
+ v0=$(( ${1:?} + 1 ))
+ # unlikely:
[ ${v0} -gt ${1} ] || die "overflow"
}
+# do_git_add ( *files, **want_gitadd, **X_GIT )
+#
+do_git_add() {
+ ${want_gitadd} || return 0
+ printf "git-add: %s\n" "${*}"
+ ${want_pretend} || autodie "${X_GIT}" add -- "$@"
+}
+
+# do_git_commit_and_tag (
+# version_str, numfiles_changed,
+# **want_gitcommit, **want_forcecommit, **want_gittag, **X_GIT
+# )
+#
+do_git_commit_and_tag() {
+ ${want_gitcommit} || return 0
+ local commit_msg commit_type tag
+
+ autodie get_git_commit_message "${1}"
+ autodie get_git_tag "${1}"
+
+ if [ -z "${commit_msg}" ]; then
+ return 0
+ elif ${want_pretend}; then
+ commit_type=maybe
+ elif \
+ [ $(git status --porcelain -- . | grep -c -- ^[MADRCU]) -eq ${2} ]
+ then
+ commit_type=clean
+ elif ${want_forcecommit}; then
+ commit_type=forced
+ else
+ die "cannot commit changes (try --force-commit)."
+ fi
+
+ printf "git-commit [%s]: %s\n" "${commit_type}" "${commit_msg}"
+ ${want_pretend} || autodie "${X_GIT}" commit -m "${commit_msg}"
+
+ ${want_gittag} && [ -n "${tag}" ] || return 0
+ printf "git-tag: %s\n" "${tag}"
+ ${want_pretend} || autodie "${X_GIT}" tag "${tag}"
+}
+
+
+# set defaults / parse args
+autodie hash "${X_GIT}"
S="${PWD}"
unset -v V
unset -v ACTION
unset -v new_suffix
-unset -v do_pretend
+
+readonly _boolvars="pretend gitadd gitcommit forcecommit gittag reset"
+for iter in ${_boolvars}; do eval "want_${iter}=false"; done
doshift=
while [ ${#} -gt 0 ]; do
@@ -56,15 +157,18 @@ while [ ${#} -gt 0 ]; do
case "${1}" in
'') : ;;
- '--src'|'-S')
- [ ${#} -ge 2 ] || die "argparse error"
+ -S|--src)
+ [ -n "${2-}" ] || die "one non-empty arg required after '${1}'."
doshift=2
S="${2:?}"
;;
- pretend|--pretend)
- do_pretend=true
- ;;
+ --pretend) want_pretend=true ;;
+ --reset) want_reset=true ;;
+ --git-add) want_gitadd=true ;;
+ --git-commit) want_gitcommit=true ;;
+ --force-commit) want_forcecommit=true ;;
+ --git-tag) want_gittag=true ;;
[Mmp]bump) ACTION="${1}" ;;
'+') ACTION=pbump ;;
@@ -72,18 +176,24 @@ while [ ${#} -gt 0 ]; do
*.*.*) ACTION=setver; V="${1}" ;;
setver)
- [ ${#} -ge 2 ] || die "argparse error"
+ [ -n "${2-}" ] || die "one non-empty arg required after '${1}'."
doshift=2
ACTION=setver
V="${2:?}"
;;
- suffix|--suffix)
- [ ${#} -ge 2 ] || die "argparse error"
+ --suffix)
+ [ -n "${2+SET}" ] || die "one arg required after '${1}'."
doshift=2
new_suffix="${2?}"
;;
+ -l|--list-files)
+ for fname in ${PY_FILES_TO_EDIT}; do echo "${fname}"; done
+ echo "VERSION"
+ exit 0
+ ;;
+
*)
die "unknown arg: ${1}" 64
;;
@@ -91,11 +201,20 @@ while [ ${#} -gt 0 ]; do
[ ${doshift} -eq 0 ] || shift ${doshift} || die "argparse: shift failed"
done
-: ${do_pretend:=false}
-OLDVER="$(cat "${S}/VERSION")"
-parse_version "${OLDVER}" || die "bad version: ${OLDVER}."
-[ -n "${new_suffix+SET}" ] || new_suffix="${suffix}"
+! { ${want_gittag} || ${want_forcecommit}; } || want_gitcommit=true
+! ${want_gitcommit} || want_gitadd=true
+
+readonly S ACTION
+for iter in ${_boolvars}; do readonly "want_${iter}"; done
+
+cd "${S}" || die "chdir ${S}"
+! ${want_reset} || autodie "${X_GIT}" checkout HEAD -- VERSION
+readonly OLDVER="$(cat "${S}/VERSION")" || die "failed to read ${S}/VERSION"
+autodie parse_version "${OLDVER}"
+: ${new_suffix="${suffix}"}
+
+# get new version
case "${ACTION-}" in
pbump)
inc "${plvl}"
@@ -113,19 +232,34 @@ case "${ACTION-}" in
true
;;
*)
- die "unknown or no action specified."
+ ${want_reset} || die "unknown or no action specified."
+ exit 0
;;
esac
+
+# edit files
q="\"\'"
re_pyfile_ver="^(\s*version\s*=\s*)[${q}]?([^\s;,${q}]*)[${q}]?(\s*[;,]?\s*)\$"
+v0=0
_fmt="edit %-18s: %8s -> %s\n"
for fname in ${PY_FILES_TO_EDIT}; do
+ inc "${v0}"
f="${S}/${fname}"
fver="$(sed -rn -e "s@${re_pyfile_ver}@\2@p" < "${f}")"
printf "${_fmt}" "${fname}" "${fver}" "${V}"
- ${do_pretend} || sed -r -e "s@${re_pyfile_ver}@\1\"${V}\"\3@" -i "${f}"
+ ${want_pretend} || \
+ autodie sed -r -e "s@${re_pyfile_ver}@\1\"${V}\"\3@" -i "${f}"
+ do_git_add "${f}"
done
+
+inc "${v0}"
printf "${_fmt}" "VERSION" "${OLDVER}" "${V}"
-${do_pretend} || echo "${V}" > "${S}/VERSION"
+${want_pretend} || echo "${V}" > "${S}/VERSION" || die "failed to write VERSION"
+do_git_add "${S}/VERSION"
+
+[ ${v0} -gt 0 ] || die "numfiles?"
+printf "edited %d files in total.\n" "${v0}"
+
+autodie do_git_commit_and_tag "${V}" "${v0}"
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [gentoo-commits] proj/R_overlay:master commit in: bin/build/
@ 2014-07-18 16:20 André Erdmann
0 siblings, 0 replies; 3+ messages in thread
From: André Erdmann @ 2014-07-18 16:20 UTC (permalink / raw
To: gentoo-commits
commit: 6bb55c0f9bb8925a50cb4e2f9aec302da6037500
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Fri Jul 18 15:33:53 2014 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Fri Jul 18 15:33:53 2014 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=6bb55c0f
bin/build/setver.sh: change suffix handling
---
bin/build/setver.sh | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/bin/build/setver.sh b/bin/build/setver.sh
index ae8b048..bf5bf67 100755
--- a/bin/build/setver.sh
+++ b/bin/build/setver.sh
@@ -170,10 +170,11 @@ while [ ${#} -gt 0 ]; do
--force-commit) want_forcecommit=true ;;
--git-tag) want_gittag=true ;;
- [Mmp]bump) ACTION="${1}" ;;
- '+') ACTION=pbump ;;
- '++') ACTION=mbump ;;
- *.*.*) ACTION=setver; V="${1}" ;;
+ [Mmp]bump) ACTION="${1}" ;;
+ '+') ACTION=pbump ;;
+ '++') ACTION=mbump ;;
+ *.*.*) ACTION=setver; V="${1}" ;;
+ *.*.*[-_]*) ACTION=setver; V="${1}"; new_suffix= ;;
setver)
[ -n "${2-}" ] || die "one non-empty arg required after '${1}'."
@@ -218,18 +219,18 @@ autodie parse_version "${OLDVER}"
case "${ACTION-}" in
pbump)
inc "${plvl}"
- V="${major}.${minor}.${v0}${new_suffix}"
+ V="${major}.${minor}.${v0}"
;;
mbump)
inc "${minor}"
- V="${major}.${v0}.0${new_suffix}"
+ V="${major}.${v0}.0"
;;
Mbump)
inc "${major}"
- V="${v0}.0.0${new_suffix}"
+ V="${v0}.0.0"
;;
setver)
- true
+ V="${V}${new_suffix}"
;;
*)
${want_reset} || die "unknown or no action specified."
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [gentoo-commits] proj/R_overlay:master commit in: bin/build/
@ 2014-07-18 16:20 André Erdmann
0 siblings, 0 replies; 3+ messages in thread
From: André Erdmann @ 2014-07-18 16:20 UTC (permalink / raw
To: gentoo-commits
commit: 9fd99e101f586bf91f551b79e8296ca4a5c9ce41
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Fri Jul 18 15:36:52 2014 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Fri Jul 18 15:36:52 2014 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=9fd99e10
bin/build/setver.sh: --help
---
bin/build/setver.sh | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/bin/build/setver.sh b/bin/build/setver.sh
index bf5bf67..221bb40 100755
--- a/bin/build/setver.sh
+++ b/bin/build/setver.sh
@@ -2,6 +2,8 @@
#
# Sets roverlay's version.
#
+print_help() {
+cat << EOF | sed -re 's,^[#]\s?,,'
# Usage: setver [-S,--src <dir>] [--pretend] [--suffix <str>] [--reset]
# [--git-add] [--git-commit] [--force-commit] [--git-tag]
# [+,pbump|++,mbump|Mbump|[setver] <ver>]
@@ -24,6 +26,8 @@
# --force-commit -- enforce git commit (allow other files)
# --git-tag -- run git-tag <newver> after git-commit
#
+EOF
+}
set -e
set -u
readonly IFS_DEFAULT="${IFS}"
@@ -194,6 +198,10 @@ while [ ${#} -gt 0 ]; do
echo "VERSION"
exit 0
;;
+ -h|--help)
+ print_help
+ exit 0
+ ;;
*)
die "unknown arg: ${1}" 64
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-07-18 16:20 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-18 16:20 [gentoo-commits] proj/R_overlay:master commit in: bin/build/ André Erdmann
-- strict thread matches above, loose matches on Subject: below --
2014-07-18 16:20 André Erdmann
2014-06-05 22:09 André Erdmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox