On Thu, Jun 19, 2008 at 2:12 AM, Garrett Cooper <[EMAIL PROTECTED]> wrote: > Hi, > Sorry for emailing this list, but neither the GNU indexed > homepage nor the actual project page listed any other email address. > I'm trying to determine whether or not this is an implicit bug or > a feature of BSD bourne shell (in particular FreeBSD's sh): > When I try and execute `portsnap fetch update' [1], things go > through as the author intended. However, using `bash portsnap fetch > update' I get the following error message: > > /usr/sbin/portsnap: portsnap: line 882: syntax error near unexpected > token `newline' > /usr/sbin/portsnap: portsnap: line 882: ` if !' > > The incompatible section of code (at least the one that bash > barfs on -- I say that because there are a few similar sections IIRC) > is: > > if ! > if ! [ -z "${EXTRACTPATH}" ]; then > grep "^${EXTRACTPATH}" ${WORKDIR}/INDEX > elif ! [ -z "${REFUSE}" ]; then > grep -vE "${REFUSE}" ${WORKDIR}/INDEX > else > cat ${WORKDIR}/INDEX > 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." > return 1 > fi > case ${FILE} in > */) > rm -rf ${PORTSDIR}/${FILE%/} > mkdir -p ${PORTSDIR}/${FILE} > tar -xzf ${WORKDIR}/files/${HASH}.gz \ > -C ${PORTSDIR}/${FILE} > ;; > *) > rm -f ${PORTSDIR}/${FILE} > tar -xzf ${WORKDIR}/files/${HASH}.gz \ > -C ${PORTSDIR} ${FILE} > ;; > esac > done; then > > I'm pretty sure that the issue is because the code spans multiple > lines and could be (typically) modularized out into a function in > bash. > So the question is, can anyone verify that either bash or > FreeBSD's sh is correct, and/or verify whether or not there is a > possible incompatibility with the POSIX spec for bourne shells in > either camp? > Thanks, > -Garrett > > PS Please CC me as I'm not subscribed to [EMAIL PROTECTED] > > [1] A copy of portsnap can be found here: > http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.sbin/portsnap/portsnap/portsnap.sh?rev=1.28;content-type=text%2Fplain
When I take the above code, combine remove the newline and make it into ... if ! if ! [ -z "${EXTRACTPATH}" ]; then ... as well as line 951, the script is parsed properly. The "problem" is reported at parse.y:3071, but I'm unsure how to trace back the issue through the yacc code. -Garrett