aboutsummaryrefslogtreecommitdiff
path: root/lib/common
diff options
context:
space:
mode:
Diffstat (limited to 'lib/common')
-rw-r--r--lib/common168
1 files changed, 168 insertions, 0 deletions
diff --git a/lib/common b/lib/common
new file mode 100644
index 0000000..22c8cd0
--- /dev/null
+++ b/lib/common
@@ -0,0 +1,168 @@
+#!/bin/bash
+
+assert_is_app() {
+ local check_link=yes
+
+ while getopts "C" opt
+ do
+ case $opt in
+ C)
+ check_link=no
+ ;;
+ esac
+ done
+
+ if [ ! -d .app ]
+ then
+ echo "This is not an app, missing directory: '.app'" >&2
+ exit 1
+ fi
+
+ if [[ $check_link == yes ]]
+ then
+ if [ ! -e current ]
+ then
+ echo "Missing 'current' link." >&2
+ exit 1
+ fi
+ fi
+}
+
+list_apps() {
+ local filter_name=$1; shift
+ local filter_instnace=$1; shift
+ local vars="$@"
+
+ sort $apps/.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
+
+ if [ -n "$filter_instance" -a "$filter_instance" != "$instance" ]
+ 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() {
+ local name=$1
+ local instance=$2
+
+ if [ ! -L $apps/$name/$instance/current ]
+ then
+ return 0
+ fi
+
+ (
+ cd $apps/$name/$instance
+ ls -l current | sed -n "s,.* current -> versions/\(.*\)/root,\1,p"
+ )
+}
+
+find_versions() {
+ local name="$1"
+ local instance="$2"
+
+ if [ ! -d $apps/$name/$instance/versions ]
+ then
+ return 0
+ fi
+
+ (
+ cd $apps/$name/$instance/versions
+ ls -1d *
+ )
+}
+
+grep_path() {
+ local regex="$1"; shift
+ local path="$1"; shift
+
+ find `echo $path | tr : " "` -type f -executable 2>/dev/null | (egrep "$regex" || exit 0)
+# IFS=:
+# for x in $path
+# do
+# ls $x/* 2>/dev/null | while read f
+# do
+# if [[ $f =~ $regex ]]
+# then
+# echo $f
+# fi
+# done
+# done
+}
+
+# TODO: set ulimit
+# TODO: set umask
+# TODO: change group newgrp/sg
+run_app() {
+ local name=$1; shift
+ local instance=$1; shift
+ local bin=$1; shift
+ local method=$1; shift
+
+ assert_is_instance operate_usage "$name" "$instance"
+
+ local x=""
+ if [ ! -z "$APPSH_APPS" ]
+ then
+ x="$APPSH_APPS/"
+ fi
+
+ (
+ cd $x$name/$instance
+ APPSH_INSTANCE_HOME=`pwd`
+ cd current
+
+ local e=`$APPSH_HOME/bin/app-cat-conf -f $apps/$name/$instance/current/etc/app.conf -g env | cut -f 2- -d .`
+ #e="`get_conf_in_group $apps $name $instance env`"
+ # This magically get the expansion of $u correct.
+ IFS="
+"
+
+ # Set a default PATH which can be overridden by the application's settings
+ set +e
+ env -i \
+ PATH=/bin:/usr/bin \
+ $e \
+ PWD="$PWD" \
+ APPSH_METHOD=$method \
+ APPSH_APPS=$apps \
+ APPSH_HOME=$APPSH_HOME \
+ APPSH_NAME=$name \
+ APPSH_INSTANCE=$instance \
+ APPSH_INSTANCE_HOME=$APPSH_INSTANCE_HOME \
+ $bin "$@"
+ local ret=$?
+ set +x
+ set -e
+
+ exit $ret
+ )
+}