summaryrefslogtreecommitdiff
path: root/src/toru/toru-path
diff options
context:
space:
mode:
Diffstat (limited to 'src/toru/toru-path')
-rwxr-xr-xsrc/toru/toru-path92
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}"