From 2a569ec90045cda50502e26ded75433d67922bc1 Mon Sep 17 00:00:00 2001 From: Colin Percival Date: Tue, 30 May 2006 07:08:41 +0000 Subject: [PATCH] Use some features of sh(1) which I didn't know about until today ("read" can read two variables at once; and suffix pattern deletion) to make the extract command fork fewer processes. With the portsnap snapshot and the ports tree in swap-backed memory disks on my 1.4GHz laptop, this reduces 178800 processes and 195/56/126 seconds of real/user/sys time to 44600 processes and 103/34/60 seconds. --- usr.sbin/portsnap/portsnap/portsnap.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/usr.sbin/portsnap/portsnap/portsnap.sh b/usr.sbin/portsnap/portsnap/portsnap.sh index d74190f7b0a5..6cecd49a2456 100644 --- a/usr.sbin/portsnap/portsnap/portsnap.sh +++ b/usr.sbin/portsnap/portsnap/portsnap.sh @@ -873,9 +873,7 @@ extract_run() { grep -vE "${REFUSE}" ${WORKDIR}/INDEX else cat ${WORKDIR}/INDEX - fi | while read LINE; do - FILE=`echo ${LINE} | cut -f 1 -d '|'` - HASH=`echo ${LINE} | cut -f 2 -d '|'` + fi | tr '|' ' ' | while read FILE HASH; do echo ${PORTSDIR}/${FILE} if ! [ -r "${WORKDIR}/files/${HASH}.gz" ]; then echo "files/${HASH}.gz not found -- snapshot corrupt." @@ -883,8 +881,7 @@ extract_run() { fi case ${FILE} in */) - DIR=`echo ${FILE} | sed -e 's|/$||'` - rm -rf ${PORTSDIR}/${DIR} + rm -rf ${PORTSDIR}/${FILE%/} mkdir -p ${PORTSDIR}/${FILE} tar -xzf ${WORKDIR}/files/${HASH}.gz \ -C ${PORTSDIR}/${FILE}