diff --git a/main.py b/main.py index a22c6a1f..f4b6e7ac 100755 --- a/main.py +++ b/main.py @@ -109,7 +109,7 @@ global_options.add_option('--color', global_options.add_option('--trace', dest='trace', action='store_true', help='trace git command execution (REPO_TRACE=1)') -global_options.add_option('--trace_to_stderr', +global_options.add_option('--trace-to-stderr', dest='trace_to_stderr', action='store_true', help='trace outputs go to stderr in addition to .repo/TRACE_FILE') global_options.add_option('--trace-python', diff --git a/man/repo.1 b/man/repo.1 index e7368a84..6a9e07de 100644 --- a/man/repo.1 +++ b/man/repo.1 @@ -25,7 +25,7 @@ control color usage: auto, always, never \fB\-\-trace\fR trace git command execution (REPO_TRACE=1) .TP -\fB\-\-trace_to_stderr\fR +\fB\-\-trace-to-stderr\fR trace outputs go to stderr in addition to \&.repo/TRACE_FILE .TP diff --git a/repo_trace.py b/repo_trace.py index 03542950..86cbfc62 100644 --- a/repo_trace.py +++ b/repo_trace.py @@ -22,10 +22,11 @@ To also include trace outputs in stderr do `repo --trace_to_stderr ...` import sys import os -import tempfile import time from contextlib import ContextDecorator +import platform_utils + # Env var to implicitly turn on tracing. REPO_TRACE = 'REPO_TRACE' @@ -38,7 +39,7 @@ _TRACE_FILE = None _TRACE_FILE_NAME = 'TRACE_FILE' -_MAX_SIZE = 5 # in mb +_MAX_SIZE = 70 # in mb _NEW_COMMAND_SEP = '+++++++++++++++NEW COMMAND+++++++++++++++++++' @@ -123,7 +124,7 @@ def _GetTraceFile(): return trace_file def _ClearOldTraces(): - """Clear traces from old commands if trace file is too big. + """Clear the oldest commands if trace file is too big. Note: If the trace file contains output from two `repo` commands that were running at the same time, this @@ -131,12 +132,12 @@ def _ClearOldTraces(): """ if os.path.isfile(_TRACE_FILE): while os.path.getsize(_TRACE_FILE)/(1024*1024) > _MAX_SIZE: - temp = tempfile.NamedTemporaryFile(mode='w', delete=False) + temp_file = _TRACE_FILE + '.tmp' with open(_TRACE_FILE, 'r', errors='ignore') as fin: - trace_lines = fin.readlines() - for i , l in enumerate(trace_lines): - if 'END:' in l and _NEW_COMMAND_SEP in l: - temp.writelines(trace_lines[i+1:]) - break - temp.close() - os.replace(temp.name, _TRACE_FILE) + with open(temp_file, 'w') as tf: + trace_lines = fin.readlines() + for i , l in enumerate(trace_lines): + if 'END:' in l and _NEW_COMMAND_SEP in l: + tf.writelines(trace_lines[i+1:]) + break + platform_utils.rename(temp_file, _TRACE_FILE)