summaryrefslogtreecommitdiff
path: root/libexec/appstore-server-sync
diff options
context:
space:
mode:
Diffstat (limited to 'libexec/appstore-server-sync')
-rwxr-xr-xlibexec/appstore-server-sync99
1 files changed, 99 insertions, 0 deletions
diff --git a/libexec/appstore-server-sync b/libexec/appstore-server-sync
new file mode 100755
index 0000000..5938962
--- /dev/null
+++ b/libexec/appstore-server-sync
@@ -0,0 +1,99 @@
+#!/bin/bash
+
+set -e
+set -u
+
+APPSTORE_HOME=$(cd $(dirname "$0")/.. && pwd)
+
+. $APPSTORE_HOME/lib/common
+# HEADER END
+
+conf_get() {
+ name=$1; shift
+ var=$1; shift
+ value=$(app cat-conf -f "$APPSTORE/appstore.config" -k "$var" | cut -f 2- -d =)
+ eval ${name}='${value}'
+}
+
+check_app() {
+ local app=$1; shift
+
+ dir=$app
+ conf_get resolver "${app}.resolver"
+ conf_get resolver_args "${app}.resolver_args"
+ conf_get version "${app}.version"
+ conf_get state "${app}.state"
+
+ if [[ -z $resolver ]] || [[ -z $resolver_args ]] || [[ -z $version ]] || [[ -z $state ]]
+ then
+ echo "$app: invalid configuration, missing one of ${app}.resolver, ${app}.resolver_args, ${app}.version, ${app}.state"
+ return
+ fi
+
+ cd "$APPSTORE"
+
+ if [[ -d $dir ]]
+ then
+ cd "$dir"
+ dir=`pwd`
+
+ if [[ -r $APPSTORE/$app.config ]]
+ then
+ app conf import $APPSTORE/$app.config
+ fi
+ app conf set app.version "$version"
+ app upgrade
+ else
+ echo "$dir: new app"
+ if [[ -r ${dir}.config ]]
+ then
+ append_config="${dir}.config"
+ fi
+
+ app init \
+ ${append_config:+-c} $append_config \
+ -d "$dir" \
+ "$resolver" "$resolver_args"
+ cd "$dir"
+ dir=`pwd`
+ fi
+
+ cd "$dir"
+
+ if [[ $state = enabled ]]
+ then
+ app start || true
+ else
+ app stop || true
+ fi
+}
+
+REPO="$1"; shift
+APPSTORE="$1"; shift
+
+make_absolute REPO
+make_absolute APPSTORE
+
+cd "$APPSTORE"
+
+# This should probably be a git fetch && checkout origin/HEAD --force
+# or whatever.
+git pull -q "$REPO" master
+
+conf_get apps appstore.apps
+apps=$(echo "$apps" | sed "s/, */,/g")
+
+IFS=,
+for app in $apps
+do
+ if [[ $app = "" ]]
+ then
+ continue
+ fi
+
+ assert_valid_app_name "$app"
+
+ check_app "$app" || true
+done
+
+echo "Done."