diff options
author | José Valim <jose.valim@dashbit.co> | 2022-07-28 12:53:47 +0200 |
---|---|---|
committer | José Valim <jose.valim@dashbit.co> | 2022-07-28 12:53:47 +0200 |
commit | 004d2126fb5664eed19a3e99edfdaf57e1251c9e (patch) | |
tree | eaaa8434584de1e78622f32b40a76117a250bfa5 /lib/elixir | |
parent | e4b6bf5b68d52b71a63785285b04a23bbfc46df1 (diff) | |
download | elixir-004d2126fb5664eed19a3e99edfdaf57e1251c9e.tar.gz |
Fix --sname/--name undefined handling on Erlang/OTP 24
Diffstat (limited to 'lib/elixir')
-rw-r--r-- | lib/elixir/lib/kernel/cli.ex | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/lib/elixir/lib/kernel/cli.ex b/lib/elixir/lib/kernel/cli.ex index a3985cd06..dbd4b33ca 100644 --- a/lib/elixir/lib/kernel/cli.ex +++ b/lib/elixir/lib/kernel/cli.ex @@ -298,8 +298,10 @@ defmodule Kernel.CLI do end defp append_hostname(node) do - case :string.find(node, "@") do - :nomatch -> node <> :string.find(Atom.to_string(:net_kernel.nodename()), "@") + with :nomatch <- :string.find(node, "@"), + <<suffix::binary>> <- :string.find(Atom.to_string(:net_kernel.nodename()), "@") do + node <> suffix + else _ -> node end end @@ -435,11 +437,7 @@ defmodule Kernel.CLI do # Process commands defp process_command({:cookie, h}, _config) do - if Node.alive?() do - wrapper(fn -> Node.set_cookie(String.to_atom(h)) end) - else - {:error, "--cookie : Cannot set cookie if the node is not alive (set --name or --sname)"} - end + wrapper(fn -> Node.set_cookie(String.to_atom(h)) end) end defp process_command({:eval, expr}, _config) when is_binary(expr) do @@ -447,21 +445,28 @@ defmodule Kernel.CLI do end defp process_command({:rpc_eval, node, expr}, _config) when is_binary(expr) do - if Node.alive?() do - node = String.to_atom(node) + node = String.to_atom(node) - # Explicitly connect the node in case the rpc node was started with --sname/--name undefined. - _ = :net_kernel.connect_node(node) + # Explicitly connect the node in case the rpc node was started with --sname/--name undefined. + _ = :net_kernel.connect_node(node) - case :rpc.call(node, __MODULE__, :rpc_eval, [expr]) do - :ok -> :ok - {:badrpc, {:EXIT, exit}} -> Process.exit(self(), exit) - {:badrpc, reason} -> {:error, "--rpc-eval : RPC failed with reason #{inspect(reason)}"} - {kind, error, stack} -> :erlang.raise(kind, error, stack) - end - else - {:error, - "--rpc-eval : Cannot run --rpc-eval if the node is not alive (set --name or --sname)"} + case :rpc.call(node, __MODULE__, :rpc_eval, [expr]) do + :ok -> + :ok + + {:badrpc, {:EXIT, exit}} -> + Process.exit(self(), exit) + + {:badrpc, reason} -> + if reason == :nodedown and :net_kernel.nodename() == :ignored do + {:error, + "--rpc-eval : Cannot run --rpc-eval if the node is not alive (set --name or --sname)"} + else + {:error, "--rpc-eval : RPC failed with reason #{inspect(reason)}"} + end + + {kind, error, stack} -> + :erlang.raise(kind, error, stack) end end |