diff --git a/zpac b/zpac deleted file mode 100755 index c7d66b6..0000000 --- a/zpac +++ /dev/null @@ -1,295 +0,0 @@ -#!/usr/bin/env bash -# Author: Jack L. Frost -# Licensed under the Internet Software Consortium (ISC) license. -# See LICENSE for its text. - -_self="${0##*/}" - -cfg_workdir="$PWD" -cfg_aur_url='https://aur.archlinux.org' -cfg_aur_api="${cfg_aur_url}/rpc.php" - -err() { printf "$@" >&2; } - -_cat() { while read -r; do printf '%s\n' "$REPLY"; done } - -usage() { - _cat <<- EOF - Usage: $_self [flags] - Flags: - -h Show this message. - -s Search for . - -S Search only in the sync db. Implies -s. - -A Search only in AUR. Implies -s. - -d Get the package sources (default). Set twice to also get the dependencies. - -f Force downloading package sources even if they are already present in the working directory. - -w Set the working directory. - EOF -} - -aur.search() { - declare i aur_api_search_data aur_search_result_num aur_search_results version description - - aur_api_search_data=$( curl -skL "${cfg_aur_api}?type=search&arg=${1}" ) - aur_search_result_num=$( jshon -e resultcount -u <<< "$aur_api_search_data" ) - - # Exit if nothing was found - (( aur_search_result_num )) || { return 1; } - - aur_search_results=( $( jshon -e results -a -e Name -u <<< "$aur_api_search_data" ) ) - - for i in "${!aur_search_results[@]}"; do - { - read -r version - read -r description - } < <( - jshon -e results -e $i -e Version -u -p -e Description -u <<< "$aur_api_search_data" - ) - - printf '%s %s\n %s\n' "aur/${aur_search_results[$i]}" "$version" "$description" - done -} - -aur.info() { - declare pkg_aur_info aur_query_result - - pkg_aur_info=$( curl -skL "${cfg_aur_api}?type=info&arg=${1}" 2>/dev/null ) - aur_query_result=$( jshon -e resultcount -u <<< "$pkg_aur_info" ) - - (( aur_query_result )) || { return 1; } - - printf '%s' "$pkg_aur_info" -} - -aur.get() { - declare i pkg_aur_info pkg_base tarball_path depends makedepends dep_name aur_api_multireq dep_name aur_deps_api_data aur_deps_count aur_deps - - read -r pkg_aur_info - - { - read -r pkg_base - read -r tarball_path - } < <( - jshon -e results -e PackageBase -u -p -e URLPath -u <<< "$pkg_aur_info" - ) - - (( flag_force )) || { - [[ -d "${cfg_workdir}/${pkg_base}" ]] && { - printf "Found %s in %s, skipping. Use -f to override\n" "${pkg_base}" "${cfg_workdir}" - return 17 - } - } - - cd "$cfg_workdir" - - printf "Working in %s\n" "${cfg_workdir}" - - printf "Downloading %s\n" "${pkg_base}" - { curl -skL "${cfg_aur_url}${tarball_path}" | gzip -d | tar x; } || { - err "Fail!\n" - return 1 - } - - if (( flag_get_deps )); then - cd "${cfg_workdir}/${pkg_base}" - source PKGBUILD - - for i in "${depends[@]}" "${makedepends[@]}"; do - dep_name="${i/[<>=]*}" - aur_api_multireq+="&arg\[\]=$dep_name" - done - - aur_deps_api_data=$( curl -skL "${cfg_aur_api}?type=multiinfo${aur_api_multireq}" ) - aur_deps_count=$( jshon -e resultcount <<< "$aur_deps_api_data" ) - - if (( aur_deps_count )); then - printf "Getting dependencies for %s\n" "${pkg_base}" - - aur_deps=( $( jshon -e results -a -e Name -u <<< "$aur_deps_api_data" ) ) - - for i in "${aur_deps[@]}"; do - aur.get < <(aur.info "$i") - _result="$?" - - (( _result > 0 && result != 17 )) && { - return "$_result" - } - done - fi - fi -} - -abs.get() { - declare pkg_repo svn_repo - - pkg_repo="$2" - - case "$pkg_repo" in - (community|multilib) - svn_repo='community';; - (*) - svn_repo='packages';; - esac - - svn checkout "svn://svn.archlinux.org/${svn_repo}/${1}/trunk" "${cfg_workdir}/${1}" -} - -set_argv() { - declare arg opt c - declare -g argv - - while (( $# )); do - unset -v arg opt c - - case "$1" in - (--) argv+=( "$1" ); break;; - - (--*) - IFS='=' read arg opt <<< "$1" - argv+=( "$arg" ) - - [[ "$opt" ]] && { - argv+=( "$opt" ) - } - ;; - - (-*) - while read -n1 c - do - case "$c" in - -|'') :;; - *) argv+=( "-$c" );; - esac - done <<< "$1" - ;; - - (*) argv+=( "$1" );; - esac - shift - done -} - -main() { - if [[ -f "$HOME/.config/prm.rc.sh" ]]; then - source "$HOME/.config/prm.rc.sh" - fi - - while (( $# )); do - case "$1" in - (--) shift; break;; - - (-h) usage; return 0;; - - (-s) action='search';; - (-A) - action='search' - flag_search_aur=1;; - (-S) - action='search' - flag_search_syncdb=1;; - - (-d) - if [[ "$action" == 'get' ]]; then - flag_get_deps=1 - else - action='get' - fi - ;; - - (-w) - cfg_workdir="$2" - shift;; - - (-f) flag_force=1;; - - (-*) - err "Unknown key: %s\n" "$1" - usage - return 1 - ;; - - (*) break;; - esac - shift - done - - (( flag_search_aur && flag_search_syncdb )) && { - unset flag_search_aur flag_search_syncdb - } - - [[ "$action" ]] || { - usage - return 1 - } - - if [[ "$1" ]]; then - package="$1" - else - usage - return 1 - fi - - case "$action" in - (get) - [[ -d "$cfg_workdir" ]] || { - mkdir -p "$cfg_workdir" || { - err "Can't create workdir: %s\n" "$cfg_workdir" - return 1 - } - } - - pkg_aur_info=$( aur.info "$package" ) - - if (( ! "$?" )); then - repo='aur' - else - while read -r; do - if [[ "$REPLY" =~ ^Repository ]]; then - repo="${REPLY##* }" - fi - done < <( pacman -Si "$package" ) - - [[ "$repo" ]] || { - err "Can't find package %s\n" "$package" - return 1 - } - fi - - printf "Found %s in %s\n" "$package" "$repo" - - case "$repo" in - (aur) - aur.get <<< "$pkg_aur_info";; - - (core|extra|community|multilib) - abs.get "$package" "$repo";; - - (*) - err "Repository %s not supported\n" "$repo" - return 1;; - esac - ;; - - (search) - if (( flag_search_aur )); then - aur.search "$package" || { - err "No packages found\n" - return 1 - } - elif (( flag_search_syncdb )); then - pacman -Ss "$package" - else - aur.search "$package" || { flag_aur_search_fail=1; } - pacman -Ss "$package" 2>/dev/null || { flag_pacman_search_fail=1; } - - if (( flag_aur_search_fail && flag_pacman_search_fail )); then - err "No packages found\n" - return 1 - fi - fi - ;; - esac -} - -set_argv "$@" -main "${argv[@]}"