##// END OF EJS Templates
tests: finally fix up test-fuzz-targets.t...
tests: finally fix up test-fuzz-targets.t It's been failing on my workstation for a while, since I have a new enough LLVM that I had the fuzzer goo, but not so new that I actually had FuzzedDataProvider. This is a better solution all around in my opinion. I _believe_ this should let us run these tests on most systems, even those using GCC instead of clang. That said, my one attempt to test this on my macOS laptop failed miserably, and I don't feel like doing more work on this right now. Differential Revision: https://phab.mercurial-scm.org/D7566

File last commit:

r43346:2372284d default
r44267:19da643d default
Show More
logexceptions.py
76 lines | 1.8 KiB | text/x-python | PythonLexer
Gregory Szorc
run-tests: mechanism to report exceptions during test execution...
r35191 # logexceptions.py - Write files containing info about Mercurial exceptions
#
# Copyright 2017 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import
import inspect
import os
import sys
import traceback
import uuid
from mercurial import (
dispatch,
extensions,
)
Augie Fackler
formatting: blacken the codebase...
r43346
Gregory Szorc
run-tests: mechanism to report exceptions during test execution...
r35191 def handleexception(orig, ui):
res = orig(ui)
if not ui.environ.get(b'HGEXCEPTIONSDIR'):
return res
Augie Fackler
formatting: blacken the codebase...
r43346 dest = os.path.join(
ui.environ[b'HGEXCEPTIONSDIR'], str(uuid.uuid4()).encode('ascii')
)
Gregory Szorc
run-tests: mechanism to report exceptions during test execution...
r35191
exc_type, exc_value, exc_tb = sys.exc_info()
stack = []
tb = exc_tb
while tb:
stack.append(tb)
tb = tb.tb_next
stack.reverse()
hgframe = 'unknown'
hgline = 'unknown'
# Find the first Mercurial frame in the stack.
for tb in stack:
mod = inspect.getmodule(tb)
if not mod.__name__.startswith(('hg', 'mercurial')):
continue
frame = tb.tb_frame
try:
with open(inspect.getsourcefile(tb), 'r') as fh:
hgline = fh.readlines()[frame.f_lineno - 1].strip()
except (IndexError, OSError):
pass
hgframe = '%s:%d' % (frame.f_code.co_filename, frame.f_lineno)
break
primary = traceback.extract_tb(exc_tb)[-1]
primaryframe = '%s:%d' % (primary.filename, primary.lineno)
with open(dest, 'wb') as fh:
parts = [
str(exc_value),
primaryframe,
hgframe,
hgline,
Gregory Szorc
run-tests: report tests that exception occurred in...
r36054 ui.environ[b'TESTNAME'].decode('utf-8', 'replace'),
Gregory Szorc
run-tests: mechanism to report exceptions during test execution...
r35191 ]
fh.write(b'\0'.join(p.encode('utf-8', 'replace') for p in parts))
Augie Fackler
formatting: blacken the codebase...
r43346
Gregory Szorc
run-tests: mechanism to report exceptions during test execution...
r35191 def extsetup(ui):
Augie Fackler
formatting: blacken the codebase...
r43346 extensions.wrapfunction(dispatch, 'handlecommandexception', handleexception)