#!/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="/tmp/$USER/zpac" echo() { printf '%s\n' "$*"; } err() { echo "$*" >&2; } usage() { while read; do echo "$REPLY"; done <<- EOF Usage: $_self [flags] Flags: -h Show this message. -s Search for . -d Get the package sources (default). EOF } aur.get() { local aur_url pkg_group tarball_url=$(package-query -1 -AS -f %u "$1") IFS='/' read _ _ aur_url _ _ pkg_group _ <<< "$tarball_url" cd "$cfg_workdir" echo "Downloading $tarball_url" { curl -skL "$tarball_url" | gzip -d | tar x; } || { err "Fail!" return 1 } echo ": ${cfg_workdir}/${pkg_group}" if (( flag_get_deps )); then cd "${cfg_workdir}/${pkg_group}" source PKGBUILD for i in "${depends[@]}" "${makedepends[@]}"; do dep_name="${i/[<>=]*}" dep_repo=$(package-query -1 -AS -f '%r' "${dep_name}") if [[ "$dep_repo" == 'aur' ]]; then [[ -d "${cfg_workdir}/${dep_name}" ]] aur.get "$dep_name" || { return "$?"; } fi done fi } abs.get() { local svn_repo case "$package_repo" in (community|multilib) svn_repo='community';; (*) svn_repo='packages';; esac svn checkout "svn://svn.archlinux.org/${svn_repo}/${1}/trunk" "${cfg_workdir}/${1}" } main() { while (( $# )); do case "$1" in --help|-h) usage; return 0;; -s) action='search';; -d) action='get';; -D) flag_get_deps=1;; --) shift; break;; -*) err "Unknown key: $1" usage return 1 ;; *) break;; esac shift done action=${action:-"get"} package="$1" case "$action" in (get) [[ -d "$cfg_workdir" ]] || { mkdir -p "$cfg_workdir" || { err "Can't create workdir: ${cfg_workdir}." return 1 } } IFS='/' read repo _ < <( package-query -AS -f '%r/%n' "$package" ) if [[ "$?" > 0 ]]; then err "Can't find package: $package" return 1 fi echo "Found ${package} in ${repo}." case "$repo" in (aur) aur.get "$package";; (core|extra|community|multilib) abs.get "$package";; (*) err "Repository $repo not supported." return 1;; esac ;; (search) package-query -ASs "$package" ;; esac } main "$@"