diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/functions | 10 | ||||
-rw-r--r-- | lib/git | 33 | ||||
-rw-r--r-- | lib/misc | 114 | ||||
-rw-r--r-- | lib/tmpfile | 45 |
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 @@ -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 +} |