File 4678-handle-binary-command-help-correctly.patch of Package erlang

From 536744af7478eabcae1cdd2df65b3456553cc831 Mon Sep 17 00:00:00 2001
From: Julian Doherty <julian@juliandoherty.com>
Date: Sat, 12 Oct 2024 15:31:08 +1100
Subject: [PATCH 1/3] handle binary command help correctly

---
 lib/stdlib/src/argparse.erl        |  5 ++++-
 lib/stdlib/test/argparse_SUITE.erl | 30 +++++++++++++++++++++++++++++-
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/lib/stdlib/src/argparse.erl b/lib/stdlib/src/argparse.erl
index 3536bec696..93fbaa3b49 100644
--- a/lib/stdlib/src/argparse.erl
+++ b/lib/stdlib/src/argparse.erl
@@ -1661,7 +1661,10 @@ collect_options(CmdName, Command, [Cmd|Tail], Args) ->
 
 %% gets help for sub-command
 get_help(Command, []) ->
-    maps:get(help, Command, "");
+    case maps:get(help, Command, "") of
+        Help when is_binary(Help) -> unicode:characters_to_list(Help);
+        Help -> Help
+    end;
 get_help(Command, [Cmd|Tail]) ->
     Sub = maps:get(commands, Command),
     SubCmd = maps:get(Cmd, Sub),
diff --git a/lib/stdlib/test/argparse_SUITE.erl b/lib/stdlib/test/argparse_SUITE.erl
index f0cd7c39f7..01f39ef540 100644
--- a/lib/stdlib/test/argparse_SUITE.erl
+++ b/lib/stdlib/test/argparse_SUITE.erl
@@ -43,6 +43,7 @@
     proxy_arguments/0, proxy_arguments/1,
 
     usage/0, usage/1,
+    usage_help_binary/0, usage_help_binary/1,
     usage_required_args/0, usage_required_args/1,
     usage_template/0, usage_template/1,
     usage_args_ordering/0, usage_args_ordering/1,
@@ -72,7 +73,7 @@ groups() ->
             very_short, multi_short, proxy_arguments
         ]},
         {usage, [parallel], [
-            usage, usage_required_args, usage_template, usage_args_ordering,
+            usage, usage_help_binary, usage_required_args, usage_template, usage_args_ordering,
             parser_error_usage, command_usage, usage_width
         ]},
         {validator, [parallel], [
@@ -815,6 +816,33 @@ usage(Config) when is_list(Config) ->
         #{progname => "erl", command => ["status", "crawler"]}))),
     ok.
 
+usage_help_binary() ->
+    [{doc, "Test binary command help string"}].
+
+usage_help_binary(Config) when is_list(Config) ->
+    Cmd2 = #{arguments => [#{ 
+        name => shard,
+        type => integer,
+        default => 0,
+        help => <<"help binary for shard">>}],
+        commands => #{"somecommand" => #{ help => <<"help binary for somecommand">> }},
+        help => "help binary for command"
+    },
+
+    Expected = "Usage:\n"
+        "  erl {somecommand} <shard>\n"
+        "\n"
+        "help binary for command\n"
+        "\n"
+        "Subcommands:\n"
+        "  somecommand help binary for somecommand\n"
+        "\n"
+        "Arguments:\n"
+        "  shard help binary for shard (int), default: 0\n",
+
+    ?assertEqual(Expected,
+        unicode:characters_to_list(argparse:help(Cmd2, #{}))).
+
 usage_required_args() ->
     [{doc, "Verify that required args are printed as required in usage"}].
 
-- 
2.43.0

openSUSE Build Service is sponsored by