-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.sh
executable file
·185 lines (150 loc) · 4.67 KB
/
utils.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#!/usr/bin/env bash
if [ -z "${BPKG_UTILS}" ]; then
BPKG_UTILS=1
## Collection of shared bpkg functions
## Init local config and set environmental defaults
bpkg_initrc () {
local global_config=${BPKG_GLOBAL_CONFIG:-"/etc/bpkgrc"}
# shellcheck disable=SC1090
[ -f "$global_config" ] && source "$global_config"
local config=${BPKG_CONFIG:-"$HOME/.bpkgrc"}
# shellcheck disable=SC1090
[ -f "$config" ] && source "$config"
## set defaults
if [ ${#BPKG_REMOTES[@]} -eq 0 ]; then
BPKG_REMOTES[0]=${BPKG_REMOTE-https://raw.githubusercontent.com}
BPKG_GIT_REMOTES[0]=${BPKG_GIT_REMOTE-https://github.com}
export BPKG_REMOTES
export BPKG_GIT_REMOTE
export BPKG_GIT_REMOTES
fi
export BPKG_PACKAGE_USER="${BPKG_PACKAGE_USER:-"bpkg"}"
export BPKG_INDEX=${BPKG_INDEX:-"$HOME/.bpkg/index"}
bpkg_validate
return $?
}
## check parameter consistency
bpkg_validate () {
if [ ${#BPKG_GIT_REMOTES[@]} -ne ${#BPKG_REMOTES[@]} ]; then
bpkg_error "$(printf 'BPKG_GIT_REMOTES[%d] differs in size from BPKG_REMOTES[%d] array' "${#BPKG_GIT_REMOTES[@]}" "${#BPKG_REMOTES[@]}")"
return 1
fi
return 0
}
## format and output message
bpkg_message () {
bpkg_exec_exist bpkg-term &&
bpkg-term color "${1}"
shift
echo -n " ${1}"
shift
bpkg_exec_exist bpkg-term &&
bpkg-term reset
printf ": "
bpkg_exec_exist bpkg-term && {
bpkg-term reset
bpkg-term bright
}
printf "%s\n" "${@}"
bpkg_exec_exist bpkg-term &&
bpkg-term reset
}
## output error
bpkg_error () {
{
bpkg_message "red" "error" "${@}"
} >&2
}
## output warning
bpkg_warn () {
{
bpkg_message "yellow" "warn" "${@}"
} >&2
}
## output info
bpkg_info () {
local title="info"
if (( "${#}" > 1 )); then
title="${1}"
shift
fi
bpkg_message "cyan" "${title}" "${@}"
}
## check if executable exists in path
bpkg_exec_exist () {
local exec_name="${1}"
type -f "${exec_name}" > /dev/null 2>&1
}
## executable exists in path or exit with message
bpkg_exec_or_exit () {
local exec_name="${1}"
local exit_error="${2:-1}"
if ! bpkg_exec_exist "${exec_name}"; then
bpkg_error "${exec_name} not found, aborting"
exit "${exit_error}"
fi
}
## takes a remote and git-remote and sets the globals:
## BPKG_REMOTE: raw remote URI
## BPKG_GIT_REMOTE: git remote for cloning
## BPKG_AUTH_GIT_REMOTE: git remote with oauth info embedded,
## BPKG_OAUTH_TOKEN: token for x-oauth-basic
## BPKG_CURL_AUTH_PARAM: auth arguments for raw curl requests
## BPKG_REMOTE_INDEX: location of local index for remote
bpkg_select_remote () {
local remote=$1
local git_remote=$2
export BPKG_REMOTE_HOST=$(echo "$git_remote" | sed 's/.*:\/\///' | sed 's/\/$//' | tr '/' '_')
export BPKG_REMOTE_INDEX="$BPKG_INDEX/$BPKG_REMOTE_HOST"
# shellcheck disable=SC2034
export BPKG_REMOTE_INDEX_FILE="$BPKG_REMOTE_INDEX/index.txt"
export BPKG_OAUTH_TOKEN=""
export BPKG_CURL_AUTH_PARAM=""
export BPKG_GIT_REMOTE=$git_remote
export BPKG_AUTH_GIT_REMOTE=$git_remote
if [ "${remote:0:10}" == "raw-oauth|" ]; then
OLDIFS="${IFS}"
IFS="|"
# shellcheck disable=SC2206
local remote_parts=($remote)
IFS="${OLDIFS}"
export BPKG_OAUTH_TOKEN=${remote_parts[1]}
# shellcheck disable=SC2034
export BPKG_CURL_AUTH_PARAM="-u $BPKG_OAUTH_TOKEN:x-oauth-basic"
export BPKG_REMOTE=${remote_parts[2]}
if [[ "$git_remote" == https://* ]] && [[ "$git_remote" != *x-oauth-basic* ]] && [[ "$git_remote" != *${BPKG_OAUTH_TOKEN}* ]]; then
# shellcheck disable=SC2034
export BPKG_AUTH_GIT_REMOTE=${git_remote/https:\/\//https:\/\/$BPKG_OAUTH_TOKEN:x-oauth-basic@}
fi
else
export BPKG_REMOTE="$remote"
fi
}
## given a user and name, sets BPKG_REMOTE_RAW_PATH using the available
## BPKG_REMOTE and BPKG_OAUTH_TOKEN details
bpkg_select_raw_path () {
local user=$1
local name=$2
if [ "$BPKG_OAUTH_TOKEN" == "" ]; then
export BPKG_REMOTE_RAW_PATH="$BPKG_REMOTE/$user/$name"
else
# shellcheck disable=SC2034
Export BPKG_REMOTE_RAW_PATH="$BPKG_REMOTE/$user/$name/raw"
fi
return 0
}
bpkg_exec_or_exit bpkg-env
# shellcheck disable=SC2230
# shellcheck source=lib/env/env.sh
source "$(which bpkg-env)"
export -f bpkg_initrc
export -f bpkg_validate
export -f bpkg_message
export -f bpkg_warn
export -f bpkg_error
export -f bpkg_info
export -f bpkg_exec_exist
export -f bpkg_exec_or_exit
export -f bpkg_select_remote
export -f bpkg_select_raw_path
fi