libexec/unlock in alpha_omega-0.0.142 vs libexec/unlock in alpha_omega-0.0.150
- old
+ new
@@ -1,7 +1,119 @@
#!/bin/bash -e
+function bump_version {
+ ensure_clean_git_status
+
+ local_file=
+ if [[ -f VERSION || -L VERSION ]]; then
+ local_file=1
+ if [[ ! -e VERSION ]]; then
+ echo "ERROR: cannot write to VERSION file" 1>&2
+ exit 1
+ fi
+ fi
+
+ tmp_version=$(mktemp -t XXXXXXXXX)
+ if [[ -n $local_file ]]; then
+ cp VERSION $tmp_version
+ else
+ git tag | perl -ne 'm{^v(\d+)\.(\d+)\.(\d+)$} && printf("v%03d.%03d.%03d v%d.%d.%d\n",$1,$2,$3,$1,$2,$3)' | sort -r | head -1 | awk '{print $2}' > $tmp_version
+ fi
+
+ case "$1" in
+ patch|minor|major)
+ bump=$1; shift
+ set $(cat $tmp_version | sed 's#\.# #g')
+ case "$bump" in
+ patch)
+ echo "$1.$2.$(($3 + 1))"
+ ;;
+ minor)
+ echo "$1.$(($2 + 1)).0"
+ ;;
+ major)
+ echo "$(($1 + 1)).0.0"
+ ;;
+ esac > $tmp_version
+ ;;
+ *)
+ ver_new=$1; shift
+ set $(echo "$ver_new" | sed 's#\.# #g') 0
+ M=$1; shift
+ m=$1; shift
+ p=$1; shift
+
+ (echo "$(($M+0)).$(($m+0)).$(($p+0))" > $tmp_version) 2>&-
+ ver_new_same=$(cat $tmp_version)
+
+ if [[ $ver_new != $ver_new_same ]]; then
+ echo "ERROR: invalid version: $ver_new" 1>&2
+ exit 1
+ fi
+ ;;
+ esac
+
+ ver_bumped=$(cat $tmp_version)
+ rm -f $tmp_version
+ ensure_git_tag_available "v$ver_bumped"
+
+ if [[ -n $local_file ]]; then
+ echo $ver_bumped > VERSION
+ git add VERSION
+ if [[ -f Gemfile ]]; then
+ bundle check 2>&1 >/dev/null || { bundle --quiet install --local --path vendor/bundle || bundle check > /dev/null; }
+ git add Gemfile.lock
+ fi
+
+ git commit -m "bump: $ver_bumped"
+ git push
+ fi
+
+ git_tag "v$ver_bumped"
+ echo $ver_bumped
+}
+
+function ensure_git_tag_available {
+ version=$1; shift
+ git fetch --tags
+ remote_sha=$(git ls-remote origin $version | awk '{print $1}')
+ if [[ -n $remote_sha ]]; then
+ echo "ERROR: already a remote tag $version, bump again" 1>&2
+ exit 1
+ fi
+
+ local_sha=$(git show-ref $version | awk '{print $1}')
+ if [[ -n $local_sha ]]; then
+ echo "ERROR: already a local tag $version" 1>&2
+ exit 1
+ fi
+}
+
+function git_tag {
+ local version=$1; shift
+
+ ensure_git_tag_available "$version"
+
+ git tag $version
+ git push origin tag $version
+ remote_sha=$(git ls-remote origin $version | awk '{print $1}')
+ local_sha=$(git show-ref $version | awk '{print $1}')
+ if [[ $remote_sha != $local_sha ]]; then
+ echo "ERROR: remote tag $version does not match local SHA" 1>&2
+ exit 1
+ fi
+}
+
+function ensure_clean_git_status {
+ local lines=$(git status -s -uno | wc -l | awk '{print $1}')
+ if [[ $lines != "0" ]]; then
+ echo "ERROR: git status is not clean, cannot tag" 1>&2
+ git status -s -uno
+ exit 1
+ fi
+}
+
case "$(basename $0)" in
bump)
true
;;
*)
@@ -71,58 +183,11 @@
fi
} 2>&1 | grep eea914aaa8dde6fdae29242b1084a2b0415eefaf | sed 's#eea914aaa8dde6fdae29242b1084a2b0415eefaf ##'
;;
bump)
- case "$1" in
- patch|minor|major)
- bump=$1; shift
- set $(cat VERSION | sed 's#\.# #g')
- case "$bump" in
- patch)
- echo "$1.$2.$(($3 + 1))"
- ;;
- minor)
- echo "$1.$(($2 + 1)).0"
- ;;
- major)
- echo "$(($1 + 1)).0.0"
- ;;
- esac > VERSION
- ;;
- *)
- ver_new=$1; shift
- set $(echo "$ver_new" | sed 's#\.# #g') 0
- M=$1; shift
- m=$1; shift
- p=$1; shift
-
- tmp_version=$(mktemp -t XXXXXXXXX)
- (echo "$(($M+0)).$(($m+0)).$(($p+0))" > $tmp_version) 2>&-
- ver_new_same=$(cat $tmp_version)
- rm -f $tmp_version
-
- if [[ $ver_new = $ver_new_same ]]; then
- echo "$ver_new" > VERSION
- else
- echo "ERROR: invalid version: $ver_new" 1>&2
- exit 1
- fi
- ;;
- esac
-
- if [[ -f Gemfile ]]; then
- bundle check 2>&1 >/dev/null || { bundle --quiet install --local --path vendor/bundle || bundle check > /dev/null; }
- git add Gemfile.lock
- fi
-
- git add VERSION
-
- ver_bumped=$(cat VERSION)
- git commit -m "bump: $ver_bumped"
- git tag "v$ver_bumped"
- echo $ver_bumped
+ bump_version "$@"
;;
*)
LOCAL_ONLY=
if [[ -n $1 ]]; then
@@ -188,10 +253,46 @@
compare)
bundle exec cap "$@" deploy:compare
;;
migrate)
- bundle exec cap "$@" deploy:migrate
+ want_list=
+ if [[ $1 = "list" ]]; then
+ want_list=1; shift
+ fi
+
+ change_group=
+ migration=
+ case $1 in
+ data)
+ change_group=$1; shift
+ ;;
+ pre)
+ change_group=$1; shift
+ ;;
+ during)
+ change_group=$1; shift
+ ;;
+ post)
+ change_group=$1; shift
+ ;;
+ [0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789])
+ migration=$1; shift
+ ;;
+ esac
+
+ if [[ -n $change_group ]]; then
+ if [[ -n $want_list ]]; then
+ echo "listing change group $change_group"
+ else
+ echo "running change group $change_group"
+ fi
+ elif [[ -n $migration ]]; then
+ echo "running migration $migratio"
+ elif [[ -n $want_list ]]; then
+ echo "listing migrations"
+ fi
+ #bundle exec cap "$@" deploy:migrate
;;
*)
bundle exec cap "$@"
;;