

___x_cmd_scotty_migrate(){
    param:void

    [ $# -gt 0 ] || {
        ___x_cmd_scotty_migrate_default
        return
    }

    local op="$1";  shift
    case "$op" in
        v0.1.3|v013)    ___x_cmd_scotty_migrate_v0_1_3 "$@" ;;

        *)              scotty:error "unknown migrate subcmd => $op" ;;
    esac
}

___x_cmd_scotty_migrate_v0_1_3(){
    ___x_cmd tmp dir ___X_CMD_SCOTTY_MIGRATE || return $?
    local tmp_dir=; tmp_dir="$(___x_cmd tmp path ___X_CMD_SCOTTY_MIGRATE)"
    log:sub:init -i "from v0.1 to v0.2" scotty "migration starting"
    local i; for i in cache cfg data log tmp usr art; do
        [ -d "$___X_CMD_ROOT_LOCAL/$i/r/DEFAULT" ] || continue
        scotty:info "migration ==> copying files from $___X_CMD_ROOT_LOCAL/$i/r/DEFAULT to $___X_CMD_ROOT_LOCAL/$i"
        ___x_cmd mv "$___X_CMD_ROOT_LOCAL/$i/r/DEFAULT" "$tmp_dir/$i"
        ___x_cmd rmrf "$___X_CMD_ROOT_LOCAL/$i"
        ___x_cmd mv "$tmp_dir/$i" "$___X_CMD_ROOT_LOCAL/$i"
    done
    ___x_cmd rmrf "$tmp_dir"

    ___x_cmd rmrf "$___X_CMD_ENV_VERSION_CONFIG_PATH"
    local line; ___x_cmd path uniq;
    eval "$(
        ___x_cmd path | while read -r line; do
            case "$line" in
                */r/DEFAULT*)
                    [ "$line" != "${line#"$___X_CMD_ROOT_LOCAL"}" ] || continue
                    printf "%s\n" "x path rm $line"
                    ;;
                *) ;;
            esac
        done
    )"
    log:sub:fini
}

___x_cmd_scotty_migrate_default(){
    ___x_cmd_scotty_migrate_v0_1_3
    # In the future. we will do more ...
}
