summaryrefslogtreecommitdiff
path: root/lib/elixir
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@dashbit.co>2022-07-28 12:53:47 +0200
committerJosé Valim <jose.valim@dashbit.co>2022-07-28 12:53:47 +0200
commit004d2126fb5664eed19a3e99edfdaf57e1251c9e (patch)
treeeaaa8434584de1e78622f32b40a76117a250bfa5 /lib/elixir
parente4b6bf5b68d52b71a63785285b04a23bbfc46df1 (diff)
downloadelixir-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.ex45
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