Skip to content
Snippets Groups Projects
  • Gregory Szorc's avatar
    4daa2207
    hgweb: stop passing req and tmpl into @webcommand functions (API) · 4daa2207
    Gregory Szorc authored
    We have effectively removed all consumers of the old wsgirequest
    type. The templater can be accessed on the requestcontext passed
    into the @webcommand function.
    
    For the most part, these arguments are unused. They only exist to
    provide backwards compatibility. And in the case of wsgirequest,
    use of that object could actively interfere with the new request
    object.
    
    So let's stop passing these objects to @webcommand functions.
    
    With this commit, wsgirequest is practically dead from the hgweb
    WSGI application. There are still some uses in hgwebdir though...
    
    .. api::
    
       @webcommand functions now only receive a single argument. The
       request and templater instances can be accessed via the
       ``req`` and ``templater`` attributes of the first argument.
       Note that the request object is different from previous Mercurial
       releases and consumers of the previous ``req`` 2nd argument
       will need updating to use the new API.
    
    Differential Revision: https://phab.mercurial-scm.org/D2803
    4daa2207
    History
    hgweb: stop passing req and tmpl into @webcommand functions (API)
    Gregory Szorc authored
    We have effectively removed all consumers of the old wsgirequest
    type. The templater can be accessed on the requestcontext passed
    into the @webcommand function.
    
    For the most part, these arguments are unused. They only exist to
    provide backwards compatibility. And in the case of wsgirequest,
    use of that object could actively interfere with the new request
    object.
    
    So let's stop passing these objects to @webcommand functions.
    
    With this commit, wsgirequest is practically dead from the hgweb
    WSGI application. There are still some uses in hgwebdir though...
    
    .. api::
    
       @webcommand functions now only receive a single argument. The
       request and templater instances can be accessed via the
       ``req`` and ``templater`` attributes of the first argument.
       Note that the request object is different from previous Mercurial
       releases and consumers of the previous ``req`` 2nd argument
       will need updating to use the new API.
    
    Differential Revision: https://phab.mercurial-scm.org/D2803
hgweberror.py 756 B
# A dummy extension that installs an hgweb command that throws an Exception.

from __future__ import absolute_import

from mercurial.hgweb import (
    webcommands,
)

def raiseerror(web):
    '''Dummy web command that raises an uncaught Exception.'''

    # Simulate an error after partial response.
    if 'partialresponse' in web.req.qsparams:
        web.res.status = b'200 Script output follows'
        web.res.headers[b'Content-Type'] = b'text/plain'
        web.res.setbodywillwrite()
        list(web.res.sendresponse())
        web.res.getbodyfile().write(b'partial content\n')

    raise AttributeError('I am an uncaught error!')

def extsetup(ui):
    setattr(webcommands, 'raiseerror', raiseerror)
    webcommands.__all__.append('raiseerror')