function warpdrive() {
    case $1 in
        project)
            shift

            WARPDRIVE_ACTIVATE_ARGS=""

            WARPDRIVE_VIRTUALENVS=${WARPDRIVE_VIRTUALENVS:-$HOME/.warpdrive}

            WARPDRIVE_ENV_NAME="default"

            while [ "$#" != "0" ]; do
                case "$1" in
                    --python=*)
                        WARPDRIVE_PYTHON_BINARY=`echo $1 | sed -e 's/--python=//'`
                        WARPDRIVE_ACTIVATE_ARGS="$WARPDRIVE_ACTIVATE_ARGS --python=$WARPDRIVE_PYTHON_BINARY"
                        ;;
                    --python)
                        WARPDRIVE_PYTHON_BINARY=$2
                        WARPDRIVE_ACTIVATE_ARGS="$WARPDRIVE_ACTIVATE_ARGS --python=$WARPDRIVE_PYTHON_BINARY"
                        shift
                        ;;

                    *)
                        WARPDRIVE_ENV_NAME=$1
                        ;;
                esac

                shift
            done

            WARPDRIVE_VENV_DIR="$WARPDRIVE_VIRTUALENVS/warpdrive+$WARPDRIVE_ENV_NAME"

            if [ -d "$WARPDRIVE_VENV_DIR" ]; then
                echo "Switching to warpdrive project '$WARPDRIVE_ENV_NAME'."
            else
                echo "Initializing warpdrive project '$WARPDRIVE_ENV_NAME'."
            fi

            eval "$($WARPDRIVE activate $WARPDRIVE_ENV_NAME $WARPDRIVE_ACTIVATE_ARGS)"

            ;;

        deactivate)
            if [ x"$VIRTUAL_ENV" != x"" ]; then
                if [ x`type -t deactivate` = x"function" ]; then
                    WARPDRIVE=$WARPDRIVE_MASTER
                    unset WARPDRIVE_MASTER
                    unset WARPDRIVE_ENV_NAME
                    unset WARPDRIVE_APP_ROOT
                    unset WARPDRIVE_SRC_ROOT
                    deactivate
                fi
            fi

            ;;

        *)
            $WARPDRIVE $*

            ;;
    esac
}
