File 0661-Add-hostname-to-remsh-if-none-is-given.patch of Package erlang

From 6944df6e540d57f5ddf04e01d44d3aefd9c4720d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Valim?= <jose.valim@plataformatec.com.br>
Date: Mon, 29 Apr 2019 17:54:18 +0200
Subject: [PATCH] Add hostname to -remsh if none is given

The -name option already computes a default
hostname if none is given. This PR adds the
same behaviour to -remsh. Now we can run:

    erl -name foo -remsh bar
    erl -sname foo -remsh bar

This simplifies deployment scripts as otherwise
they have to compute the hostname by hand or
start an Erlang VM instance only to do so.
---
 erts/doc/src/erl.xml        | 5 ++++-
 lib/kernel/src/user_drv.erl | 8 +++++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/erts/doc/src/erl.xml b/erts/doc/src/erl.xml
index 88ddb03e97..bfd4dd8fe9 100644
--- a/erts/doc/src/erl.xml
+++ b/erts/doc/src/erl.xml
@@ -460,7 +460,10 @@
       <tag><c><![CDATA[-remsh Node]]></c></tag>
       <item>
         <p>Starts Erlang with a remote shell connected to
-          <c><![CDATA[Node]]></c>.</p>
+          <c><![CDATA[Node]]></c>. Requires either <c><![CDATA[-name]]></c>
+          or <c><![CDATA[-sname]]></c> to be given. If <c><![CDATA[Node]]></c>
+          does not contain a hostname, one is automatically taken from
+          <c><![CDATA[-name]]></c> or <c><![CDATA[-sname]]></c></p>
       </item>
       <tag><c><![CDATA[-rsh Program]]></c></tag>
       <item>
diff --git a/lib/kernel/src/user_drv.erl b/lib/kernel/src/user_drv.erl
index 08286dd476..69ff8e7971 100644
--- a/lib/kernel/src/user_drv.erl
+++ b/lib/kernel/src/user_drv.erl
@@ -120,7 +120,7 @@ server1(Iport, Oport, Shell) ->
     {Curr,Shell1} =
 	case init:get_argument(remsh) of
 	    {ok,[[Node]]} ->
-		ANode = list_to_atom(Node),
+		ANode = list_to_atom(append_hostname(Node)),
 		RShell = {ANode,shell,start,[]},
 		RGr = group:start(self(), RShell, rem_sh_opts(ANode)),
 		{RGr,RShell};
@@ -139,6 +139,12 @@ server1(Iport, Oport, Shell) ->
     %% Enter the server loop.
     server_loop(Iport, Oport, Curr, User, Gr, {false, queue:new()}).
 
+append_hostname(Node) ->
+    case lists:member($@, Node) of
+        true -> Node;
+        false -> Node ++ lists:dropwhile(fun(C) -> C =/= $@ end, atom_to_list(node()))
+    end.
+
 rem_sh_opts(Node) ->
     [{expand_fun,fun(B)-> rpc:call(Node,edlin_expand,expand,[B]) end}].
 
-- 
2.16.4

openSUSE Build Service is sponsored by