diff options
Diffstat (limited to 'src/toru/toru-path')
-rwxr-xr-x | src/toru/toru-path | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/toru/toru-path b/src/toru/toru-path new file mode 100755 index 0000000..4600a5c --- /dev/null +++ b/src/toru/toru-path @@ -0,0 +1,92 @@ +#!/usr/bin/env bash + +# Copyright (C) 2011-2012 Nicolás Reynolds <fauno@parabola.nu> +# Copyright (C) 2012 Michał Masłowski <mtjm@mtjm.eu> +# Copyright (C) 2012 Joshua Ismael Haase Hernández (xihh) <hahj87@gmail.com> +# Copyright (C) 2014 Luke Shumaker <lukeshu@sbcglobal.net> +# +# License: GNU GPLv3+ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. libremessages +setup_traps + +# TODO: better option parsing +TORUPATH=${T:-${TORUPATH}} +VERBOSE=${V:-false} +FORCE=${F:-false} + +. "$(librelib conf.sh)" +load_files libretools +check_vars libretools TORUPATH REPOS || exit 1 +load_files abs +check_vars abs ABSROOT || exit 1 + +if [ ! -w "$TORUPATH" ]; then + error "Toru's path isn't writable. Please check $TORUPATH" + exit 1 +fi + +lastsyncfile=${TORUPATH}/lastsync.paths +pathfile=${TORUPATH}/paths.tch + +if [ ! -e "${pathfile}" ]; then + tcamgr create "${pathfile}" +fi + +# TODO: ability to use flags to pass in other directories to fullrepos + +# This loops over ${REPOS[@]} backward. This is because early entries +# in REPOS have higher precidence, but the way this is implemented, +# the later entries have precedence, so we need to flip the order. +fullrepos=() +for (( i = ${#REPOS[@]}-1 ; i >= 0 ; i-- )); do + $VERBOSE && msg "Processing [%s]" "${REPOS[$i]}" + + # ABSROOT has trailing slash + if [ -d "${ABSROOT}${REPOS[$i]}" ]; then + fullrepos+=("${ABSROOT}${REPOS[$i]}") + fi +done + +# Find PKGBUILDs in ${fullrepos[@]} +find_args=("${fullrepos[@]}" -mindepth 2 -maxdepth 3 -type f -name PKGBUILD) +if ! $FORCE && [[ -e $lastsyncfile ]]; then + # if lastfilesync exists, only look at things that have + # changed since then (unless $FORCE is on) + find_args+=(-newer "${lastsyncfile}") +fi +IFS=$'\n' +pkgbuilds=($(find "${find_args[@]}")) + +# Add information from each of the PKGBUILDs to the toru cache. +msg "Updating path cache" +msg2 "%d PKGBUILDs to update" ${#pkgbuilds[@]} +for pkgbuild in "${pkgbuilds[@]}"; do + # plain "$_pkgbuild" + if ! load_PKGBUILD "${_pkgbuild}" >/dev/null 2>&1; then + error "%q contains errors, skipping" "${_pkgbuild}" + continue + fi + + fullpath="$(dirname -- "${_pkgbuild}")" + + for _pkg in "${pkgbase}" "${pkgname[@]}" "${provides[@]}"; do + $VERBOSE && msg2 '%s -> %s' "${_pkg}" "${fullpath}" + tcamgr put "${pathfile}" "${_pkg%%[<>=]*}" "${fullpath}" + done +done + +date +%s > "${lastsyncfile}" |