#!/bin/sh ## You can set these variables here or in your enviroment #SRC_PATH='/path/to/packages/sources' #REPO_PATH='/path/to/archlinux/repo' #REPO_NAME='repo_name' ## Search variables URL_PREFIX='https://aur.archlinux.org/' SEARCH_STR='rpc/?v=5&type=search&by=name-desc&arg=' add_package() { if [ ! -d "${SRC_PATH}/$1" ]; then cd ${SRC_PATH} git clone ${URL_PREFIX}$1.git else echo 'WARNING: Package already present.' fi } clone_package() { if [ ! -d "${SRC_PATH}/$(echo $1 | awk -F '/' '{print $NF}' | cut -d '.' -f 1)" ]; then cd ${SRC_PATH} git clone $1 else echo 'WARNING: Package already present.' fi } rm_package() { if [ -d "${SRC_PATH}/$1" ]; then rm -rf ${SRC_PATH}/$1 else echo 'WARNING: Package not present.' fi } check_package() { if [ -d "${SRC_PATH}/$1" ]; then ${EDITOR} ${SRC_PATH}/$1/PKGBUILD else echo 'WARNING: Package not found.' fi } list_packages() { find ${SRC_PATH}/* -type d -prune | awk -F '/' '{print $NF}' } clean_packages() { if [ "$1" != '' ]; then find ${SRC_PATH} -type f -iname "*$1*.pkg.tar.xz" -exec rm {} \; else find ${SRC_PATH} -type f -iname "*.pkg.tar.xz" -exec rm {} \; fi } build_packages() { if [ "$1" != '' ]; then cd $(find ${SRC_PATH}/* -type d -prune -iname "*$1") makepkg -Cs else for i in $(find ${SRC_PATH}/* -type d -prune) do cd $i makepkg -Cs done fi } upgrade_packages() { if [ "$1" != '' ]; then cd $(find ${SRC_PATH}/* -type d -prune -iname "*$1") git pull makepkg -Cs else for i in $(find ${SRC_PATH}/* -type d -prune) do cd $i git pull makepkg -Cs done fi } install_package() { if [ -d "${SRC_PATH}/$1" ]; then cd $(find ${SRC_PATH}/* -type d -prune -iname "*$1") git pull makepkg -Csi else echo 'WARNING: Package not found.' fi } update_repo() { if [ "$1" != '' ]; then find ${SRC_PATH} -type f -iname "*$1*pkg.tar.xz" -exec cp {} ${REPO_PATH}/x86_64/ \; repo-add ${REPO_PATH}/x86_64/${REPO_NAME}.db.tar.gz ${REPO_PATH}/x86_64/*$1*.pkg.tar.xz else find ${SRC_PATH} -type f -iname "*pkg.tar.xz" -exec cp {} ${REPO_PATH}/x86_64/ \; repo-add ${REPO_PATH}/x86_64/${REPO_NAME}.db.tar.gz ${REPO_PATH}/x86_64/*.pkg.tar.xz fi } search_packages() { declare -a key=("${!1}") CURL_JSN=$(curl -s $(echo ${URL_PREFIX}${SEARCH_STR}"${key[@]}" | sed -e 's/ /+/g')) OUT_STR=$(jq -r '.results | .[] | [.Name, .Version], .Description' <<< ${CURL_JSN}) printf 'You searched using the following keywords (matching package name and/or description): "' printf '%s ' "${key[@]}" printf '\b"\n' echo ${OUT_STR} | sed -e 's/\[ /\n/g' -e 's/ *\] /\n\t/g' -e 's/"*, /\//g' -e 's/"//g' } set_variables() { echo "WARNING: SRC_PATH variable not set." echo echo "You need to set the following variables in your profile:" echo echo " export SRC_PATH='/path/to/packages/sources'" echo " export REPO_PATH='/path/to/archlinux/repo'" echo " export REPO_NAME='repo_name'" echo echo "The REPO_PATH and REPO_NAME variables are only needed if you use the local repo feature." echo "Just set the SRC_PATH if you don't intend to use it." } print_help() { echo 'repo.sh SEPPIOFISH repo tool' echo echo ' USAGE: repo.sh COMMAND PKGNAME (default ALL)' echo echo ' add adds package from from AUR' echo ' clone (url) clones git package repository' echo ' rm remove package' echo ' check check PKGBUILD' echo ' list lists availables packages' echo ' update updates the packages in the repo' echo ' build builds the packages' echo ' upgrade upgrades the packages' echo ' install builds and installs the package' echo ' clean cleans the packages' echo ' search searches packages in AUR' echo ' help prints this help' echo if [ "${SRC_PATH}" == '' ];then set_variables fi } if [ "$1" == 'help' ]; then if [ "$2" != '' ]; then echo 'ERROR: too many arguments.' else print_help fi elif [ "${SRC_PATH}" == '' ];then set_variables elif [ ! -d "${SRC_PATH}" ]; then echo 'ERROR: SRC_PATH variable set to invalid path.' elif [ "$1" == '' ]; then echo 'warning: no command called.' elif [ "$1" == 'add' ]; then if [ "$3" != '' ]; then echo 'ERROR: too many arguments.' elif [ "$2" == '' ]; then echo 'ERROR: missing argument.' else add_package $2 fi elif [ "$1" == 'clone' ]; then if [ "$3" != '' ]; then echo 'ERROR: too many arguments.' elif [ "$2" == '' ]; then echo 'ERROR: missing argument.' else clone_package $2 fi elif [ "$1" == 'rm' ]; then if [ "$3" != '' ]; then echo 'ERROR: too many arguments.' elif [ "$2" == '' ]; then echo 'ERROR: missing argument.' else rm_package $2 fi elif [ "$1" == 'check' ]; then if [ "$3" != '' ]; then echo 'ERROR: too many arguments.' elif [ "$2" == '' ]; then echo 'ERROR: missing argument.' else check_package $2 fi elif [ "$1" == 'list' ]; then if [ "$2" != '' ]; then echo 'ERROR: too many arguments.' else list_packages fi elif [ "$1" == 'update' ]; then if [ "$3" != '' ]; then echo 'ERROR: too many arguments.' elif [ "${REPO_PATH}" == '' ];then echo 'ERROR: REPO_PATH variable not set.' elif [ ! -d "${REPO_PATH}" ]; then echo 'ERROR: REPO_PATH variable set to invalid path.' elif [ "${REPO_NAME}" == '' ];then echo 'ERROR: REPO_NAME variable not set.' elif [ "$2" != '' ]; then update_repo $2 else update_repo fi elif [ "$1" == 'build' ]; then if [ "$3" != '' ]; then echo 'ERROR: too many arguments.' elif [ "$2" != '' ]; then build_packages $2 else build_packages fi elif [ "$1" == 'upgrade' ]; then if [ "$3" != '' ]; then echo 'ERROR: too many arguments.' elif [ "$2" != '' ]; then upgrade_packages $2 else upgrade_packages fi elif [ "$1" == 'install' ]; then if [ "$3" != '' ]; then echo 'ERROR: too many arguments.' elif [ "$2" == '' ]; then echo 'ERROR: missing argument.' else install_package $2 fi elif [ "$1" == 'clean' ]; then if [ "$3" != '' ]; then echo 'ERROR: too many arguments.' elif [ "$2" != '' ]; then clean_packages $2 else clean_packages fi elif [ "$1" == 'search' ]; then if [ "$2" == '' ]; then echo 'ERROR: missing argument(s).' else N=2 while [ "${!N}" != '' ]; do keywords[$((N-2))]=${!N} let N=N+1 done search_packages keywords[@] fi else echo 'ERROR: unrecocnized command.' fi