diff options
-rwxr-xr-x | fullpkg | 47 | ||||
-rwxr-xr-x | is_built | 9 | ||||
-rw-r--r-- | libretools.conf | 5 | ||||
-rwxr-xr-x | toru | 47 |
4 files changed, 98 insertions, 10 deletions
@@ -1,8 +1,8 @@ #!/bin/bash # TODO -# * Do version checking # * Detect circular builds # * Detect pkgnames by provides, replaces, etc. instead of dir tree +# * Detect package repo [[ ! -r PKGBUILD ]] && { echo "This isn't a build directory" @@ -11,7 +11,9 @@ tmp_dir=$(mktemp -d /tmp/$(basename $PWD).XXXXXX) queue_file=$(mktemp /tmp/queue.XXXXXX) +ban_file=$(mktemp) [[ ! -w $queue_file ]] && exit 1 +[[ ! -w $ban_file ]] && exit 1 source /etc/makepkg.conf source /etc/abs.conf @@ -77,6 +79,18 @@ check_queue() { return 0 } +# Checks if the package is banned from building +is_banned() { + rsync -e ssh -aq $PARABOLAHOST:mips64el/ban $ban_file >/dev/null 2>&1 || { + echo ":: Failed to get ban list" + return 0 + } + + grep -w $1 $ban_file >/dev/null 2>&1 + + return $? +} + # TODO keep track of spawned fullpkgs quit() { @@ -86,10 +100,19 @@ quit() { } source PKGBUILD -msg "Building ${pkgbase} ${pkgname[@]}" +msg ":: Building ${pkgbase:-${pkgname[@]}}" + +is_built "${pkgbase:-${pkgname[0]}}>=${pkgver}" && exit 0 + +#sudo pacman -Sy trap "quit" SIGTERM SIGKILL +if is_banned ${pkgbase:-$pkgname}; then + echo "This package is banned from building. Check the ban list" + exit 1 +fi + check_queue || exit 1 failed=() @@ -113,15 +136,25 @@ deps=$(echo "${depends[@]} ${makedepends[@]} ${pkgdeps[@]}" | \ msg "Checking dependencies" plain "${deps[@]}" -msg "Syncing database" -sudo pacman -Sy +#msg "Syncing database" +#sudo pacman -Sy for _dep in ${deps[@]}; do - is_built $_dep && continue + is_banned $_dep && continue for _repo in ${REPOS[@]}; do # TODO find split packages [[ -e "$ABSROOT/${_repo}/$_dep/PKGBUILD" ]] && { + source "$ABSROOT/${_repo}/$_dep/PKGBUILD" + msg "Checking for $_dep>=$pkgver" + +# If this version is built, continue with the next dep + + if is_built "$_dep>=$pkgver"; then + msg "No need to build this one" + break + fi + cp -r "$ABSROOT/$_repo/$_dep" $tmp_dir/ || { error "Can't copy $_dep to the work dir." exit 1 @@ -173,12 +206,12 @@ pushd $tmp_dir/$(basename $PWD) >/dev/null msg "Syncing database" sudo pacman -Sy - -makepkg --noconfirm -sLcr ; r=$? +makepkg --noconfirm -sLcr $@ ; r=$? case $r in 0) msg "The build was succesful." mipsrelease *.pkg.tar.* + sudo pacman -Sy ;; 1) error "There were errors while trying to build the package." @@ -1,7 +1,12 @@ #!/bin/bash # Detect is a package is installed or in a database -pacman -Qqi $1 >/dev/null 2>&1 || \ -pacman -Sqi $1 >/dev/null 2>&1 +# Checks for package, if -T returns non-zero output, egrep will return 0 +# because it finds it, so we negate the value to say it's not built. +# -Sp works backwards, it will print output only when the package already +# exists +# Example usage: is_built "pcre>=20" +!(sudo pacman -T "$1" | egrep "*" >/dev/null) || \ +sudo pacman -Sp "$1" --print-format "%n-%v" 2>/dev/null | egrep "*" >/dev/null exit $? diff --git a/libretools.conf b/libretools.conf index da8d9d8..00963e2 100644 --- a/libretools.conf +++ b/libretools.conf @@ -7,6 +7,9 @@ DIFFTOOL=vimdiff # The dir where you work on WORKDIR=/home/$USER/packages # The repos you'll be packaging for +# Tip: As early repos take precedence on $REPOS loops, you can use this as +# inverted order of precedence. Put testing repos first so fullpkg find new +# PKGBUILDs first, for instance. REPOS=('libre' 'libre-testing' 'core' 'community' 'extra' 'social' 'sugar') # The architectures @@ -76,7 +79,7 @@ for VAR in CHROOTDIR CHROOT CHCOPY CACHEDIR PARABOLAHOST LIBREDESTDIR \ LIBRESRCDIR BLACKLIST WORKDIR PATCHDIR REPOS ARCHES ABSLIBREGIT COMMITCMD DIFFTOOL; do [[ -z ${!VAR} ]] && { - echo "Configure $VAR var in $0" + echo "Configure $VAR var in /etc/libretools.conf" exit 1 } done @@ -0,0 +1,47 @@ +#!/bin/bash +# Queries the ABS +# License: GPL3 + +# TODO +# * Add license text +# * Use libremessages + +source /etc/abs.conf +source /etc/libretools.conf + +TMPDIR=$(mktemp -d) + +[[ -z ${TMPDIR} ]] && exit 1 + +update() { + pushd ${ABSROOT} >/dev/null + +# Find all the PKGBUILDs newer than the last update + find * -type f -name 'PKGBUILD' -newer ${ABSROOT}/toru >> ${TMPDIR}/update.list + + while read _pkgbuild; do + pushd $(dirname ${_pkgbuild}) >/dev/null + + unset pkgbase pkgname pkgver pkgrel + + source PKGBUILD + + for _pkg in ${pkgbase:-${pkgname[@]}}; do + dir="${TMPDIR}/packages/${_pkg}-${pkgver}-${pkgver}" + mkdir -p "${dir}" + + echo "${ABSROOT}/${_pkgbuild}" >> "${dir}/path" + + done + + popd >/dev/null + done < ${TMPDIR}/update.list + + popd >/dev/null + + last_update +} + +last_update() { + touch ${ABSROOT}/toru +} |