Mercurial > hg
annotate hgdemandimport/tracing.py @ 48716:f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
We use the mergestate to carry information about these merge action and
reprocess them at commit time to apply the necessary update.
The dirstate itself is never affected and remains "pure", with content only in
the narrow-spec. This file involved in such merge are therefor not listed in `hg
status`.
The current testing is based on a modification of the previous testing, that
refused to do such merges. As a result it is a bit simple and more extensive
code and testing testing will have to be introduced later. I am planning to do
this extra testing, soon.
In addition, this only works for flat manifest. Support for tree manifest will
need more work. I am not currently planning to do this work.
Differential Revision: https://phab.mercurial-scm.org/D12119
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 03 Feb 2022 18:14:11 +0100 |
parents | 2372284d9457 |
children | 6000f5b25c9b |
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 |