#!/usr/bin/env bash # Copyright (C) 2011-2012 Nicolás Reynolds # Copyright (C) 2012 Michał Masłowski # Copyright (C) 2012 Joshua Ismael Haase Hernández (xihh) # Copyright (C) 2014 Luke Shumaker # # 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 . . 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}"