resolver.sh代码解析(下)

2021SC@SDUSC

resolve.sh代码如下:

#!/bin/bash

require 'styles'

# a recipe order takes the form
#     <github-user>/<repository-name>@<branch>:<recipe>:key=value,...
#
# the "<github-user>/" and/or "@<branch>", ":<recipe>..." parts can be omitted

resolve_user_name() {
    local package="${1%%[@:]*}"
    local user_name='rime'
    if [[ "${package}" =~ / ]]; then
        user_name="${package%/*}"
    fi
    echo "${user_name}"
}

resolve_package_name() {
    local package="${1%%[@:]*}"
    local repo_name="${package##*/}"
    local package_name="${repo_name#rime-}"
    echo "${package_name}"
}

resolve_package() {
    local package="${1%%[@:]*}"
    echo "${package}"
}

# returns empty string if not specified
resolve_branch() {
    local package="${1%%:*}"
    if [[ "${package}" =~ @ ]]; then
        echo "${package##*@}"
    fi
}

# returns empty string if not specified
resolve_recipe() {
    local rx="$1"
    if [[ "${rx}" =~ : ]]; then
        rx="${rx#*:}"
        echo "${rx%%:*}"
    fi
}

resolve_recipe_options() {
    local rx="$1"
    if [[ "${rx}" =~ : ]]; then
        rx="${rx#*:}"
        if [[ "${rx}" =~ : ]]; then
            echo "${rx#*:}" | sed 's/[:,]/ /g'
        fi
    fi
}

expand_configuration_url() {
    if [[ "$1" =~ ^https:// ]]; then
        echo "$1"
    elif [[ "$1" =~ ^([^/@:]*)/([^/@:]*)(@[^/@:]*)?/([^@:]*-packages.conf)$ ]]; then
        local user="${BASH_REMATCH[1]}"
        local repo="${BASH_REMATCH[2]}"
        local branch="${BASH_REMATCH[3]#@}"
        local filepath="${BASH_REMATCH[4]}"
        echo "https://github.com/${user}/${repo}/raw/${branch:-master}/${filepath}"
    fi
}

load_package_list_from_target() {
    local target="$1"
    case "${target}" in
        */*/*-packages.conf |\
            https://github.com/*/raw/*-packages.conf |\
            https://raw.githubusercontent.com/*-packages.conf)
            local configuration_url="$(expand_configuration_url "${target}")"
            if [[ -z "${configuration_url}" ]]; then
                echo $(error 'ERROR:') "unable to recognize configuration: ${target}" >&2
                exit 1
            fi
            echo $(info 'Fetching') "${configuration_url}"
            curl -fLO "${configuration_url}"
            source "$(basename "${configuration_url}")"
            ;;
        *.conf)
            source "${target}"
            ;;
        :*)
            source "${root_dir:-.}/${target#:}"-packages.conf
            ;;
        *)
            package_list=("${target}")
            ;;
    esac
}

provide 'resolver'

上次解析到resolve_branch函数。

resolve_recipe函数和resolve_recipe_option函数格式大致同上。都是进行若干匹配后输出。

后面两个函数一个是输出用来拓展配置的网址,一个是从目标网站上将包加载下来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值