From 74b3c6ea466c0f725015326efe50e9947a786e80 Mon Sep 17 00:00:00 2001 From: Ryan Roberts Date: Sun, 11 Feb 2024 09:22:55 +0000 Subject: [PATCH] build: Save per-component build logs to log file Create a per-component log file at ${SHRINKWRAP_BUILD}/log//.log, into which all of the component's stdout and stderr are streamed. This is done always regardless of --verbose. Writing is line buffered to allow live use of (e.g.) `tail -f `. Signed-off-by: Ryan Roberts --- shrinkwrap/utils/graph.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/shrinkwrap/utils/graph.py b/shrinkwrap/utils/graph.py index 84e2f0d..3554eb1 100644 --- a/shrinkwrap/utils/graph.py +++ b/shrinkwrap/utils/graph.py @@ -100,10 +100,20 @@ def _run_script(pm, data, script): with open(tmpfilename, 'w') as tmpfile: tmpfile.write(script.commands()) + if script.config and script.component: + logname = os.path.join(workspace.build, + 'log', + script.config, + f'{script.component}.log') + os.makedirs(os.path.dirname(logname), exist_ok=True) + logfile = open(logname, 'w', buffering=1) + else: + logfile = None + # Start the process asynchronously. pm.add(process.Process(f'bash {tmpfilename}', False, - (*data, script, tmpdir), + (*data, script, tmpdir, logfile), True)) @@ -139,6 +149,9 @@ def execute(graph, tasks, verbose=False, colorize=True): return False def _log(pm, proc, data, streamid): + logfile = proc.data[4] + if logfile: + logfile.write(data) if verbose: log.log(pm, proc, data, streamid) else: @@ -155,6 +168,10 @@ def execute(graph, tasks, verbose=False, colorize=True): data = proc.data[1] frag = proc.data[2] tmpdir = proc.data[3] + logfile = proc.data[4] + + if logfile: + logfile.close() shutil.rmtree(tmpdir) -- GitLab