ExecContext: Fix output handling #9

Merged
Jan Lindemann merged 5 commits from jan/fix/20260610-lib-execcontext-put-fix-forgotten-input into master 2026-06-10 13:08:29 +02:00 AGit
Showing only changes of commit cd1716ff6f - Show all commits

lib.ExecContext._put(): Clean up temporary file

_put() can leave temporary files behind if one of its shell commands fails, fix that.

Signed-off-by: Jan Lindemann <jan@janware.com>
Jan Lindemann 2026-06-10 11:50:19 +02:00
Signed by: Jan Lindemann
GPG key ID: 3750640C9E25DD61

View file

@ -516,13 +516,14 @@ class ExecContext(Base):
cmd: list[str]
cmd_input: Input = InputMode.NonInteractive
tmp_file: str | None = None
if wd is not None:
path = wd + '/' + path
cmds: list[RemoteCmd] = []
stdout = (await __run(['mktemp', path + '.XXXXXX'])).stdout_str
if stdout is None:
raise Exception(f'Failed to create tmp-directory on {self.root}')
out = stdout.strip() if atomic else path
out = path
if atomic:
out = (await __run(['mktemp', path + '.XXXXXX'])).stdout_str.strip()
tmp_file = out
cmds.append(RemoteCmd(
cmd = ['tee', out],
cmd_input = content,
@ -552,8 +553,11 @@ class ExecContext(Base):
for cmd in cmds:
log(DEBUG, f'{self.log_name}: Running {pretty_cmd(cmd.cmd, wd)}')
ret = await __run(cmd.cmd)
tmp_file = None # Has been successfully moved at this point
return ret
finally:
if tmp_file is not None:
await self.erase(tmp_file)
await self.close()
except Exception as e:
msg = f'Failed to get {path} from {self.root} ({str(e)})'