##// END OF EJS Templates
test-copies: show some wrong ChangedFiles upgrade...
test-copies: show some wrong ChangedFiles upgrade For file present only on one side and touched during merge, the upgrade code confused them as "merged". However they should be either "touched", or "salvaged" but they are currently recorded as "merged". See the next changesets for more details on these cases and fix. Differential Revision: https://phab.mercurial-scm.org/D10218

File last commit:

r43346:2372284d default
r47568:e4696ba4 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