Index: src/poudriere.d/common.sh ================================================================== --- src/poudriere.d/common.sh +++ src/poudriere.d/common.sh @@ -1200,10 +1200,11 @@ # Add to cache if not found. if [ -z "${pkgname}" ]; then pkgname=$(injail make -C /usr/ports/${origin} -VPKGNAME) # Make sure this origin did not already exist existing_origin=$(cache_get_origin "${pkgname}") + [ "${existing_origin}" = "${origin}" ] && return [ -n "${existing_origin}" ] && err 1 "Duplicated origin for ${pkgname}: ${origin} AND ${existing_origin}. Rerun with -D to see which ports are depending on these." echo "${origin} ${pkgname}" >> ${MASTERMNT:-${JAILMNT}}/poudriere/var/cache/origin-pkgname fi echo ${pkgname} } @@ -1212,26 +1213,39 @@ [ $# -ne 1 ] && eargs pkgname local pkgname=$1 awk -v p=${pkgname} '$2 == p { print $1 }' ${MASTERMNT:-${JAILMNT}}/poudriere/var/cache/origin-pkgname } + +wait_for_slot() { + local nbj=0 + nbj=$(jobs -p | wc -l) + while [ ${nbj##* } -ge ${PARALLEL_JOBS} ]; do + wait + done +} # Take optional pkgname to speedup lookup compute_deps() { [ $# -lt 1 ] && eargs port [ $# -gt 2 ] && eargs port pkgnme local port=$1 + mkdir -p ${JAILMNT}/poudriere/locks/ + mkdir ${JAILMNT}/poudriere/locks/${port%%/*}_${port##*/} 2>/dev/null || return local pkgname="${2:-$(cache_get_pkgname ${port})}" + [ -z "${pkgname}" ] && return + rmdir ${JAILMNT}/poudriere/locks/${port%%/*}_${port##*/} local dep_pkgname dep_port local pkg_pooldir="${JAILMNT}/poudriere/pool/${pkgname}" [ -d "${pkg_pooldir}" ] && return mkdir "${pkg_pooldir}" for dep_port in `list_deps ${port}`; do debug "${port} depends on ${dep_port}" dep_pkgname=$(cache_get_pkgname ${dep_port}) - compute_deps "${dep_port}" "${dep_pkgname}" + wait_for_slot + compute_deps "${dep_port}" "${dep_pkgname}" & touch "${pkg_pooldir}/${dep_pkgname}" done } listed_ports() { @@ -1268,11 +1282,12 @@ :> ${JAILMNT}/poudriere/ports.skipped build_stats zset status "computingdeps:" listed_ports | while read port; do - compute_deps "${port}" + wait_for_slot + compute_deps "${port}" & done zset status "sanity:" if [ ${CLEAN_LISTED:-0} -eq 1 ]; then