[Housekeeping] Close system port when jobs are cancelled (#182)
* Created a test setup that works * Refactored test setup into real-world fixes
This commit is contained in:
@@ -45,7 +45,7 @@ defmodule Pinchflat.Notifications.CommandRunner do
|
||||
"""
|
||||
@impl AppriseCommandRunner
|
||||
def version do
|
||||
case System.cmd(backend_executable(), ["--version"]) do
|
||||
case CliUtils.wrap_cmd(backend_executable(), ["--version"]) do
|
||||
{output, 0} ->
|
||||
output
|
||||
|> String.split(~r{\r?\n})
|
||||
|
||||
@@ -5,6 +5,23 @@ defmodule Pinchflat.Utils.CliUtils do
|
||||
|
||||
alias Pinchflat.Utils.StringUtils
|
||||
|
||||
@doc """
|
||||
Wraps a command in a shell script that will terminate
|
||||
the command if stdin is closed. Useful for stopping
|
||||
commands if the job runner is cancelled.
|
||||
|
||||
Delegates to `System.cmd/3` and any options/output
|
||||
are passed through.
|
||||
|
||||
Returns {binary(), integer()}
|
||||
"""
|
||||
def wrap_cmd(command, args, opts \\ []) do
|
||||
wrapper_command = Path.join(:code.priv_dir(:pinchflat), "cmd_wrapper.sh")
|
||||
actual_command = [command] ++ args
|
||||
|
||||
System.cmd(wrapper_command, actual_command, opts)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Parses a list of command options into a list of strings suitable for passing to
|
||||
`System.cmd/3`.
|
||||
|
||||
@@ -37,7 +37,7 @@ defmodule Pinchflat.YtDlp.CommandRunner do
|
||||
formatted_command_opts = [url] ++ CliUtils.parse_options(all_opts)
|
||||
Logger.info("[yt-dlp] called with: #{Enum.join(formatted_command_opts, " ")}")
|
||||
|
||||
case System.cmd(command, formatted_command_opts, stderr_to_stdout: true) do
|
||||
case CliUtils.wrap_cmd(command, formatted_command_opts, stderr_to_stdout: true) do
|
||||
{_, 0} ->
|
||||
# IDEA: consider deleting the file after reading it. It's in the tmp dir, so it's not
|
||||
# a huge deal, but it's still a good idea to clean up after ourselves.
|
||||
|
||||
Reference in New Issue
Block a user