summaryrefslogtreecommitdiff
path: root/.app/lib/app-common
diff options
context:
space:
mode:
Diffstat (limited to '.app/lib/app-common')
-rw-r--r--.app/lib/app-common100
1 files changed, 100 insertions, 0 deletions
diff --git a/.app/lib/app-common b/.app/lib/app-common
new file mode 100644
index 0000000..11e724b
--- /dev/null
+++ b/.app/lib/app-common
@@ -0,0 +1,100 @@
+#!/bin/bash
+
+assert_is_instance() {
+ local usage=$1
+ local name=$2
+ local instance=$3
+ local check_link=$4
+
+ if [ -z "$name" ]
+ then
+ $usage "Missing required option -n."
+ fi
+
+ if [ -z "$instance" ]
+ then
+ $usage "Missing required option -i."
+ fi
+
+ if [ ! -d $name/$instance ]
+ then
+ echo "No such application/instance: $name/$instance." >&2
+ exit 1
+ fi
+
+ if [ "$check_link" != "no" ]
+ then
+ if [ ! -e $name/$instance/current ]
+ then
+ echo "Missing 'current' link." >&2
+ exit 1
+ fi
+ fi
+}
+
+list_apps() {
+ filter_name=$1
+ shift
+ vars="$@"
+
+ sort $BASEDIR/.app/var/list | while read line
+ do
+ echo $line | (IFS=:; while read name instance version junk
+ do
+ if [ -n "$filter_name" -a "$filter_name" != "$name" ]
+ then
+ continue
+ fi
+
+ local line=""
+ IFS=" "; for var in $vars
+ do
+ case $var in
+ name) x=$name;;
+ instance) x=$instance;;
+ version) x=$version;;
+ current_version) x=`find_current_version $name $instance`;;
+ *) x="";;
+ esac
+
+ if [ -z "$line" ]
+ then
+ line="$line$x"
+ else
+ line="$line:$x"
+ fi
+ done
+ echo $line
+ done)
+ done
+}
+
+find_current_version() {
+ name=$1
+ instance=$2
+
+ if [ ! -L $BASEDIR/$name/$instance/current ]
+ then
+ return 0
+ fi
+
+ (
+ cd $BASEDIR/$name/$instance
+ ls -l current | sed -n "s,.* current -> versions/\(.*\)/root,\1,p"
+ )
+}
+
+find_versions() {
+ name=$1
+ instance=$2
+
+ if [ ! -d $BASEDIR/$name/$instance/versions ]
+ then
+ return 0
+ fi
+
+ (
+ cd $BASEDIR/$name/$instance/versions
+ ls -1d *
+ )
+}