12 Commits
v1.0 ... v2.1

Author SHA1 Message Date
fbt
8ba3c36d4a config support, README 2015-01-28 00:06:21 +03:00
fbt
3d960cd6e4 Config support 2015-01-28 00:05:27 +03:00
fbt
048d64fc46 stray debug message 2015-01-27 23:58:11 +03:00
fbt
b484a167f4 consistency 2015-01-27 23:52:16 +03:00
fbt
40f797ac20 Getting rid of package-query 2015-01-27 23:50:10 +03:00
fbt
1fdde28724 Use the API derectly. Massive speed boost. Almost as fast as cower \m/ 2015-01-27 23:12:56 +03:00
fbt
5cd8546ece fixes 2015-01-27 20:05:23 +03:00
fbt
e0b175f496 Ask the API for the package base 2015-01-27 19:52:45 +03:00
fbt
9de0ce1e8d Fix for working with package groups 2015-01-27 19:34:57 +03:00
fbt
aa4062634c get AUR deps too 2015-01-27 19:17:26 +03:00
fbt
c1324aeccc Mention the license in the header 2015-01-27 18:52:16 +03:00
fbt
bcf746b858 license 2015-01-27 18:51:41 +03:00
3 changed files with 127 additions and 14 deletions

13
LICENSE Normal file
View File

@@ -0,0 +1,13 @@
Copyright (c) 2012-2014, Jack L. Frost <fbt@fleshless.org>
Permission to use, copy, modify, and/or distribute this software for any purpose with or without
fee is hereby granted, provided that the above copyright notice and this permission notice appear
in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS SOFTWARE.

View File

@@ -8,3 +8,5 @@ A very simple AUR/ABS helper. Doesn't build packages, only gets the sources.
-h Show this message. -h Show this message.
-s Search for <package>. -s Search for <package>.
-d Get the package sources (default). -d Get the package sources (default).
You can override any value in the script in \$HOME/.config/zpac.rc.sh

126
zpac
View File

@@ -1,8 +1,13 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Author: Jack L. Frost <fbt@fleshless.org>
# Licensed under the Internet Software Consortium (ISC) license.
# See LICENSE for its text.
_self="${0##*/}" _self="${0##*/}"
cfg_workdir="/tmp/$USER/zpac" cfg_workdir="$PWD"
cfg_aur_url='https://aur.archlinux.org'
cfg_aur_api="${cfg_aur_url}/rpc.php"
echo() { printf '%s\n' "$*"; } echo() { printf '%s\n' "$*"; }
err() { echo "$*" >&2; } err() { echo "$*" >&2; }
@@ -14,25 +19,88 @@ usage() {
-h Show this message. -h Show this message.
-s Search for <package>. -s Search for <package>.
-d Get the package sources (default). -d Get the package sources (default).
-D If used with -d, makes $_self download the dependencies from AUR too.
EOF EOF
} }
aur.search() {
local aur_api_search_data aur_search_result_num pkg
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" )
if (( aur_search_result_num )); then
aur_search_results=( $( jshon -e results -a -e Name -u <<< "$aur_api_search_data" ) )
for i in "${!aur_search_results[@]}"; do
printf 'aur/%s\n %s\n' "${aur_search_results[${i}]}" "$( jshon -e results -e $i -e Description -u <<< "$aur_api_search_data" )"
done
else
return 1
fi
}
aur.info() {
local pkg_aur_info=$( curl -skL "${cfg_aur_api}?type=info&arg=${1}" 2>/dev/null )
local aur_query_result=$( jshon -e resultcount -u <<< "$pkg_aur_info" )
if (( aur_query_result )); then
echo "$pkg_aur_info"
else
return 1
fi
}
aur.get() { aur.get() {
local tarball_url=$(package-query -1 -AS -f %u "$1") local dep_name aur_api_multireq aur_deps_api_data aur_deps_count aur_deps pkg_aur_info pkg_base tarball_path
read pkg_aur_info
pkg_base=$( jshon -e results -e PackageBase -u <<< "$pkg_aur_info" )
tarball_path=$( jshon -e results -e URLPath -u <<< "$pkg_aur_info" )
cd "$cfg_workdir" cd "$cfg_workdir"
echo "Downloading $tarball_url" echo "Downloading ${cfg_aur_url}${tarball_path}"
{ curl "$tarball_url" | gzip -d | tar x; } || { { curl -skL "${cfg_aur_url}${tarball_path}" | gzip -d | tar x; } || {
err "Fail!" err "Fail!"
return 1 return 1
} }
echo ": ${cfg_workdir}/${pkg_base}"
if (( flag_get_deps )); then
unset depends makedepends
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
aur_deps=$( jshon -e results -a -e Name -u <<< "$aur_deps_api_data" )
for i in "${aur_deps[@]}"; do
aur.get < <(aur.info "$i") || {
return "$?"
}
done
fi
fi
} }
abs.get() { abs.get() {
local svn_repo local pkg_repo svn_repo
case "$package_repo" in pkg_repo="$2"
case "$pkg_repo" in
(community|multilib) (community|multilib)
svn_repo='community';; svn_repo='community';;
(*) (*)
@@ -43,12 +111,17 @@ abs.get() {
} }
main() { main() {
if [[ -f "$HOME/.config/zpac.rc.sh" ]]; then
source "$HOME/.config/zpac.rc.sh"
fi
while (( $# )); do while (( $# )); do
case "$1" in case "$1" in
--help|-h) usage; return 0;; --help|-h) usage; return 0;;
-s) action='search';; -s) action='search';;
-d) action='get';; -d) action='get';;
-D) flag_get_deps=1;;
--) shift; break;; --) shift; break;;
-*) -*)
@@ -64,7 +137,12 @@ main() {
action=${action:-"get"} action=${action:-"get"}
package="$1" if [[ "$1" ]]; then
package="$1"
else
usage
return 1
fi
case "$action" in case "$action" in
(get) (get)
@@ -75,21 +153,31 @@ main() {
} }
} }
IFS='/' read repo _ < <( package-query -AS -f '%r/%n' "$package" ) pkg_aur_info=$( aur.info "$package" )
if [[ "$?" > 0 ]]; then if (( ! "$?" )); then
err "Can't find package: $package" repo='aur'
return 1 else
while read; do
if [[ "$REPLY" =~ ^Repository ]]; then
repo="${REPLY##* }"
fi
done < <( pacman -Si "$package" )
[[ "$repo" ]] || {
err "Can't find package ${package}"
return 1
}
fi fi
echo "Found ${package} in ${repo}." echo "Found ${package} in ${repo}."
case "$repo" in case "$repo" in
(aur) (aur)
aur.get "$package";; aur.get <<< "$pkg_aur_info";;
(core|extra|community|multilib) (core|extra|community|multilib)
abs.get "$package";; abs.get "$package" "$repo";;
(*) (*)
err "Repository $repo not supported." err "Repository $repo not supported."
@@ -98,7 +186,17 @@ main() {
;; ;;
(search) (search)
package-query -ASs "$package" if type -P package-query &>/dev/null; then
package-query -ASs "$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."
return 1
fi
fi
;; ;;
esac esac
} }