Mercurial > hg
annotate hgdemandimport/tracing.py @ 40806:151aec6494a8
extdiff: avoid double backslashes in the displayed tool path on Windows
This shows the tool path in the help, and changed in 67b180c0e263. uirepr()
already does the same thing, but that undoes the mangling in its call to repr().
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 03 Dec 2018 12:48:42 -0500 |
parents | 452790284a15 |
children | d0b8a3cfd732 |
rev | line source |
---|---|
39254
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1 # Support code for event tracing in Mercurial. Lives in demandimport |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2 # so it can also be used in demandimport. |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3 # |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4 # Copyright 2018 Google LLC. |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
5 # |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
7 # GNU General Public License version 2 or any later version. |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
8 from __future__ import absolute_import |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
9 |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
10 import contextlib |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
11 import os |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
12 |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
13 _pipe = None |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
14 _checked = False |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
15 |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
16 @contextlib.contextmanager |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
17 def log(whencefmt, *whenceargs): |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
18 global _pipe, _session, _checked |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
19 if _pipe is None: |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
20 if _checked: |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
21 yield |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
22 return |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
23 _checked = True |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
24 if 'HGCATAPULTSERVERPIPE' not in os.environ: |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
25 yield |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
26 return |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
27 _pipe = open(os.environ['HGCATAPULTSERVERPIPE'], 'w', 1) |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
28 _session = os.environ.get('HGCATAPULTSESSION', 'none') |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
29 whence = whencefmt % whenceargs |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
30 try: |
39397
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
31 # Both writes to the pipe are wrapped in try/except to ignore |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
32 # errors, as we can see mysterious errors in here if the pager |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
33 # is active. Presumably other conditions could trigger |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
34 # problems too. |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
35 try: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
36 _pipe.write('START %s %s\n' % (_session, whence)) |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
37 except IOError: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
38 pass |
39254
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
39 yield |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
40 finally: |
39397
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
41 try: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
42 _pipe.write('END %s %s\n' % (_session, whence)) |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
43 except IOError: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
44 pass |