Improve always-on-trace

Notes to the user need to go to stderr, and tracing should not be on for
fast exiting invocations (such as --help).

This makes it so that release/update-manpages works.

Change-Id: Ib183193c868a78c295a184c01c4532cd53d512eb
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/350794
Tested-by: LaMont Jones <lamontjones@google.com>
Reviewed-by: Xin Li <delphij@google.com>
This commit is contained in:
LaMont Jones 2022-11-07 23:19:14 +00:00
parent 776138a938
commit a3ff64cae5
2 changed files with 17 additions and 10 deletions

25
main.py
View File

@ -216,6 +216,21 @@ class _Repo(object):
self._PrintHelp(short=True) self._PrintHelp(short=True)
return 1 return 1
run = lambda: self._RunLong(name, gopts, argv) or 0
with Trace('starting new command: %s', ', '.join([name] + argv),
first_trace=True):
if gopts.trace_python:
import trace
tracer = trace.Trace(count=False, trace=True, timing=True,
ignoredirs=set(sys.path[1:]))
result = tracer.runfunc(run)
else:
result = run()
return result
def _RunLong(self, name, gopts, argv):
"""Execute the (longer running) requested subcommand."""
result = 0
SetDefaultColoring(gopts.color) SetDefaultColoring(gopts.color)
git_trace2_event_log = EventLog() git_trace2_event_log = EventLog()
@ -663,15 +678,7 @@ def _Main(argv):
if gopts.trace_to_stderr: if gopts.trace_to_stderr:
SetTraceToStderr() SetTraceToStderr()
with Trace('starting new command: %s', ', '.join([name] + argv), first_trace=True): result = repo._Run(name, gopts, argv) or 0
run = lambda: repo._Run(name, gopts, argv) or 0
if gopts.trace_python:
import trace
tracer = trace.Trace(count=False, trace=True, timing=True,
ignoredirs=set(sys.path[1:]))
result = tracer.runfunc(run)
else:
result = run()
except KeyboardInterrupt: except KeyboardInterrupt:
print('aborted by user', file=sys.stderr) print('aborted by user', file=sys.stderr)
result = 1 result = 1

View File

@ -119,7 +119,7 @@ def _GetTraceFile():
# TODO: refactor to pass repodir to Trace. # TODO: refactor to pass repodir to Trace.
repo_dir = os.path.dirname(os.path.dirname(__file__)) repo_dir = os.path.dirname(os.path.dirname(__file__))
trace_file = os.path.join(repo_dir, _TRACE_FILE_NAME) trace_file = os.path.join(repo_dir, _TRACE_FILE_NAME)
print('Trace outputs in %s' % trace_file) print('Trace outputs in %s' % trace_file, file=sys.stderr)
return trace_file return trace_file
def _ClearOldTraces(): def _ClearOldTraces():