Correctly exit from extract_run() and update_run() if files needed are

missing from ${WORKDIR}/files/.

This bug was caused by the astonishing interaction of "return" and
pipelines; in the following code, the "return" does not exit the
function, but instead exits the subshell which was spawned for the last
element of the pipeline; consequently, the output produced is "foo".

foo() {
	echo bar | while read baz; do
		if [ ${baz} = "bar" ]; then
			return 1
		fi
	done

	echo foo
}

Reported by:	simon
This commit is contained in:
cperciva 2005-08-13 21:28:43 +00:00
parent 880a322170
commit 157c398c7e

View File

@ -768,7 +768,7 @@ extract_metadata() {
# Do the actual work involved in "extract"
extract_run() {
grep "^${EXTRACTPATH}" ${WORKDIR}/INDEX | while read LINE; do
if ! grep "^${EXTRACTPATH}" ${WORKDIR}/INDEX | while read LINE; do
FILE=`echo ${LINE} | cut -f 1 -d '|'`
HASH=`echo ${LINE} | cut -f 2 -d '|'`
echo ${PORTSDIR}/${FILE}
@ -789,7 +789,9 @@ extract_run() {
-C ${PORTSDIR} ${FILE}
;;
esac
done
done; then
return 1
fi
if [ ! -z "${EXTRACTPATH}" ]; then
return 0;
fi
@ -818,7 +820,8 @@ update_run() {
# Install new files
echo "Extracting new files:"
sort ${WORKDIR}/INDEX | comm -13 ${PORTSDIR}/.portsnap.INDEX - |
if ! sort ${WORKDIR}/INDEX |
comm -13 ${PORTSDIR}/.portsnap.INDEX - |
while read LINE; do
FILE=`echo ${LINE} | cut -f 1 -d '|'`
HASH=`echo ${LINE} | cut -f 2 -d '|'`
@ -838,7 +841,9 @@ update_run() {
-C ${PORTSDIR} ${FILE}
;;
esac
done
done; then
return 1
fi
extract_metadata
extract_indices