hgweb: cast bytearray to bytes
PEP-3333 seems to indicate that bytes is the only allowed type that can
be used to express the output of a WSGI application. And some WSGI
environments seem to enforce this (mod_wsgi does).
This commit universally casts bytearray instances to bytes to appease
the WSGI specification.
I found this because wireprotov2 is emitting bytearray instances. I'd
like to keep things that way because the way it builds a data
structure, bytearray is more efficient. I'd rather keep the low-level
code efficient (and using bytearray) and cast at the edges than impose
a performance penalty on code that may run outside WSGI contexts.
Test basic extension support
$ cat > foobar.py <<EOF
> import os
> from mercurial import commands, registrar
> cmdtable = {}
> command = registrar.command(cmdtable)
> configtable = {}
> configitem = registrar.configitem(configtable)
> configitem(b'tests', b'foo', default=b"Foo")
> def uisetup(ui):
> ui.debug(b"uisetup called [debug]\\n")
> ui.write(b"uisetup called\\n")
> ui.status(b"uisetup called [status]\\n")
> ui.flush()
> def reposetup(ui, repo):
> ui.write(b"reposetup called for %s\\n" % os.path.basename(repo.root))
> ui.write(b"ui %s= repo.ui\\n" % (ui == repo.ui and b"=" or b"!"))
> ui.flush()
> @command(b'foo', [], b'hg foo')
> def foo(ui, *args, **kwargs):
> foo = ui.config(b'tests', b'foo')
> ui.write(foo)
> ui.write(b"\\n")
> @command(b'bar', [], b'hg bar', norepo=True)
> def bar(ui, *args, **kwargs):
> ui.write(b"Bar\\n")
> EOF
$ abspath=`pwd`/foobar.py
$ mkdir barfoo
$ cp foobar.py barfoo/__init__.py
$ barfoopath=`pwd`/barfoo
$ hg init a
$ cd a
$ echo foo > file
$ hg add file
$ hg commit -m 'add file'
$ echo '[extensions]' >> $HGRCPATH
$ echo "foobar = $abspath" >> $HGRCPATH
Test extension setup timings
$ hg foo --traceback --config devel.debug.extensions=yes --debug 2>&1
debug.extensions: loading extensions
debug.extensions: - processing 1 entries
debug.extensions: - loading extension: 'foobar'
debug.extensions: > 'foobar' extension loaded in * (glob)
debug.extensions: - validating extension tables: 'foobar'
debug.extensions: - invoking registered callbacks: 'foobar'
debug.extensions: > callbacks completed in * (glob)
debug.extensions: > loaded 1 extensions, total time * (glob)
debug.extensions: - loading configtable attributes
debug.extensions: - executing uisetup hooks
debug.extensions: - running uisetup for 'foobar'
uisetup called [debug]
uisetup called
uisetup called [status]
debug.extensions: > uisetup for 'foobar' took * (glob)
debug.extensions: > all uisetup took * (glob)
debug.extensions: - executing extsetup hooks
debug.extensions: - running extsetup for 'foobar'
debug.extensions: > extsetup for 'foobar' took * (glob)
debug.extensions: > all extsetup took * (glob)
debug.extensions: - executing remaining aftercallbacks
debug.extensions: > remaining aftercallbacks completed in * (glob)
debug.extensions: - loading extension registration objects
debug.extensions: > extension registration object loading took * (glob)
debug.extensions: > extension foobar take a total of * to load (glob)
debug.extensions: extension loading complete
debug.extensions: loading additional extensions
debug.extensions: - processing 1 entries
debug.extensions: > loaded 0 extensions, total time * (glob)
debug.extensions: - loading configtable attributes
debug.extensions: - executing uisetup hooks
debug.extensions: > all uisetup took * (glob)
debug.extensions: - executing extsetup hooks
debug.extensions: > all extsetup took * (glob)
debug.extensions: - executing remaining aftercallbacks
debug.extensions: > remaining aftercallbacks completed in * (glob)
debug.extensions: - loading extension registration objects
debug.extensions: > extension registration object loading took * (glob)
debug.extensions: extension loading complete
debug.extensions: - executing reposetup hooks
debug.extensions: - running reposetup for foobar
reposetup called for a
ui == repo.ui
debug.extensions: > reposetup for 'foobar' took * (glob)
debug.extensions: > all reposetup took * (glob)
Foo
$ cd ..
$ echo 'foobar = !' >> $HGRCPATH