annotate hgdemandimport/tracing.py @ 44450:7d5455b988ec stable

discovery: avoid wrong detection of multiple branch heads (issue6256) This fix the code using obsolescence markers to remove "to be obsoleted" heads during the detection of new head creation from push. The code turned out to not use the branch information at all. This lead changeset from different branch to be detected as new head on unrelated branch. The code fix is actually quite simple. New tests have been added to covers these cases. Differential Revision: https://phab.mercurial-scm.org/D8259
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 06 Mar 2020 23:27:28 +0100
parents 2372284d9457
children 6000f5b25c9b
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
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42709
diff changeset
17
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
18 def _isactive():
39254
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:
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
22 return False
39254
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:
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
25 return False
39254
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')
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
28 return True
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
29
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42709
diff changeset
30
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
31 @contextlib.contextmanager
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
32 def log(whencefmt, *whenceargs):
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
33 if not _isactive():
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
34 yield
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
35 return
39254
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:
39397
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
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: 39254
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: 39254
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: 39254
diff changeset
41 # problems too.
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
42 try:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
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: 39254
diff changeset
44 except IOError:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
45 pass
39254
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:
39397
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
48 try:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
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: 39254
diff changeset
50 except IOError:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
51 pass
42477
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
52
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42709
diff changeset
53
42477
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
54 def counter(label, amount, *labelargs):
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
55 if not _isactive():
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
56 return
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
57 l = label % labelargs
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
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: 42476
diff changeset
59 try:
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
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: 42476
diff changeset
61 except IOError:
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
62 pass