summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xfullpkg47
-rwxr-xr-xis_built9
-rw-r--r--libretools.conf5
-rwxr-xr-xtoru47
4 files changed, 98 insertions, 10 deletions
diff --git a/fullpkg b/fullpkg
index 794b191..c3c44a8 100755
--- a/fullpkg
+++ b/fullpkg
@@ -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."
diff --git a/is_built b/is_built
index 9dc5d1c..f789e4f 100755
--- a/is_built
+++ b/is_built
@@ -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
diff --git a/toru b/toru
new file mode 100755
index 0000000..9716744
--- /dev/null
+++ b/toru
@@ -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
+}