##// END OF EJS Templates
test-bundle: split each variant in there own section...
test-bundle: split each variant in there own section Having conditional line matching for this kind of big block is quite inconvenient to update. The new way should be simpler to maintain. Differential Revision: https://phab.mercurial-scm.org/D12075

File last commit:

r43346:2372284d default
r49490:23db8460 default
Show More
tracing.py
62 lines | 1.6 KiB | text/x-python | PythonLexer
Augie Fackler
tracing: new module to make tracing events in hg easier...
r39290 # Support code for event tracing in Mercurial. Lives in demandimport
# so it can also be used in demandimport.
#
# Copyright 2018 Google LLC.
#
# 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 contextlib
import os
_pipe = None
_checked = False
demandimport: explicitly declare `_session` at the module level...
r42939 _session = 'none'
Augie Fackler
tracing: new module to make tracing events in hg easier...
r39290
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
tracing: extract tracing-active logic to separate function...
r42676 def _isactive():
Augie Fackler
tracing: new module to make tracing events in hg easier...
r39290 global _pipe, _session, _checked
if _pipe is None:
if _checked:
Augie Fackler
tracing: extract tracing-active logic to separate function...
r42676 return False
Augie Fackler
tracing: new module to make tracing events in hg easier...
r39290 _checked = True
if 'HGCATAPULTSERVERPIPE' not in os.environ:
Augie Fackler
tracing: extract tracing-active logic to separate function...
r42676 return False
Augie Fackler
tracing: new module to make tracing events in hg easier...
r39290 _pipe = open(os.environ['HGCATAPULTSERVERPIPE'], 'w', 1)
_session = os.environ.get('HGCATAPULTSESSION', 'none')
Augie Fackler
tracing: extract tracing-active logic to separate function...
r42676 return True
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
tracing: extract tracing-active logic to separate function...
r42676 @contextlib.contextmanager
def log(whencefmt, *whenceargs):
if not _isactive():
yield
return
Augie Fackler
tracing: new module to make tracing events in hg easier...
r39290 whence = whencefmt % whenceargs
try:
Augie Fackler
tracing: ignore any IOErrors when writing to pipe...
r39434 # Both writes to the pipe are wrapped in try/except to ignore
# errors, as we can see mysterious errors in here if the pager
# is active. Presumably other conditions could trigger
# problems too.
try:
_pipe.write('START %s %s\n' % (_session, whence))
except IOError:
pass
Augie Fackler
tracing: new module to make tracing events in hg easier...
r39290 yield
finally:
Augie Fackler
tracing: ignore any IOErrors when writing to pipe...
r39434 try:
_pipe.write('END %s %s\n' % (_session, whence))
except IOError:
pass
Augie Fackler
tracing: add support for emitting counters...
r42677
Augie Fackler
formatting: blacken the codebase...
r43346
Augie Fackler
tracing: add support for emitting counters...
r42677 def counter(label, amount, *labelargs):
if not _isactive():
return
l = label % labelargs
# See above in log() for why this is in a try/except.
try:
_pipe.write('COUNTER %s %d %s\n' % (_session, amount, l))
except IOError:
pass