#!/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) # # 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 . "$(librelib conf.sh)" load_files libretools check_vars libretools TORUPATH REPOS || exit 1 load_files abs check_vars abs ABSROOT || exit 1 setup_traps TORUPATH=${T:-${TORUPATH}} VERBOSE=${V:-false} FORCE=false # Stores the lastsync date lastsync() { local lastsyncfile="$1" if [[ -e "${lastsyncfile}" -a ! -w "${lastsyncfile}" ]]; then error "The sync date can't be saved: file not writable: %q" "${lastsyncfile}" return 1 fi date +%s > "${lastsyncfile}" touch "${lastsyncfile}" } # repo paths get_pkgbuilds() { local lastsyncfile="$1"; shift # Only find newer than lastsyncfile and read # everything else from cache local extra=(-newer "${lastsyncfile}") if [[ $FORCE = true || ! -e ${lastsyncfile} ]]; then ${VERBOSE} && warning "Forcing upgrade" # Get all PKGBUILDs extra=() fi # Return all PKGBUILDs found find "$@" -mindepth 2 -maxdepth 3 -type f -name 'PKGBUILD' "${extra[@]}" } 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 pass other paths via flags # ABSROOT has trailing slash fullrepos=() # This loop is complicated because it goes over REPOS backward for (( i = ${#REPOS[@]}-1 ; i >= 0 ; i-- )); do ${VERBOSE} && msg "Processing [%s]" "${REPOS[$i]}" if [ -d "${ABSROOT}${REPOS[$i]}" ]; then fullrepos+=("${ABSROOT}${REPOS[$i]}") fi done IFS=$'\n' pkgbuilds=($(get_pkgbuilds "${lastsyncfile}" "${fullrepos[@]}")) 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 lastsync "${lastsyncfile}"