shopt -s extglob

[ $(uname) == "Darwin" ] && SED_FLAG='-l' || SED_FLAG='-u'

# Syntax sugar.
indent() {
  RE="s/^/       /"
  sed $SED_FLAG "$RE"
}

# Clean up pip output
cleanup() {
  sed $SED_FLAG -e 's/\.\.\.\+/.../g' | sed $SED_FLAG '/already satisfied/Id' | sed $SED_FLAG -e '/Overwriting/Id' |  sed $SED_FLAG -e '/python executable/Id' | sed $SED_FLAG -e '/no previously-included files/Id'
}

# Buildpack Steps.
function puts-step (){
  echo "-----> $@"
}

# Buildpack Warnings.
function puts-warn (){
  echo " !     $@"
}

# Usage: $ set-env key value
function set-env (){
  echo "export $1=$2" >> $PROFILE_PATH
}

# Usage: $ set-default-env key value
function set-default-env (){
  echo "export $1=\${$1:-$2}" >> $PROFILE_PATH
}

# Usage: $ set-default-env key value
function un-set-env (){
  echo "unset $1" >> $PROFILE_PATH
}

# Does some serious copying.
deep-cp() {
  declare source="$1" target="$2"

  mkdir -p "$target"

  # cp doesn't like being called without source params,
  # so make sure they expand to something first.
  # subshell to avoid surprising caller with shopts.
  (
    shopt -s nullglob dotglob
    set -- "$source"/!(tmp|.|..)
    [[ $# == 0 ]] || cp -a "$@" "$target"
  )
}

# Does some serious moving.
function deep-mv (){
  deep-cp $1 $2

  rm -fr $1/!(tmp)
  find -H $1 -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec rm -fr '{}' \;
}
