annotate hgdemandimport/tracing.py @ 42791:90f5dfc9c42a

revlog: avoid caching raw text too early in _revisiondata Without this change, we could cache the rawtext without considering for it validating the cache or not. If the exception raised by the invalid hash were to be caught and the same revision accessed again, the invalid rawtext would be returned.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 19 Aug 2019 16:29:43 +0200
parents 978c9a0c5974
children 2372284d9457
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
42709
978c9a0c5974 demandimport: explicitly declare `_session` at the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42477
diff changeset
15 _session = 'none'
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
16
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
17 def _isactive():
39254
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:
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
21 return False
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
22 _checked = True
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
23 if 'HGCATAPULTSERVERPIPE' not in os.environ:
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
24 return False
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
25 _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
26 _session = os.environ.get('HGCATAPULTSESSION', 'none')
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
27 return True
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
28
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
29 @contextlib.contextmanager
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
30 def log(whencefmt, *whenceargs):
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
31 if not _isactive():
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
32 yield
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
33 return
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
34 whence = whencefmt % whenceargs
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
35 try:
39397
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
36 # 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
37 # 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
38 # 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
39 # problems too.
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
40 try:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
41 _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
42 except IOError:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
43 pass
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
44 yield
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
45 finally:
39397
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
46 try:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
47 _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
48 except IOError:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
49 pass
42477
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
50
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
51 def counter(label, amount, *labelargs):
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
52 if not _isactive():
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
53 return
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
54 l = label % labelargs
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
55 # 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: 42476
diff changeset
56 try:
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
57 _pipe.write('COUNTER %s %d %s\n' % (_session, amount, l))
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
58 except IOError:
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
59 pass