about summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorRob Pilling <robpilling@gmail.com>2024-05-06 12:41:46 +0100
committerRob Pilling <robpilling@gmail.com>2024-05-22 07:58:26 +0100
commit9c9c3848d41dae2ae83f92dfdc5599917e509b99 (patch)
tree4710550495804aab2500dd135dece2c054eb7baa /lib
parent4ed7156191b6b4d0b9df398a29af50a1b93073f0 (diff)
downloadnixlib-9c9c3848d41dae2ae83f92dfdc5599917e509b99.tar
nixlib-9c9c3848d41dae2ae83f92dfdc5599917e509b99.tar.gz
nixlib-9c9c3848d41dae2ae83f92dfdc5599917e509b99.tar.bz2
nixlib-9c9c3848d41dae2ae83f92dfdc5599917e509b99.tar.lz
nixlib-9c9c3848d41dae2ae83f92dfdc5599917e509b99.tar.xz
nixlib-9c9c3848d41dae2ae83f92dfdc5599917e509b99.tar.zst
nixlib-9c9c3848d41dae2ae83f92dfdc5599917e509b99.zip
cli.nix: permit separators between args -> `-a=b`, `--xyz=abc`, etc
Diffstat (limited to 'lib')
-rw-r--r--lib/cli.nix11
-rw-r--r--lib/tests/misc.nix21
2 files changed, 31 insertions, 1 deletions
diff --git a/lib/cli.nix b/lib/cli.nix
index fcffacb5ea99..311037c519a6 100644
--- a/lib/cli.nix
+++ b/lib/cli.nix
@@ -90,7 +90,16 @@ rec {
     mkOption ?
       k: v: if v == null
             then []
-            else [ (mkOptionName k) (lib.generators.mkValueStringDefault {} v) ]
+            else if optionValueSeparator == null then
+              [ (mkOptionName k) (lib.generators.mkValueStringDefault {} v) ]
+            else
+              [ "${mkOptionName k}${optionValueSeparator}${lib.generators.mkValueStringDefault {} v}" ],
+
+    # how to separate an option from its flag;
+    # by default, there is no separator, so option `-c` and value `5`
+    # would become ["-c" "5"].
+    # This is useful if the command requires equals, for example, `-c=5`.
+    optionValueSeparator ? null
     }:
     options:
       let
diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix
index 6774939023d2..408ea5416293 100644
--- a/lib/tests/misc.nix
+++ b/lib/tests/misc.nix
@@ -1639,6 +1639,27 @@ runTests {
     ];
   };
 
+  testToGNUCommandLineSeparator = {
+    expr = cli.toGNUCommandLine { optionValueSeparator = "="; } {
+      data = builtins.toJSON { id = 0; };
+      X = "PUT";
+      retry = 3;
+      retry-delay = null;
+      url = [ "https://example.com/foo" "https://example.com/bar" ];
+      silent = false;
+      verbose = true;
+    };
+
+    expected = [
+      "-X=PUT"
+      "--data={\"id\":0}"
+      "--retry=3"
+      "--url=https://example.com/foo"
+      "--url=https://example.com/bar"
+      "--verbose"
+    ];
+  };
+
   testToGNUCommandLineShell = {
     expr = cli.toGNUCommandLineShell {} {
       data = builtins.toJSON { id = 0; };