echo"$(date-u) - $TOTAL alpine packages are now known to alpine."
local total=$(query_db "SELECT count(*) FROM sources AS s JOIN schedule AS sch ON s.id=sch.package_id WHERE s.distribution=$DISTROID AND s.architecture='x86_64' AND sch.date_build_started IS NULL;")
echo"$(date-u) - updating alpine repositories, currently $total packages scheduled."
#
# remove packages which are gone (only when run between 21:00 and 23:59)
#
# if [ $(date +'%H') -gt 21 ] ; then
# REMOVED=0
# REMOVE_LIST=""
# for REPO in $ALPINE_REPOS ; do
# echo "$(date -u ) - dropping removed packages from filesystem in repository '$REPO':"
# for i in $(find $BASE/alpine/$REPO -type d -wholename "$BASE/alpine/$REPO/*" | sort) ; do
# PKG=$(basename $i)
# if ! grep -q "$REPO $PKG" ${ALPINE_PKGS}_full_pkgbase_list > /dev/null ; then
# # we could check here whether a package is currently building,
# # and if so defer the pkg removal. (but I think this is pointless,
# # as we are unlikely to kill that build, so meh, let it finish
# # and fail to update the db, because the package is gone...)
# let REMOVED=$REMOVED+1
# REMOVE_LIST="$REMOVE_LIST $REPO/$PKG"
# rm -r --one-file-system $BASE/alpine/$REPO/$PKG
# echo "$(date -u) - $REPO/$PKG removed as it's gone from the alpine repositories."
# SUITE="alpine_$REPO"
# PKG_ID=$(query_db "SELECT id FROM sources WHERE distribution=$DISTROID AND name='$PKG' AND suite='$SUITE' AND architecture='$ARCH';")
# if [ -n "${PKG_ID}" ] ; then
# query_db "DELETE FROM results WHERE package_id='${PKG_ID}';"
# query_db "DELETE FROM schedule WHERE package_id='${PKG_ID}';"
# query_db "DELETE FROM sources WHERE id='${PKG_ID}';"
# echo "$(date -u) - $SUITE $PKG removed from database."
# else
# echo "$(date -u) - $SUITE $PKG not found in database."
# known package with new version, so update db and schedule
query_db "UPDATE sources SET version = '$version' WHERE name = '$PKG' AND suite = '$SUITE' AND architecture='$ARCH' AND distribution=$DISTROID;"
PKG_STATUS=$(query_db "SELECT r.status FROM results AS r
JOIN sources as s on s.id=r.package_id
WHERE s.distribution=$DISTROID
AND s.architecture='x86_64'
AND s.name='$PKG'
AND s.suite='$SUITE';")
if["$PKG_STATUS"="BLACKLISTED"];then
echo"$PKG is blacklisted, so not scheduling it."
continue
else
echo$REPO/$pkgbase>>$UPDATED
echo"$REPO/$pkgbase$VERSION is known in the database, but repo now has $version which is newer, so rescheduling... "
PKG_ID=$(query_db "SELECT id FROM sources WHERE distribution=$DISTROID AND name='$PKG' AND suite='$SUITE' AND architecture='$ARCH';")
echo" SELECT * FROM schedule WHERE package_id = '${PKG_ID}';"
SCHEDULED=$(query_db "SELECT * FROM schedule WHERE package_id = '${PKG_ID}';")
if[-z"$SCHEDULED"];then
echo" INSERT INTO schedule (package_id, date_scheduled) VALUES ('${PKG_ID}', '$DATE');"
query_db "INSERT INTO schedule (package_id, date_scheduled) VALUES ('${PKG_ID}', '$DATE');"
else
echo" $PKG (package_id: ${PKG_ID}) already scheduled, not scheduling again."
fi
fi
elif["$VERCMP"="-1"];then
# our version is higher than what's in the repo because we build trunk
echo"$REPO/$pkgbase$VERSION in db is higher than $version in repo because we build trunk."
else
echo" Boom boom boom boom boom."
echo" This should never happen: we know about $pkgbase with $VERSION, but repo has $version. VERCMP=$VERCMP"
echo" PKG_IN_DB=${PKG_IN_DB}"
fi
fi
printf'%s %s\n'"$pkgbase""$version">>$TMPPKGLIST
done
mv$TMPPKGLIST"$ALPINE_PKGS"_"$REPO"
new=$(grep-c ^$REPO$NEW||true)
updated=$(grep-c ^$REPO$UPDATED||true)
echo"$(date-u) - scheduled $new/$updated packages in repository '$REPO'."
done
schroot --end-session-c$SESSION
#
# schedule up to $MAX packages in DEPWAIT_ or 404_ states
# (which have been tried at least 16h ago)
#
echo"$(date-u) - should we schedule packages in DEPWAIT_ or 404_ states?"
local MAX=350
local MINDATE=$(date-u +"%Y-%m-%d %H:%M"-d"16 hours ago")
local SCHDATE=$(date-u +"%Y-%m-%d %H:%M"-d"7 days")
QUERY="SELECT s.id FROM sources AS s
JOIN results AS r ON s.id=r.package_id
WHERE s.distribution = $DISTROID
AND s.architecture='x86_64'
AND (r.status LIKE 'DEPWAIT%' OR r.status LIKE '404%')
AND r.build_date < '$MINDATE'
AND s.id NOT IN (SELECT package_id FROM schedule)
LIMIT $MAX;"
local DEPWAIT404=$(query_db "$QUERY")
if[!-z"$DEPWAIT404"];then
for PKG_ID in$DEPWAIT404;do
QUERY="INSERT INTO schedule (package_id, date_scheduled) VALUES ('${PKG_ID}', '$SCHDATE');"
query_db "$QUERY"
done
echo"$(date-u) - done scheduling $(echo-n"$DEPWAIT404" | wc-l) packages in DEPWAIT_ or 404_ states."
else
echo"$(date-u) - no."
fi
#
# schedule up to $MAX packages we already know about
# (only if less than $THRESHOLD packages are currently scheduled)
#
echo"$(date-u) - should we schedule old packages?"
MAX=501
local THRESHOLD=600
MINDATE=$(date-u +"%Y-%m-%d %H:%M"-d"4 days ago")
SCHDATE=$(date-u +"%Y-%m-%d %H:%M"-d"7 days")
local CURRENT=$(query_db "SELECT count(*) FROM sources AS s JOIN schedule AS sch ON s.id=sch.package_id WHERE s.distribution=$DISTROID AND s.architecture='x86_64' AND sch.date_build_started IS NULL;")
FROM sources AS s JOIN results AS r ON s.id = r.package_id
WHERE s.distribution=$DISTROID
AND s.architecture='x86_64'
AND r.status != 'BLACKLISTED'
AND r.build_date < '$MINDATE'
AND s.id NOT IN (SELECT schedule.package_id FROM schedule)
GROUP BY s.id, s.name
ORDER BY max_date
LIMIT $MAX;"
local OLD=$(query_db "$QUERY")
for PKG_ID in$(echo-n"$OLD" | cut-d'|'-f1);do
QUERY="INSERT INTO schedule (package_id, date_scheduled) VALUES ('${PKG_ID}', '$SCHDATE');"
query_db "$QUERY"
done
echo"$(date-u) - done scheduling $MAX old packages."
else
echo"$(date-u) - no."
fi
#
# output stats
#
rm"$ALPINE_PKGS"_full_pkgbase_list
total=$(query_db "SELECT count(*) FROM sources AS s JOIN schedule AS sch ON s.id=sch.package_id WHERE s.distribution=$DISTROID AND s.architecture='x86_64' AND sch.date_build_started IS NULL;")