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 "${@}"
+}
+