-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New Plugins: - bpkg-update: sync repo listings locally - bpkg-list: list the repo names, with -d flag for details - bpkg-utils: source-only shared utilities for bpkg plugins Change-Id: I9ef04a86efa35c61cabd7c4ecfa7c7a134b41c6c
- Loading branch information
Showing
8 changed files
with
302 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
lib/list/list.sh |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
lib/update/update.sh |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
lib/utils/utils.sh |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
#!/bin/bash | ||
|
||
VERSION="0.0.1" | ||
|
||
if ! type -f bpkg-utils &>/dev/null; then | ||
echo "error: bpkg-utils not found, aborting" | ||
exit 1 | ||
else | ||
source `which bpkg-utils` | ||
fi | ||
|
||
bpkg_initrc | ||
|
||
usage () { | ||
echo "bpkg-list [-h|--help] [-V|--version] [-d|--details]" | ||
echo | ||
echo "List all known bash packages from the repo. You first must run \`bpkg update' to sync the repo locally." | ||
|
||
echo "Options:" | ||
echo " --help|-h Print this help dialogue" | ||
echo " --version|-V Print version and exit" | ||
echo " --details|-d More verbose output" | ||
} | ||
|
||
bpkg_list () { | ||
local verbose=0 | ||
for opt in "${@}"; do | ||
case "$opt" in | ||
-V|--version) | ||
echo "${VERSION}" | ||
return 0 | ||
;; | ||
-h|--help) | ||
usage | ||
return 0 | ||
;; | ||
-d|--details) | ||
verbose=1 | ||
;; | ||
*) | ||
if [ "${opt:0:1}" == "-" ]; then | ||
bpkg_error "unknown option: $opt" | ||
return 1 | ||
fi | ||
esac | ||
done | ||
|
||
local i=0 | ||
for remote in "${BPKG_REMOTES[@]}"; do | ||
local git_remote="${BPKG_GIT_REMOTES[$i]}" | ||
bpkg_select_remote "$remote" "$git_remote" | ||
if [ ! -f "$BPKG_REMOTE_INDEX_FILE" ]; then | ||
bpkg_warn "no index file found for remote: ${remote}" | ||
bpkg_warn "You should run \`bpkg update' before running this command." | ||
continue | ||
fi | ||
OLDIFS="$IFS" | ||
IFS=$'\n' | ||
for line in $(cat $BPKG_REMOTE_INDEX_FILE); do | ||
local name=$(echo "$line" | cut -d\| -f1 | tr -d ' ') | ||
local desc=$(echo "$line" | cut -d\| -f2) | ||
local host=$BPKG_REMOTE_HOST | ||
if [ "$verbose" == "1" ]; then | ||
echo "$name [$host] - $desc" | ||
else | ||
echo $name | ||
fi | ||
done | ||
IFS="$OLDIFS" | ||
i=$((i+1)) | ||
done | ||
} | ||
|
||
|
||
if [[ ${BASH_SOURCE[0]} != $0 ]]; then | ||
export -f bpkg_list | ||
elif bpkg_validate; then | ||
bpkg_list "${@}" | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
#!/bin/bash | ||
|
||
VERSION="0.0.1" | ||
|
||
if ! type -f bpkg-utils &>/dev/null; then | ||
echo "error: bpkg-utils not found, aborting" | ||
exit 1 | ||
else | ||
source `which bpkg-utils` | ||
fi | ||
|
||
bpkg_initrc | ||
|
||
usage () { | ||
echo "bpkg-update [-h] [-V]" | ||
echo | ||
echo "Update local bpkg index for listing and searching packages" | ||
} | ||
|
||
bpkg_update_remote() { | ||
local remote=$1 | ||
local git_remote=$2 | ||
local wiki_url="" | ||
local wiki="" | ||
|
||
bpkg_select_remote "$remote" "$git_remote" | ||
|
||
local index=$BPKG_REMOTE_INDEX | ||
mkdir -p "$index" | ||
|
||
local index_file="$index/index.txt" | ||
local auth=$BPKG_CURL_AUTH_PARAM | ||
|
||
if [ "$auth" == "" ]; then | ||
wiki_url="$BPKG_REMOTE/wiki/bpkg/bpkg/index.md" | ||
else | ||
# GHE wiki urls have a unique path structure | ||
wiki_url="$BPKG_REMOTE/raw/wiki/bpkg/bpkg/index.md" | ||
fi | ||
|
||
#echo "curl -slo- $auth '$wiki_url' | grep -o '\[.*\](.*).*'" | ||
repo_list=$(curl -sLo- $auth "$wiki_url" | grep -o '\[.*\](.*).*' | sed 's/\[\(.*\)\](.*)[ \-]*/\1|/' ) | ||
|
||
num_repos=$(echo "$repo_list" | wc -l | tr -d ' ') | ||
bpkg_info "indexing ${num_repos} repos from $BPKG_REMOTE_HOST to $index_file" | ||
echo "$repo_list" > $index_file | ||
} | ||
|
||
bpkg_update () { | ||
for opt in "${@}"; do | ||
case "$opt" in | ||
-V|--version) | ||
echo "${VERSION}" | ||
return 0 | ||
;; | ||
-h|--help) | ||
usage | ||
return 0 | ||
;; | ||
*) | ||
if [ "${opt:0:1}" == '-' ]; then | ||
bpkg_error "unknown option: $opt" | ||
return 1 | ||
fi | ||
;; | ||
esac | ||
done | ||
|
||
local let i=0 | ||
for remote in "${BPKG_REMOTES[@]}"; do | ||
local git_remote=${BPKG_GIT_REMOTES[$i]} | ||
bpkg_update_remote "$remote" "$git_remote" | ||
i=$((i+1)) | ||
done | ||
} | ||
|
||
if [[ ${BASH_SOURCE[0]} != $0 ]]; then | ||
export -f bpkg_update | ||
elif bpkg_validate; then | ||
bpkg_update "${@}" | ||
fi | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
#!/bin/bash | ||
|
||
## Collection of shared bpkg functions | ||
|
||
## Init local config and set environmental defaults | ||
bpkg_initrc() { | ||
local config=${BPKG_CONFIG:-"$HOME/.bpkgrc"} | ||
[ -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} | ||
fi | ||
BPKG_USER="${BPKG_USER:-"bpkg"}" | ||
BPKG_INDEX=${BPKG_INDEX-"$HOME/.bpkg/index"} | ||
} | ||
|
||
## check parameter consistency | ||
bpkg_validate () { | ||
bpkg_initrc | ||
if [ ${#BPKG_GIT_REMOTES[@]} -ne ${#BPKG_REMOTES[@]} ]; then | ||
mesg='BPKG_GIT_REMOTES[%d] differs in size from BPKG_REMOTES[%d] array' | ||
fmesg=$(printf "$mesg" "${#BPKG_GIT_REMOTES[@]}" "${#BPKG_REMOTES[@]}") | ||
error "$fmesg" | ||
return 1 | ||
fi | ||
return 0 | ||
} | ||
|
||
## format and output message | ||
bpkg_message () { | ||
if type -f bpkg-term > /dev/null 2>&1; then | ||
bpkg-term color "${1}" | ||
fi | ||
|
||
shift | ||
printf " ${1}" | ||
shift | ||
|
||
if type -f bpkg-term > /dev/null 2>&1; then | ||
bpkg-term reset | ||
fi | ||
|
||
printf ": " | ||
|
||
if type -f bpkg-term > /dev/null 2>&1; then | ||
bpkg-term reset | ||
bpkg-term bright | ||
fi | ||
|
||
printf "%s\n" "${@}" | ||
|
||
if type -f bpkg-term > /dev/null 2>&1; then | ||
bpkg-term reset | ||
fi | ||
} | ||
|
||
## 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}" "${@}" | ||
} | ||
|
||
## takes a remote and git-remote and sets the globals: | ||
## BPKG_REMOTE: remote URI | ||
## BPKG_GIT_REMOTE: git remote with oauth info embedded, | ||
## BPKG_OAUTH_TOKEN: token for x-oauth-basic | ||
bpkg_select_remote () { | ||
local remote=$1 | ||
local git_remote=$2 | ||
BPKG_REMOTE_HOST=$(echo "$git_remote" | sed 's/.*:\/\///' | sed 's/\/$//' | tr '/' '_') | ||
BPKG_REMOTE_INDEX="$BPKG_INDEX/$BPKG_REMOTE_HOST" | ||
BPKG_REMOTE_INDEX_FILE="$BPKG_REMOTE_INDEX/index.txt" | ||
BPKG_OAUTH_TOKEN="" | ||
BPKG_CURL_AUTH_PARAM="" | ||
if [ "${remote:0:10}" == "raw-oauth|" ]; then | ||
OLDIFS="${IFS}" | ||
IFS="|" | ||
local remote_parts=($remote) | ||
IFS="${OLDIFS}" | ||
BPKG_OAUTH_TOKEN=${remote_parts[1]} | ||
BPKG_CURL_AUTH_PARAM="-u $BPKG_OAUTH_TOKEN:x-oauth-basic" | ||
BPKG_REMOTE=${remote_parts[2]} | ||
if [[ "$git_remote" == https://* ]] && [[ "$git_remote" != *x-oauth-basic* ]] && [[ "$git_remote" != *${BPKG_OAUTH_TOKEN}* ]]; then | ||
git_remote=${git_remote/https:\/\//https:\/\/$BPKG_OAUTH_TOKEN:x-oauth-basic@} | ||
fi | ||
else | ||
BPKG_REMOTE=$remote | ||
fi | ||
BPKG_GIT_REMOTE=$git_remote | ||
} | ||
|
||
## given a user and name, sets BPKG_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 | ||
BPKG_RAW_PATH="$BPKG_REMOTE/$user/$name" | ||
else | ||
BPKG_RAW_PATH="$BPKG_REMOTE/$user/$name/raw" | ||
fi | ||
return 0 | ||
} | ||
|
||
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_select_remote | ||
export -f bpkg_select_raw_path |