diff options
author | Rob Pilling <robpilling@gmail.com> | 2024-05-06 12:41:46 +0100 |
---|---|---|
committer | Rob Pilling <robpilling@gmail.com> | 2024-05-22 07:58:26 +0100 |
commit | 9c9c3848d41dae2ae83f92dfdc5599917e509b99 (patch) | |
tree | 4710550495804aab2500dd135dece2c054eb7baa /lib | |
parent | 4ed7156191b6b4d0b9df398a29af50a1b93073f0 (diff) | |
download | nixlib-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.nix | 11 | ||||
-rw-r--r-- | lib/tests/misc.nix | 21 |
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; }; |