Initial commit
diff --git a/formula-fetch.sh b/formula-fetch.sh
new file mode 100755
index 0000000..03153d3
--- /dev/null
+++ b/formula-fetch.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+
+# Usage:
+# ./formula-fetch.sh <Formula URL> <Name> <Branch>
+#
+# Example:
+# GIT_FORMULAS_PATH=.vendor/formulas ./formula-fetch.sh https://github.com/salt-formulas/salt-formula-salt
+# --
+# GIT_FORMULAS_PATH=/usr/share/salt-formulas/env/_formulas
+# xargs -n1 ./formula-fetch.sh < dependencies.txt
+
+
+# Parse git dependencies from metadata.yml
+# $1 - path to <formula>/metadata.yml
+# sample to output:
+# https://github.com/salt-formulas/salt-formula-git git
+# https://github.com/salt-formulas/salt-formula-salt salt
+function fetchDependencies() {
+ METADATA="$1";
+ grep -E "^dependencies:" "$METADATA" >/dev/null || return 0
+ (python - "$METADATA" | while read dep; do fetchGitFormula "$dep"; done) <<-DEPS
+ import sys,yaml
+ for dep in yaml.load(open(sys.argv[1], "ro"))["dependencies"]:
+ print("{source} {name}").format(**dep)
+ DEPS
+}
+
+# Fetch formula from git repo
+# $1 - formula git repo url
+# $2 - formula name (optional)
+# $3 - branch (optional)
+function fetchGitFormula() {
+ test -n "${FETCHED}" || declare -a FETCHED=()
+ export GIT_FORMULAS_PATH=${GIT_FORMULAS_PATH:-/usr/share/salt-formulas/env/_formulas}
+ mkdir -p "$GIT_FORMULAS_PATH"
+ if [ -n "$1" ]; then
+ source="$1"
+ name="$2"
+ test -n "$name" || name="${source//*salt-formula-}"
+ test -z "$3" && branch=master || branch=$3
+ if ! [[ "${FETCHED[*]}" =~ $name ]]; then # dependency not yet fetched
+ echo "Fetching: $name"
+ if test -e "$GIT_FORMULAS_PATH/$name"; then
+ pushd "$GIT_FORMULAS_PATH/$name" &>/dev/null
+ test ! -e .git || git pull -r
+ popd &>/dev/null
+ else
+ echo "git clone $source $GIT_FORMULAS_PATH/$name -b $branch"
+ git clone "$source" "$GIT_FORMULAS_PATH/$name" -b "$branch"
+ fi
+ # install dependencies
+ FETCHED+=($name)
+ fetchDependencies "$GIT_FORMULAS_PATH/$name/metadata.yml"
+ fi
+ else
+ echo Usage: fetchGitFormula "<git repo>" "[local formula directory name]" "[branch]"
+ fi
+}
+
+function linkFormulas() {
+ # OPTIONAL: Link formulas from git/pkg
+
+ SALT_ROOT=$1
+ SALT_ENV=${2:-/usr/share/salt-formulas/env}
+
+ # form git, development versions
+ find "$SALT_ENV"/_formulas -maxdepth 1 -mindepth 1 -type d -print0| xargs -0 -n1 --no-run-if-empty basename | xargs -I{} --no-run-if-empty \
+ ln -fs "$SALT_ENV"/_formulas/{}/{} "$SALT_ROOT"/{};
+
+ # form pkgs
+ find "$SALT_ENV" -maxdepth 1 -mindepth 1 -path "*_formulas*" -prune -o -name "*" -type d -print0| xargs -0 -n1 --no-run-if-empty basename | xargs -I{} --no-run-if-empty \
+ ln -fs "$SALT_ENV"/{} "$SALT_ROOT"/{};
+
+}
+
+# detect if file is being sourced
+[[ "$0" != "$BASH_SOURCE" ]] || {
+ # if executed, run implicit function
+ fetchGitFormula "${@}"
+}
+