summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuildenv28
-rwxr-xr-xchcleanup7
-rwxr-xr-xfullpkg8
-rwxr-xr-xtoru27
-rwxr-xr-xtoru-path32
-rwxr-xr-xtoru-utils86
6 files changed, 165 insertions, 23 deletions
diff --git a/buildenv b/buildenv
new file mode 100755
index 0000000..84a1fc2
--- /dev/null
+++ b/buildenv
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+trap "umount_all" 0 ERR TERM KILL
+
+user=${SUDO_USER:-${1}}
+
+umount_all() {
+ for mp in home/pkgdest home/srcdest home/${user}; do
+ msg "Umounting /$mp"
+ umount $CHROOTDIR/$CHROOT/$mp || error "Couldn't umount"
+ done
+}
+
+source /etc/libretools.conf
+
+for mp in home/pkgdest home/srcdest home/${user} var/lib/toru; do
+ msg "Binding /$mp"
+ mount -o bind /$mp $CHROOTDIR/$CHROOT/$mp || exit 1
+done
+
+for etc in etc/makepkg.conf etc/abs.conf etc/mtab; do
+ msg "Copying config /$etc"
+ cp --remove-destination /$etc $CHROOTDIR/$CHROOT/$etc || exit 1
+done
+
+$(dirname $0)/librechroot $CHROOT
+
+exit $?
diff --git a/chcleanup b/chcleanup
new file mode 100755
index 0000000..83c9f3f
--- /dev/null
+++ b/chcleanup
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+[ ! -f ~/cleansystem ] && exit 1
+
+sudo pacman --noconfirm -Rcs $(comm -23 <(pacman -Qq | sort) <(sort ~/cleansystem))
+
+exit $?
diff --git a/fullpkg b/fullpkg
index fe74432..227f329 100755
--- a/fullpkg
+++ b/fullpkg
@@ -19,6 +19,14 @@ usage() {
}
+# Finds a PKGBUILD on toru's path cache
+# Look in all caches but pick the first one
+# TODO move to a toru flag (-p?)
+where_is() {
+ grep -m1 "^${1}:" "${TORUPATH}/paths" 2>/dev/null| \
+ cut -d: -f2 2>/dev/null
+}
+
while getopts 'haA:l:nm:' arg; do
case "$arg" in
h) usage ;;
diff --git a/toru b/toru
index 5867bfe..9616119 100755
--- a/toru
+++ b/toru
@@ -12,28 +12,7 @@
# * Possibility to hook up ABS dirs besides ABSROOT (low priority)
# * Tell updates and non available binary packages (working on this)
-source /etc/abs.conf
-source /etc/libretools.conf
-
-if [ ! -w "$TORUPATH" ]; then
- error "Toru's path isn't writable. Please check $TORUPATH"
- exit 1
-fi
-
-# Stores the lastsync date
-lastsync() {
- local lastsyncfile
-
- lastsyncfile=$1
-
- [ -e ${lastsyncfile} -a ! -w ${lastsyncfile} ] && {
- error "The sync date can't be saved. ${lastsyncfile} isn't writable."
- return 1
- }
-
- date +%s > ${lastsyncfile}
- touch ${lastsyncfile}
-}
+source $(dirname $0)/toru-utils
# Saves contents on a named cache
# $1 cache name (repo)
@@ -252,7 +231,9 @@ update() {
# See above FIXME
# print_package_array "${updates[@]}" > ${TMPDIR}/updates
- store_cache ${_repo}.updates ${TMPDIR}/updates
+ if [ -r ${TMPDIR}/updates ]; then
+ store_cache ${_repo}.updates ${TMPDIR}/updates
+ fi
else
$quiet || msg "Reading updates from cache..."
diff --git a/toru-path b/toru-path
new file mode 100755
index 0000000..7500aed
--- /dev/null
+++ b/toru-path
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+source $(dirname $0)/toru-utils
+
+LASTSYNCFILE=${TORUPATH}/lastsync.paths
+
+# TODO pass other paths via flags
+pkgbuilds=($(get_pkgbuilds ${ABSROOT}))
+paths=()
+
+msg "Updating path cache"
+msg2 "${#pkgbuilds[@]} PKGBUILDs to update"
+for _pkgbuild in ${pkgbuilds[@]}; do
+ $DEBUG && plain "$_pkgbuild"
+ source ${_pkgbuild} || {
+ error "${_pkgbuild} contains errors, skipping"
+ continue
+ }
+
+ fullpath=$(dirname $(readlink -f ${_pkgbuild}))
+
+ for _pkg in ${pkgname[@]} ${provides[@]}; do
+ paths+=(${_pkg/[<>=]*}:${fullpath})
+ done
+
+ unset pkgname provides
+done
+
+# TODO remove old paths
+echo ${paths[@]} | tr ' ' "\n" | sort >> ${TORUPATH}/paths
+
+lastsync ${LASTSYNCFILE}
diff --git a/toru-utils b/toru-utils
new file mode 100755
index 0000000..bb0aef4
--- /dev/null
+++ b/toru-utils
@@ -0,0 +1,86 @@
+#!/bin/bash
+#!/bin/bash
+
+
+source /etc/abs.conf
+source /etc/libretools.conf
+
+if [ ! -w "$TORUPATH" ]; then
+ error "Toru's path isn't writable. Please check $TORUPATH"
+ exit 1
+fi
+
+LASTSYNCFILE=${TORUPATH}/lastsync
+FORCE=false
+QUIET=false
+DEBUG=false
+
+# usage : in_array( $needle, $haystack )
+function in_array {
+ [[ $2 ]] || return 1 # Not found
+
+ local needle=$1; shift
+ local item
+
+ for item in "$@"; do
+ [[ ${item#@} = $needle ]] && return 0 # Found
+ done
+
+ return 1 # Not Found
+}
+
+# Stores the lastsync date
+lastsync() {
+ local lastsyncfile
+
+ lastsyncfile=$1
+
+ [ -e ${lastsyncfile} -a ! -w ${lastsyncfile} ] && {
+ error "The sync date can't be saved. ${lastsyncfile} isn't writable."
+ return 1
+ }
+
+ date +%s > ${lastsyncfile}
+ touch ${lastsyncfile}
+}
+
+get_dbs() {
+ local _db
+ for _db in /var/lib/pacman/sync/*.db; do
+ bsdtar tf ${_db} | cut -d'/' -f1 | sort -u
+ done
+}
+
+# repo paths
+get_pkgbuilds() {
+ pkgbuilds=()
+
+ if [[ $FORCE = true || ! -e ${LASTSYNCFILE} ]]; then
+
+ $QUIET || warning "Forcing upgrade"
+# Get all PKGBUILDs
+ pkgbuilds=($(find $@ -mindepth 2 -maxdepth 3 -type f -name 'PKGBUILD'))
+
+ else
+
+# Only find newer than lastsyncfile and read everything else from cache
+ pkgbuilds=($(find $@ -mindepth 2 -maxdepth 3 -type f -name 'PKGBUILD' -newer ${LASTSYNCFILE}))
+
+ fi
+
+# Return all PKGBUILDs found
+ echo ${pkgbuilds[@]}
+}
+
+# End inmediately but print a useful message
+trap_exit() {
+ error "$@"
+
+ exit 1
+}
+
+# Trap signals from makepkg
+set -E
+trap 'trap_exit "(prfullpkg:${level}) TERM signal caught. Exiting..."' TERM HUP QUIT
+trap 'trap_exit "(prfullpkg:${level}) Aborted by user! Exiting..."' INT
+trap 'trap_exit "(prfullpkg:${level}) An unknown error has occurred. Exiting..."' ERR