
___x_cmd_repo_ls(){
    [ $# -gt 0 ]    ||  set -- --auto

    local fmt=auto
    while [ $# -gt 0 ]; do
        case "${1}" in
            -h|--help)  ___x_cmd help -m repo ls "$@" ; return 0 ;;
            --raw|--tsv|--csv|--app|--auto)
                        fmt=${1#--};    shift ;;
            *)          break ;;
        esac
    done

    ___x_cmd_repo_ls___"$fmt" "$@"
}

___x_cmd_repo_ls___raw(){
    ___x_cmd fsiter --glob "$___X_CMD_REPO_ROOT" "*/*/*"
}

___x_cmd_repo_ls___xsv(){
    {
        ___x_cmd_repo_ls___raw
    } | {
        local line
        local name
        local provider
        local org
        printf "%s$SEP%s$SEP%s$SEP%s\n" provider owner name filepath
        while read -r line; do
            provider="${line%%/*}"
            name="${line##*/}"
            org="${line#"$provider"/}"
            org="${org%"/"$name}"
            printf "%s$SEP%s$SEP%s$SEP%s\n" "${provider}" "${org}" "$name" "$line"
        done
    }
}

___x_cmd_repo_ls___tsv(){
    SEP="\t"    ___x_cmd_repo_ls___xsv
}

___x_cmd_repo_ls___csv(){
    SEP=","    ___x_cmd_repo_ls___xsv
}

___x_cmd_repo_ls___app(){
    ___X_CMD_CSV_APP_SHBIN_CODE="xrc repo"    \
        ___x_cmd csv app --clear --return var   \
            ___x_cmd_repo_ls___csv "$@"
}

___x_cmd_repo_ls___auto(){
    if [ -t 1 ]; then
        ___x_cmd_repo_ls___app "$@"
    else
        ___x_cmd_repo_ls___tsv
    fi
}
