summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/functions10
-rw-r--r--lib/git33
-rw-r--r--lib/misc114
-rw-r--r--lib/tmpfile45
4 files changed, 202 insertions, 0 deletions
diff --git a/lib/functions b/lib/functions
new file mode 100644
index 0000000..473ea9e
--- /dev/null
+++ b/lib/functions
@@ -0,0 +1,10 @@
+#!/bin/bash
+#
+# Common functions.
+#
+
+# Setup environment
+hydra_set_env $*
+source $APP_BASE/lib/git
+source $APP_BASE/lib/misc
+source $APP_BASE/lib/tmpfile
diff --git a/lib/git b/lib/git
new file mode 100644
index 0000000..6e7f05a
--- /dev/null
+++ b/lib/git
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+# Add a pattern into gitignore
+function hydra_git_ignore {
+ if [ ! -z "$BASEDIR/.gitignore" ]; then
+ echo $1 > $BASEDIR/.gitignore
+ hydra_exec git $BASEDIR add .gitignore
+ else
+ if ! grep -q -e "^$1$" $BASEDIR/.gitignore; then
+ echo $1 >> $BASEDIR/.gitignore
+ fi
+ fi
+}
+
+# Check if a folder is inside a git repository
+function hydra_is_git {
+ if [ -z "$1" ]; then
+ false
+ elif [ ! -d "$1" ]; then
+ false
+ elif [ -d "$1/.git" ]; then
+ true
+ else
+ cwd="`pwd`"
+ cd $1 && git="`git status &> /dev/null`" && cd $cwd
+
+ if [ "$git" != "128" ]; then
+ true
+ else
+ false
+ fi
+ fi
+}
diff --git a/lib/misc b/lib/misc
new file mode 100644
index 0000000..5691465
--- /dev/null
+++ b/lib/misc
@@ -0,0 +1,114 @@
+#!/bin/bash
+
+# Setup main configuration and load preferences
+function hydra_config_load {
+ if [ -f "$HOME/.$NAME" ]; then
+ echo "Converting legacy configuration scheme..."
+ mv $HOME/.$NAME $HOME/.$NAME.tmp
+ mkdir $HOME/.$NAME
+ mv $HOME/.$NAME.tmp $CONFIG
+ fi
+
+ if [ ! -e "$CONFIG" ]; then
+ echo "Creating $CONFIG..."
+ mkdir `dirname $CONFIG`
+ touch $CONFIG
+ chmod 600 $CONFIG
+ echo "# Hydra config file." > $CONFIG
+ echo "" >> $CONFIG
+ fi
+
+ hydra_config_load_preferences
+}
+
+# Load config preferences
+function hydra_config_load_preferences {
+ # Load custom keyring preferences
+ if [ ! -z "$PREFERENCES" ] && [ -f "$PREFERENCES" ]; then
+ source $PREFERENCES
+ fi
+}
+
+# Load a parameter from config
+function hydra_config {
+ if [ -z "$CONFIG" ]; then
+ echo "Your have to set CONFIG variable in the code"
+ exit 1
+ elif [ -e "$CONFIG" ]; then
+ grep -e "^$1=" $CONFIG | tail -n 1 | cut -d = -f 2 | sed -e 's/"//g' -e "s/'//g" | sed -e 's/ *#.*$//'
+ else
+ echo "Config file not found: $CONFIG"
+ exit 1
+ fi
+}
+
+# Check if there is a given action
+function hydra_has_action {
+ if [ -z "$ACTIONS" ]; then
+ echo "Your have to set ACTIONS variable in the code"
+ exit 1
+ fi
+
+ if [ -e "$ACTIONS/$1" ]; then
+ true
+ else
+ false
+ fi
+}
+
+# Execute an action
+function hydra_exec {
+ # Setup
+ action="$1"
+ basedir="$2"
+ shift 2
+
+ # Dispatch
+ if hydra_has_action $action; then
+ $ACTIONS/$action $basedir $*
+ fi
+}
+
+# Set needed environment variables and do basic checks.
+function hydra_set_env {
+ if [ -z "$1" ]; then
+ echo "Error: missing arguments for hydra_set_env"
+ exit 1
+ fi
+}
+
+# Get a command argument
+function hydra_get_command {
+ # Aditional parameters
+ COMMAND="$1"
+
+ if [ -z "$COMMAND" ]; then
+ hydra_action_usage command
+ exit 1
+ fi
+}
+
+# Run the action usage
+function hydra_action_usage {
+ if [ "`type -t "hydra_usage_$BASENAME"`" == "function" ]; then
+ # Use custom action usage
+ hydra_usage_$BASENAME
+ else
+ # Default usage
+ echo "Usage: hydra|hydractl <command> [arguments]"
+ fi
+}
+
+function hydra_dispatch {
+ BASEDIR="`hydra_config $KEYRING`"
+
+ # Dispatch
+ if [ ! -z "$BASEDIR" ]; then
+ shift 2
+ hydra_exec $ACTION $BASEDIR $*
+ exit $?
+ else
+ echo "No keydir configured for $KEYRING"
+ exit 1
+ fi
+}
diff --git a/lib/tmpfile b/lib/tmpfile
new file mode 100644
index 0000000..886d61c
--- /dev/null
+++ b/lib/tmpfile
@@ -0,0 +1,45 @@
+#!/bin/bash
+
+# Setup a temporary file
+function hydra_set_tmpfile {
+ if [ -z "$BASEDIR" ]; then
+ echo "Please set BASEDIR before creating a tmp file"
+ exit 1
+ fi
+
+ if [ -z "$1" ]; then
+ template="$BASEDIR/tmp/hydra.XXXXXXXXXX"
+ else
+ template="$BASEDIR/tmp/$1.XXXXXXXXXX"
+ fi
+
+ mkdir -p $BASEDIR/tmp
+ hydra_git_ignore 'tmp/*'
+
+ if [ "$2" == "-d" ]; then
+ TMPWORK="`mktemp -d $template`"
+ else
+ TMPWORK="`mktemp $template`"
+ fi
+
+ if [ "$?" != "0" ]; then
+ echo "Error: can't set TMPWORK $TMPWORK"
+ exit 1
+ fi
+
+ trap "hydra_unset_tmpfile $TMPWORK; exit" INT TERM EXIT
+}
+
+# Remove a temporary file
+function hydra_unset_tmpfile {
+ if [ -z "$1" ]; then
+ echo "No tmp file set"
+ fi
+
+ rm -f $1
+
+ if [ "$?" != "0" ]; then
+ echo "Warning: could not delete file $1. Please delete it manually as it might have sensitive information."
+ exit 1
+ fi
+}