#!/bin/bash . "$(dirname $0)/../db-functions" . "$(dirname $0)/../config" reposdir=${FTP_BASE} targetdir=${FTP_BASE} script_lock # location where the package DB is extracted so we know what to include DBDIR="$(mktemp -d ${WORKDIR}/create-filelists.dbdir.XXXXXX)" || exit 1 # location where the old files DB is extracted to save us some work CACHEDIR="$(mktemp -d ${WORKDIR}/create-filelists.cachedir.XXXXXX)" || exit 1 # location where the new files DB is built up and eventually zipped MYTMPDIR="$(mktemp -d ${WORKDIR}/create-filelists.tmpdir.XXXXXX)" || exit 1 #adjust the nice level to run at a lower priority /usr/bin/renice +10 -p $$ > /dev/null case "${FILESEXT}" in *.gz) TAR_OPT="z" ;; *.bz2) TAR_OPT="j" ;; *.xz) TAR_OPT="J" ;; *) die "Unknown compression type for FILESEXT=${FILESEXT}" ;; esac for repo in ${PKGREPOS[@]}; do REPO_DB_FILE="${repo}$DBEXT" FILES_DB_FILE="${repo}$FILESEXT" for arch in ${ARCHES[@]}; do pushd "$reposdir" >/dev/null repodir="${repo}/os/${arch}" cached="no" # extract package db archive if [ -f "${targetdir}/${repodir}/${REPO_DB_FILE}" ]; then mkdir -p "${DBDIR}/${repodir}" bsdtar -xf "${targetdir}/${repodir}/${REPO_DB_FILE}" -C "${DBDIR}/${repodir}" else warning "The repo $repo with arch $arch does not exist" continue fi # extract old file archive if [ -f "${targetdir}/${repodir}/${FILES_DB_FILE}" ]; then mkdir -p "${CACHEDIR}/${repodir}" bsdtar -xf "${targetdir}/${repodir}/${FILES_DB_FILE}" -C "${CACHEDIR}/${repodir}" cached="yes" fi # create file lists for pkg in $(ls ${DBDIR}/${repodir}); do dbpkgdir="${DBDIR}/${repodir}/${pkg}" cachepkgdir="${CACHEDIR}/${repodir}/${pkg}" tmppkgdir="${MYTMPDIR}/${repodir}/${pkg}" mkdir -p "$tmppkgdir" ln "${dbpkgdir}/desc" "${tmppkgdir}/desc" ln "${dbpkgdir}/depends" "${tmppkgdir}/depends" if [ -f "${cachepkgdir}/files" ]; then ln "${cachepkgdir}/files" "${tmppkgdir}/files" else filename=$(grep -A1 '^%FILENAME%$' "${dbpkgdir}/desc" | tail -n1) echo '%FILES%' > "${tmppkgdir}/files" bsdtar --exclude=.* -tf "$repodir/$filename" >> "${tmppkgdir}/files" cached="no" fi done # create new file archive if [ "$cached" == "no" -a -d "${MYTMPDIR}/${repodir}" ]; then # at least one package has changed, so let's rebuild the archive pkgdir="${targetdir}/${repodir}" mkdir -p "$pkgdir" pushd "${MYTMPDIR}/${repodir}" >/dev/null [ -f "${pkgdir}/${FILES_DB_FILE}" ] && rm "${pkgdir}/${FILES_DB_FILE}" bsdtar --exclude=*${FILESEXT} -c${TAR_OPT}f "${pkgdir}/${FILES_DB_FILE}" * popd >/dev/null fi popd >/dev/null done done script_unlock # vim: set ts=4 sw=4 et ft=sh: