#! /bin/bash gitlab_wiki() ( is() { gitlab _is_gitlab "$@" && gitlab _is_wiki "$@" } human_url() { log "not impl: human url: $@" exit 1 } _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 } "$@" )