summaryrefslogtreecommitdiffstats
path: root/lib/cli.nix
diff options
context:
space:
mode:
authorGabriel Gonzalez <Gabriel439@gmail.com>2020-01-05 13:03:00 -0800
committerGabriel Gonzalez <Gabriel439@gmail.com>2020-01-05 13:03:00 -0800
commit6d584c26143f68bf6963bc7fc5661e05d90f7ab7 (patch)
tree6ff4a5753cdca585f806b22aded37509821ac103 /lib/cli.nix
parent5edd4dd44c5f3de1886744aeac49bd396c24f966 (diff)
Factor out a `toGNUCommandLine` utility
... as suggested by @roberth
Diffstat (limited to 'lib/cli.nix')
-rw-r--r--lib/cli.nix18
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/cli.nix b/lib/cli.nix
index b6703b2ca825..f47625d2f537 100644
--- a/lib/cli.nix
+++ b/lib/cli.nix
@@ -1,6 +1,7 @@
{ lib }:
-{ /* Automatically convert an attribute set to command-line options.
+rec {
+ /* Automatically convert an attribute set to command-line options.
This helps protect against malformed command lines and also to reduce
boilerplate related to command-line construction for simple use cases.
@@ -22,21 +23,24 @@
verbose = true;
};
- => " -X 'PUT' --data '{\"id\":0}' --retry '3' --url 'https://example.com/foo' --url 'https://example.com/bar' --verbose"
+ => "'-X' 'PUT' '--data' '{\"id\":0}' '--retry' '3' '--url' 'https://example.com/foo' '--url' 'https://example.com/bar' '--verbose'"
*/
encodeGNUCommandLine =
+ options: attrs: lib.escapeShellArgs (toGNUCommandLine options attrs);
+
+ toGNUCommandLine =
{ renderKey ?
key: if builtins.stringLength key == 1 then "-${key}" else "--${key}"
, renderOption ?
key: value:
if value == null
- then ""
- else " ${renderKey key} ${lib.escapeShellArg value}"
+ then []
+ else [ (renderKey key) (builtins.toString value) ]
- , renderBool ? key: value: if value then " ${renderKey key}" else ""
+ , renderBool ? key: value: lib.optional value (renderKey key)
- , renderList ? key: value: lib.concatMapStrings (renderOption key) value
+ , renderList ? key: value: lib.concatMap (renderOption key) value
}:
options:
let
@@ -48,5 +52,5 @@
else renderOption key value;
in
- lib.concatStrings (lib.mapAttrsToList render options);
+ builtins.concatLists (lib.mapAttrsToList render options);
}