encoding: improve handling of buggy getpreferredencoding() on Mac OS X
Prior to version 2.7, calling locale.getpreferredencoding() would
always return 'mac-roman' on Mac OS X. Previously, this was handled by
a call to locale.setlocale(). Unfortunately, Python 2.6.5 and older
have a bug where isspace() would incorrectly report True for 0x85 and
0xa0 after such a call.
In order to fix this, we replace the previous _encodingfixup mapping
to an _encodingfixers mapping. Rather than mapping encodings to their
replacement, it maps them to a function returning the
replacement. This allows us to provide an simplified implementation of
getpreferredencoding() which extracts the expected encoding and
restores the locale.
This fix is based on a patch originally submitted by Martijn Pieters
as well as feedback from Brodie Rao.
#!/bin/sh
hgserve()
{
hg serve -a localhost -d --pid-file=hg.pid -E errors.log -v $@ \
| sed -e "s/:$HGPORT1\\([^0-9]\\)/:HGPORT1\1/g" \
-e "s/:$HGPORT2\\([^0-9]\\)/:HGPORT2\1/g" \
-e 's/http:\/\/[^/]*\//http:\/\/localhost\//'
cat hg.pid >> "$DAEMON_PIDS"
echo % errors
cat errors.log
sleep 1
kill `cat hg.pid`
sleep 1
}
hg init test
cd test
echo '[web]' > .hg/hgrc
echo 'accesslog = access.log' >> .hg/hgrc
echo "port = $HGPORT1" >> .hg/hgrc
echo % Without -v
hg serve -a localhost -p $HGPORT -d --pid-file=hg.pid -E errors.log
cat hg.pid >> "$DAEMON_PIDS"
if [ -f access.log ]; then
echo 'access log created - .hg/hgrc respected'
fi
echo % errors
cat errors.log
echo % With -v
hgserve
echo % With -v and -p HGPORT2
hgserve -p "$HGPORT2"
echo % With --prefix foo
hgserve --prefix foo
echo % With --prefix /foo
hgserve --prefix /foo
echo % With --prefix foo/
hgserve --prefix foo/
echo % With --prefix /foo/
hgserve --prefix /foo/