aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKris Kennaway <kris@FreeBSD.org>2004-07-14 10:33:19 +0000
committerKris Kennaway <kris@FreeBSD.org>2004-07-14 10:33:19 +0000
commit0d973156a703be9306fa58e7ba060bbe154b3780 (patch)
treeba4311534df947c07d48d5fa216e9cda14e1cd2a
parenta09ab19235f95c73ecad4c9cc793241858c2f63e (diff)
downloadports-0d973156a703be9306fa58e7ba060bbe154b3780.tar.gz
ports-0d973156a703be9306fa58e7ba060bbe154b3780.zip
Notes
-rwxr-xr-xTools/portbuild/scripts/pdispatch73
1 files changed, 67 insertions, 6 deletions
diff --git a/Tools/portbuild/scripts/pdispatch b/Tools/portbuild/scripts/pdispatch
index 8ed63f80fe95..1954da4196f7 100755
--- a/Tools/portbuild/scripts/pdispatch
+++ b/Tools/portbuild/scripts/pdispatch
@@ -16,8 +16,8 @@ if [ "$arch" = "alpha" -o "$arch" = "sparc64" ]; then
# wait 16 hours maximum
timeout=57600
else
- # wait 8 hours maximum
- timeout=28800
+ # wait 80 hours maximum
+ timeout=288000
fi
branch=$1
@@ -31,19 +31,31 @@ unset DISPLAY
pkgname=$(basename $1 ${PKGSUFFIX})
-if grep -qxF $pkgname ${pb}/${arch}/${branch}/duds; then
- echo "skipping $pkgname"
+if grep -qxF ${pkgname} ${pb}/${arch}/${branch}/duds; then
+ echo "skipping ${pkgname}"
exit 1
fi
args=${1+"$@"}
+
num=$(wc -w ${pb}/${arch}/ulist | awk '{print $1}')
random=$(jot -r 1 1 ${num})
mach=$(cat ${pb}/${arch}/ulist | cut -f ${random} -d ' ' )
+# If ulist is empty, then all build machines are busy, so try again in 15 seconds.
+if [ -z "${mach}" ]; then
+ echo "All machines busy, sleeping"
+ sleep 15
+ echo "Retrying build of ${pkgname}"
+ make ${pkgname}
+ exit 0
+fi
set $mach
+
flags=""
+noclean=0
if [ "x$NOCLEAN" != "x" ]; then
flags="${flags} -noclean"
+ noclean=1
fi
if [ "x$NO_RESTRICTED" != "x" ]; then
flags="${flags} -norestr"
@@ -60,6 +72,55 @@ fi
if [ "x$FETCH_ORIGINAL" != "x" ]; then
flags="${flags} -fetch-original"
fi
+if [ "x$TRYBROKEN" != "x" ]; then
+ flags="${flags} -trybroken"
+fi
+host=$1
+. ${pb}/${arch}/portbuild.${host}
+
+echo "Claiming a directory for ${pkgname} on ${host}"
+chroot=$(ssh -a -n root@${host} ${pb}/scripts/claim-chroot ${arch} ${branch} ${pkgname})
+status=$?
+if [ ! ${status} ]; then
+ exit ${status}
+fi
+echo "--> got directory ${chroot}"
+
+echo "dispatching: ssh -a -t -n root@${host} ${command} ${arch} ${branch} ${chroot} ${flags} \"$ED\" \"$PD\" \"$FD\" \"$BD\" \"$RD\" ${args}"
+${pb}/scripts/ptimeout.host $timeout ssh -a -t -n root@${host} ${command} ${arch} ${branch} ${chroot} ${flags} \"$ED\" \"$PD\" \"$FD\" \"$BD\" \"$RD\" ${args}
+error=$?
+
+# Pull in the results of the build from the client
+
+scp root@${host}:${chroot}/tmp/${pkgname}.log ${pb}/${arch}/${branch}/logs/${pkgname}.log
+(ssh -a -n root@${host} test -f ${chroot}/tmp/work.tbz ) && scp root@${host}:${chroot}/tmp/work.tbz ${pb}/${arch}/${branch}/wrkdirs/${pkgname}.tbz
+
+if [ "x$WANT_DISTFILES" != "x" ]; then
+ mkdir -p ${pb}/${arch}/${branch}/distfiles/.pbtmp/${pkgname}
+ ssh -a -n root@${host} tar -C ${chroot}/tmp/distfiles -cf - . | \
+ tar --unlink -C ${pb}/${arch}/${branch}/distfiles/.pbtmp/${pkgname} -xvf -
+ touch ${pb}/${arch}/${branch}/distfiles/.pbtmp/${pkgname}/.done
+fi
+
+if [ "${error}" = 0 ]; then
+ ssh -a -n root@${host} tar -C ${chroot}/tmp -cf - packages | \
+ tar --unlink -C ${pb}/${arch}/${branch} -xvf -
+ test -f ${pb}/${arch}/${branch}/packages/All/${pkgname}${PKGSUFFIX} && \
+ touch ${pb}/${arch}/${branch}/packages/All/${pkgname}${PKGSUFFIX}
+ rm -f ${pb}/${arch}/${branch}/errors/${pkgname}.log
+ lockf ${pb}/${arch}/${branch}/failure.lock ${pb}/scripts/buildsuccess ${arch} ${branch} ${pkgname}
+ if grep -q "even though it is marked BROKEN" ${pb}/${arch}/${branch}/logs/$pkgname.log; then
+ echo | mail -s "${pkgname} BROKEN but built on ${arch} ${branch}" kris@FreeBSD.org
+ fi
+else
+ log=${pb}/${arch}/${branch}/errors/${pkgname}.log
+ scp root@${host}:${chroot}/tmp/${pkgname}.log ${log} || (echo ${chroot}@${host}; ssh -a -n root@${host} ls -laR ${chroot}/tmp) | mail -s "${pkgname} logfile not found" kris@FreeBSD.org
+ if ! grep -q "even though it is marked BROKEN" ${log}; then
+ tail -1000 ${log} | mail -s "${pkgname} failed on ${arch} ${branch}" kris@FreeBSD.org
+ fi
+ lockf ${pb}/${arch}/${branch}/failure.lock ${pb}/scripts/buildfailure ${arch} ${branch} ${pkgname}
+fi
+
+ssh -a -n root@${host} ${pb}/scripts/clean-chroot ${arch} ${branch} ${chroot} ${noclean}
-echo "dispatching: ssh -a -t -n root@$1 ${command} ${arch} ${branch} $flags $args at $(date)"
-${pb}/scripts/ptimeout.host $timeout ssh -a -t -n root@$1 ${command} ${arch} ${branch} ${flags} $args
+exit ${error}