tests: stabilize `test-clonebundles-autogen.t` on Windows
The problem was that the commands are spun up with `shell=True`, which uses
`cmd.exe`, which doesn't understand `$foo` style variables. The HGCB variable
expansion has to be delayed, because it's figured out right before launching
the command. We could probably add a conditional for Windows, and rewrite the
config to use `%foo%` style variables, but it's more maintainable to just wrap
the command in a bash shell invocation.
The forward style slashes in the path are needed to avoid accruing double
backslashes (when switching between shells- the url template seems fine). Also
need to strong quote the command so that the double quotes don't get stripped
off of `$HGCB_BUNDLE_PATH`, which results in:
sh: 1: Syntax error: Unterminated quoted string
abort: command returned status 2: sh -c "cp $HGCB_BUNDLE_PATH $TESTTMP/final-upload/"
# A dummy extension that installs an hgweb command that throws an Exception.
from mercurial.hgweb import webcommands
def raiseerror(web):
'''Dummy web command that raises an uncaught Exception.'''
# Simulate an error after partial response.
if b'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')