diff --git a/init.sh b/init.sh index 18dbf40..2836e43 100755 --- a/init.sh +++ b/init.sh @@ -152,7 +152,7 @@ Architectures: $OS_ARCH else git -C /usr/share clone --depth 1 https://git.tink.ltd:8443/tink/zsh-autocomplete.git 2>/dev/null || \ git -C /usr/share/zsh-autocomplete pull - $SCRIPTPATH/install-github-release.sh -r ajeetdsouza/zoxide -m x86_64-unknown -p /usr/local/bin -n zoxide -f + $SCRIPTPATH/install-release.sh -r ajeetdsouza/zoxide -m x86_64-unknown -p /usr/local/bin -n zoxide -f fi } diff --git a/install-github-release.sh b/install-release.sh similarity index 72% rename from install-github-release.sh rename to install-release.sh index 3f8dbd0..e918756 100755 --- a/install-github-release.sh +++ b/install-release.sh @@ -6,21 +6,25 @@ DEFAULT_MATCH_STAGE_1="browser_download_url" main(){ - if [ -z $REPO ]; then + if [ -z "$REPO" ] && [ -z "$DD_URL" ]; then usage exit 1 fi - echo "Query for $REPO" - echo - api_url="https://api.github.com/repos/$REPO/releases/$TAG" - echo "API: $api_url" - echo - candidates=$(curl $SET_PROXY -sSfL $api_url | grep -P "$MATCH_STAGE_1") - echo "Candidates:" - echo "$candidates" - echo - dl_url=$(echo "$candidates" | grep -P "$MATCH_STAGE_2" | cut -d '"' -f 4) - if [ $(echo -e "$dl_url" | wc -l) -ne 1 ] || [ -z $dl_url ]; then + if [ -z "$DD_URL" ]; then + echo "Query for $REPO" + echo + api_url="https://api.github.com/repos/$REPO/releases/$TAG" + echo "API: $api_url" + echo + candidates=$(curl $SET_PROXY -sSfL $api_url | grep -P "$MATCH_STAGE_1") + echo "Candidates:" + echo "$candidates" + echo + dl_url=$(echo "$candidates" | grep -P "$MATCH_STAGE_2" | cut -d '"' -f 4) + else + dl_url="$DD_URL" + fi + if [ $(echo -e "$dl_url" | wc -l) -ne 1 ] || [ -z "$dl_url" ]; then exit 0 fi echo "From:" @@ -28,38 +32,38 @@ main(){ echo - if [ -z $PROG_PATH ]; then + if [ -z "$PROG_PATH" ]; then exit 0 fi echo "Downloading..." - pkgname=$(echo $dl_url | awk -F'/' '{print $NF}') - if [ ! -z $PKG_NAME ]; then - pkgname=$PKG_NAME + pkgname=$(echo "$dl_url" | awk -F'/' '{print $NF}') + if [ ! -z "$PKG_NAME" ]; then + pkgname="$PKG_NAME" fi tmp_dir="/tmp/$pkgname-$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)" mkdir -p "$tmp_dir" pushd "$tmp_dir" >/dev/null 2>&1 - ext=$(echo $pkgname | awk -F'.' '{print $NF}') - ext_tar=$(echo $pkgname | awk -F'.' '{print $(NF-1)}') + ext=$(echo "$pkgname" | awk -F'.' '{print $NF}') + ext_tar=$(echo "$pkgname" | awk -F'.' '{print $(NF-1)}') dirname= if (echo $ext | grep -i zip) >/dev/null 2>&1; then curl $SET_PROXY -SfLo source_pkg.zip "$dl_url" unzip -o source_pkg.zip - dirname=$(rev <<< $pkgname | cut -d '.' -f 2- | rev) + dirname=$(rev <<< "$pkgname" | cut -d '.' -f 2- | rev) elif (echo $ext | grep -i tar) || (echo $ext | grep -i tgz) >/dev/null 2>&1; then curl $SET_PROXY -SfLo source_pkg.$ext "$dl_url" tar -xvf source_pkg.$ext - dirname=$(rev <<< $pkgname | cut -d '.' -f 2- | rev) + dirname=$(rev <<< "$pkgname" | cut -d '.' -f 2- | rev) elif (echo $ext_tar | grep -i tar) >/dev/null 2>&1; then curl $SET_PROXY -SfLo source_pkg.tar.$ext "$dl_url" tar -xvf source_pkg.tar.$ext - dirname=$(rev <<< $pkgname | cut -d '.' -f 3- | rev) + dirname=$(rev <<< "$pkgname" | cut -d '.' -f 3- | rev) else echo "Unknown format: $pkgname" exit 1 fi rm source_pkg.* - if [ ! -z $PKG_DIR ]; then + if [ ! -z "$PKG_DIR" ]; then if [ "$PKG_DIR" = "-" ]; then if [ -z $SED_EXP ]; then cd "$dirname" @@ -80,20 +84,20 @@ main(){ echo "Wrong dir inside package!" exit 1 fi - PROG_PATH=$(realpath $PROG_PATH); + PROG_PATH=$(realpath "$PROG_PATH"); echo echo "Installing..." echo "From: $CWD" echo "To: $PROG_PATH/" - if [ ! -d $PROG_PATH ]; then - if [ -e $PROG_PATH ]; then + if [ ! -d "$PROG_PATH" ]; then + if [ -e "$PROG_PATH" ]; then echo "Program path is not directory!" exit 1 else - mkdir -p $PROG_PATH + mkdir -p "$PROG_PATH" fi fi - if [ -z $PROG_NAME ]; then + if [ -z "$PROG_NAME" ]; then cp -fr * "$PROG_PATH/" else if [ $FILE_COPY -eq 1 ]; then @@ -107,7 +111,7 @@ main(){ popd >/dev/null rm -rf "$tmp_dir" - if [ ! -z $CMD_RELOAD ]; then + if [ ! -z "$CMD_RELOAD" ]; then $CMD_RELOAD fi } @@ -116,10 +120,11 @@ main(){ usage(){ echo "Usage: $0 [OPTIONS]"; echo "Options:"; - echo " -r Github repo (required)"; + echo " -r Github repo"; echo " -t Release tag (default: $DEFAULT_RELEASE)"; echo " -k Match stage 1 with regexp (default: $DEFAULT_MATCH_STAGE_1)"; echo " -m Match stage 2 with regexp"; + echo " -u Direct download url (bypass query repo)"; echo " -p Program path"; echo " -n Program name"; echo " -f Copy program name file only (when -n is set)"; @@ -134,6 +139,7 @@ REPO= TAG=$DEFAULT_RELEASE MATCH_STAGE_1=$DEFAULT_MATCH_STAGE_1 MATCH_STAGE_2= +DD_URL= PROG_PATH= PROG_NAME= FILE_COPY=0 @@ -142,7 +148,7 @@ PKG_DIR= SED_EXP= CMD_RELOAD= SET_PROXY= -while getopts ":r:t:k:m:p:n:fo:d:e:c:x:" OPT; do +while getopts ":r:t:k:m:u:p:n:fo:d:e:c:x:" OPT; do case $OPT in r) REPO=$OPTARG; @@ -156,6 +162,9 @@ while getopts ":r:t:k:m:p:n:fo:d:e:c:x:" OPT; do m) MATCH_STAGE_2=$OPTARG; ;; + u) + DD_URL=$OPTARG; + ;; p) PROG_PATH=$OPTARG; ;;