

___X_CMD_GITB_CACHE="$___X_CMD_ROOT_SHARED/gitb/DEFAULT/cache"

___X_CMD_GIT_CONCURRENCY=8

___x_cmd_gitb_parse_(){
    local name="${1:?Provide name}"

    case "$name" in
        *.git)  ;;
        *)      name="${name}.git"
    esac

    case "$name" in
        git@*:*.git)
            ___X_CMD_GITB_BARE_PARSE_HOST="${name#git@}"
            ___X_CMD_GITB_BARE_PARSE_PATH="${___X_CMD_GITB_BARE_PARSE_HOST#*:}"
            ___X_CMD_GITB_BARE_PARSE_HOST="${___X_CMD_GITB_BARE_PARSE_HOST%%:*}"
            ;;
        https://*.*/*/*.git)
            ___X_CMD_GITB_BARE_PARSE_HOST="${name#http?://}"
            ___X_CMD_GITB_BARE_PARSE_PATH="${___X_CMD_GITB_BARE_PARSE_HOST#*/}"
            ___X_CMD_GITB_BARE_PARSE_HOST="${___X_CMD_GITB_BARE_PARSE_HOST%%/*}"
            ;;
        *)
            return 1
    esac
}

___x_cmd_gitb_has()(
    ___x_cmd_gitb_which "$1" >/dev/null
)

___x_cmd_gitb_which(){
    local name="${1:?Provide name}"

    case "$name" in
        *.git)  ;;
        *)      name="${name}.git"
    esac

    if ___x_cmd_gitb_parse_ "$name"; then
        name="${___X_CMD_GITB_BARE_PARSE_HOST}/${___X_CMD_GITB_BARE_PARSE_PATH}"
    fi

    ___x_cmd_gitb_lsbrpath 2>/dev/null | (
        local tgt; while read -r tgt; do
            [ "${tgt%/"${name#/}"}" != "${tgt}" ] || continue
            printf "%s\n" "$tgt"
            return 0
        done
        return 1
    )
}

___x_cmd_gitb_which_or_add(){
    ___x_cmd_gitb_which "$1" || {
        ___x_cmd_gitb_add "$1"
        ___x_cmd_gitb_which "$1"
    }
}

___x_cmd_gitb_foreach_func(){
    "$@"
}

___x_cmd_gitb_foreach(){
    ___x_cmd_gitb_lsbrpath | (
        set -- "" 1
        while read -r tgt; do
            set -- "$tgt" "$(($2 + 1))"
            ___x_cmd_gitb_foreach_func "$@"
        done
    )
}

_wread(){
    local i=1; local e; while read -r e; do
        "$@"
        i="$((i+1))"
    done
}

___x_cmd_annotation_return_log(){   [ -z "$M" ] || x:error "Return With Error: $M";   }
___x_cmd_annotation_exit_log(){     [ -z "$M" ] || x:error "Exit With Error: $M";   }

alias @x.ereturn="return "
alias @x.errexit="___x_cmd_annotation_exit_log; exit "

alias @x.trace=": "

___x_cmd_gitb___cat_or_all_or_list(){
    if [ "$#" -eq 0 ]; then
        ___x_cmd_gitb_lsbrpath
    elif [ "$1" = - ]; then
        ___x_cmd_cmds_cat
    else
        local IFS="$___X_CMD_UNSEENCHAR_NEWLINE"
        printf "%s\n" "$*"
    fi
}


___x_cmd_gitb___name_to_brpath_(){
    @x.trace ___x_cmd_gitb___name_to_brpath_

    ___X_CMD_GITB___NAME_TO_BRPATH_=

    local brpath="${1:?Provide repo}"
    case "$brpath" in
        /*)     ;;
        *)
                brpath=$(___x_cmd_gitb_which "$brpath") || M="Cannot Handle $brpath" @x.ereturn 1
                ;;
    esac

    ___X_CMD_GITB___NAME_TO_BRPATH_="$brpath"
}
