summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2012-10-09 13:32:46 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2012-10-09 13:32:46 +0200
commitd60f9ab93ffcd694a5110dc72213d34e8594a0f8 (patch)
tree4772578dbaf07bc4e8adae7917640053db8fa0fb
parent48edc9a28e643f54a6d545226a0c2f4c58cd248b (diff)
downloadapp.sh-d60f9ab93ffcd694a5110dc72213d34e8594a0f8.tar.gz
app.sh-d60f9ab93ffcd694a5110dc72213d34e8594a0f8.tar.bz2
app.sh-d60f9ab93ffcd694a5110dc72213d34e8594a0f8.tar.xz
app.sh-d60f9ab93ffcd694a5110dc72213d34e8594a0f8.zip
o Adding list-versions and set-version.
-rwxr-xr-xapp162
-rw-r--r--app_completion4
2 files changed, 131 insertions, 35 deletions
diff --git a/app b/app
index 430191d..55aa74d 100755
--- a/app
+++ b/app
@@ -69,9 +69,10 @@ download_artifact() {
}
assert_is_instance() {
- usage=$1
- name=$2
- instance=$3
+ local usage=$1
+ local name=$2
+ local instance=$3
+ local check_link=$4
if [ -z "$name" ]
then
@@ -89,12 +90,14 @@ assert_is_instance() {
exit 1
fi
- if [ ! -e $name/$instance/current ]
+ if [ "$check_link" != "no" ]
then
- echo "Missing 'current' link." >&2
- exit 1
+ if [ ! -e $name/$instance/current ]
+ then
+ echo "Missing 'current' link." >&2
+ exit 1
+ fi
fi
-
}
install_usage() {
@@ -232,8 +235,7 @@ method_install() {
)
echo "Changing current symlink"
- rm -f $name/$instance/current
- ln -s versions/$resolved_version/root $name/$instance/current
+ ln -f -s versions/$resolved_version/root $name/$instance/current
(
cd $name/$instance/current
@@ -393,7 +395,7 @@ find_versions() {
(
cd $BASEDIR/$name/$instance/versions
- ls -1 *
+ ls -1d *
)
}
@@ -472,15 +474,119 @@ method_list() {
fi
}
+list_versions_usage() {
+ if [ -n "$1" ]
+ then
+ echo "Error:" $@ >&2
+ fi
+
+ echo "usage: list-versions -n name -i instance [-P]" >&2
+ echo " -P - parseable output" >&2
+ exit 1
+}
+
+method_list_versions() {
+ local name
+ local instance
+ local version
+ local mode="pretty"
+
+ while getopts "n:i:P" opt
+ do
+ case $opt in
+ n)
+ name=$OPTARG
+ ;;
+ i)
+ instance=$OPTARG
+ ;;
+ v)
+ version=$OPTARG
+ ;;
+ P)
+ mode="parseable"
+ ;;
+ \?)
+ set_current_usage "Invalid option: -$OPTARG"
+ ;;
+ esac
+ done
+
+ assert_is_instance set_current_usage "$name" "$instance"
+
+ if [ $mode = "pretty" ]
+ then
+ echo "Available versions for $name/$instance:"
+ fi
+
+ find_versions $name $instance
+
+ return 0
+}
+
+set_current_usage() {
+ if [ -n "$1" ]
+ then
+ echo "Error:" $@ >&2
+ fi
+
+ echo "usage: set-current -n name -i instance -v version" >&2
+ exit 1
+}
+
+method_set_current() {
+ local name
+ local instance
+ local version
+
+ while getopts "n:i:v:" opt
+ do
+ case $opt in
+ n)
+ name=$OPTARG
+ ;;
+ i)
+ instance=$OPTARG
+ ;;
+ v)
+ version=$OPTARG
+ ;;
+ \?)
+ set_current_usage "Invalid option: -$OPTARG"
+ ;;
+ esac
+ done
+
+ if [ -z "$version" ]
+ then
+ echo "Missing required option -v version." >&2
+ exit 1
+ fi
+
+ assert_is_instance set_current_usage "$name" "$instance" "no"
+
+ if [ ! -d $BASEDIR/$name/$instance/versions/$version ]
+ then
+ echo "Invalid version: $version."
+ exit 1
+ fi
+
+ ln -f -s versions/$version/root $BASEDIR/$name/$instance/current
+
+ return 0
+}
+
method_usage() {
echo "usage: $0 <method>" >&2
echo "" >&2
echo "Available methods:" >&2
- echo " install - Installs an application" >&2
- echo " list - List all installed applications" >&2
- echo " start - Starts an applications" >&2
- echo " stop - Stops an applications" >&2
- echo " conf - Application configuration management" >&2
+ echo " conf - Application configuration management" >&2
+ echo " install - Installs an application" >&2
+ echo " list - List all installed applications" >&2
+ echo " list-versions - List all available versions for a single application" >&2
+ echo " set-current - Set the current version" >&2
+ echo " start - Starts an applications" >&2
+ echo " stop - Stops an applications" >&2
echo "" >&2
echo "Run '$0 <method>' to get more help" >&2
}
@@ -494,23 +600,13 @@ then
fi
case "$method" in
- install)
- method_install $@
- ;;
- start)
- method_start $@
- ;;
- stop)
- method_stop $@
- ;;
- list)
- method_list $@
- ;;
- conf)
- method_conf $@
- ;;
- *)
- method_usage $@
- ;;
+ conf) method_conf $@ ;;
+ install) method_install $@ ;;
+ list) method_list $@ ;;
+ list-versions) method_list_versions $@ ;;
+ set-current) method_set_current $@ ;;
+ start) method_start $@ ;;
+ stop) method_stop $@ ;;
+ *) method_usage $@ ;;
esac
exit $?
diff --git a/app_completion b/app_completion
index 231a714..0647c6d 100644
--- a/app_completion
+++ b/app_completion
@@ -32,14 +32,14 @@ _complete_appsh() {
case $prev in
-n)
values=$(./app list -P name)
- COMPREPLY=( $(compgen -W "$values" -- ${cur}) )
+ COMPREPLY=($(compgen -W "$values" -- ${cur}))
return 0
;;
-i)
if [ -n "$has_n" ]
then
values=$(./app list -n $has_n -P instance)
- COMPREPLY=( $(compgen -W "$values" -- ${cur}) )
+ COMPREPLY=($(compgen -W "$values" -- ${cur}))
return 0
fi
;;