88 lines
1.8 KiB
Bash
88 lines
1.8 KiB
Bash
#! /bin/bash
|
|
|
|
gitlab_wiki() (
|
|
is() {
|
|
gitlab _is_gitlab "$@" && gitlab _is_wiki "$@"
|
|
}
|
|
|
|
human_url() {
|
|
local url="${1%/}"
|
|
url="${url%%#*}"
|
|
echo "$url/$(echo "$2" | base64 --decode)"
|
|
}
|
|
|
|
_host() {
|
|
local id="$1"
|
|
local host="${id%%.net*}.net"
|
|
echo "$host"
|
|
}
|
|
|
|
_project() {
|
|
local id="$1"
|
|
local host="$(_host "$@")"
|
|
local path="${id#$host}"
|
|
local project="${path%%/wikis*}"
|
|
project="${project%/-}"
|
|
project="${project%/-/}"
|
|
project="${project#/}"
|
|
project="${project%/}"
|
|
echo "${project%%#*}"
|
|
}
|
|
|
|
_blob() {
|
|
local id="$1"
|
|
local host="$(_host "$@")"
|
|
local project="$(_project "$@")"
|
|
local path="${id#$host}"
|
|
local blob="${path#*/wikis}"
|
|
blob="${blob#/}"
|
|
blob="${blob%/}"
|
|
echo "${blob%%#*}"
|
|
}
|
|
|
|
get() {
|
|
local base="$1"
|
|
local host="$(_host "$base")"
|
|
local project="$(_project "$base")"
|
|
local blob="$(_blob "$base")"
|
|
if [ "$(echo "$2" | base64 --decode)" != "" ]; then
|
|
blob="$blob/$(echo "$2" | base64 --decode)"
|
|
fi
|
|
log project=$project
|
|
log "$host/api/v4/projects/$(urlencode "$project")/wikis/$(urlencode "$blob")"
|
|
gitlab \
|
|
_gcurl \
|
|
"$host/api/v4/projects/$(urlencode "$project")/wikis/$(urlencode "$blob")" \
|
|
| jq -r .content
|
|
}
|
|
|
|
expand() {
|
|
local cache_key="gitlab_wiki expand $*"
|
|
if cache get "$cache_key"; then
|
|
return 0
|
|
fi
|
|
_expand "$@" | sort | cache put "$cache_key"
|
|
}
|
|
|
|
_expand() {
|
|
local host="$(_host "$1")"
|
|
local project="$(_project "$1")"
|
|
local blob="$(_blob "$1")"
|
|
if [ -n "$blob" ] && [ "$blob" != "" ]; then
|
|
echo "" | base64
|
|
return
|
|
fi
|
|
log host=$host, project=$project, blob=$blob
|
|
gitlab \
|
|
_gcurl \
|
|
"$host/api/v4/projects/$(urlencode "$project")/wikis?with_content=0" \
|
|
| jq -r .[].slug \
|
|
| while read -r line; do
|
|
echo "$line" | base64
|
|
done
|
|
}
|
|
|
|
"$@"
|
|
)
|
|
|