##// END OF EJS Templates
automation: execute powershell when connecting...
automation: execute powershell when connecting For some reason, the ability to execute PS scripts appears to come online after the ability to execute regular command scripts. This is creating race conditions when connecting to instances resulting in our wait_for_winrm() returning before PS is available leading to an exception being thrown in other code. Let's change the client connection code to execute a minimal PS script so we can try to trap the exception in wait_for_winrm().

File last commit:

r42677:e658ac39 default
r42885:e91930d7 5.1 stable
Show More
tracing.py
58 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
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
@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
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