Mercurial > public > mercurial-scm > hg-stable
annotate hgdemandimport/tracing.py @ 44350:c577bb4a04d4
nodemap: have some python code writing a nodemap in persistent binary form
This python code aims to be as "simple" as possible. It is a reference
implementation of the data we are going to write on disk (and possibly,
later a way for pure python install to make sure the on disk data are up to
date).
It is not optimized for performance and rebuild the full data structure from
the index every time.
This is a stepping stone toward a persistent nodemap on disk.
Differential Revision: https://phab.mercurial-scm.org/D7834
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 15 Jan 2020 15:47:12 +0100 |
parents | 2372284d9457 |
children | 6000f5b25c9b |
rev | line source |
---|---|
39282
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 |
42661
978c9a0c5974
demandimport: explicitly declare `_session` at the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42493
diff
changeset
|
15 _session = 'none' |
39282
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
16 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42661
diff
changeset
|
17 |
42492
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
18 def _isactive(): |
39282
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
19 global _pipe, _session, _checked |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
20 if _pipe is None: |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
21 if _checked: |
42492
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
22 return False |
39282
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: |
42492
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
25 return False |
39282
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
26 _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
|
27 _session = os.environ.get('HGCATAPULTSESSION', 'none') |
42492
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
28 return True |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
29 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42661
diff
changeset
|
30 |
42492
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
31 @contextlib.contextmanager |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
32 def log(whencefmt, *whenceargs): |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
33 if not _isactive(): |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
34 yield |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
35 return |
39282
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
36 whence = whencefmt % whenceargs |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
37 try: |
39424
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
38 # 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:
39282
diff
changeset
|
39 # 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:
39282
diff
changeset
|
40 # is active. Presumably other conditions could trigger |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
41 # problems too. |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
42 try: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
43 _pipe.write('START %s %s\n' % (_session, whence)) |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
44 except IOError: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
45 pass |
39282
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
46 yield |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
47 finally: |
39424
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
48 try: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
49 _pipe.write('END %s %s\n' % (_session, whence)) |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
50 except IOError: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
51 pass |
42493
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
52 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42661
diff
changeset
|
53 |
42493
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
54 def counter(label, amount, *labelargs): |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
55 if not _isactive(): |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
56 return |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
57 l = label % labelargs |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
58 # See above in log() for why this is in a try/except. |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
59 try: |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
60 _pipe.write('COUNTER %s %d %s\n' % (_session, amount, l)) |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
61 except IOError: |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
62 pass |