forked from DGNum/colmena
Migrate to clap 0.3
This commit is contained in:
parent
6e90b710bb
commit
81e2982bbb
14 changed files with 204 additions and 205 deletions
213
Cargo.lock
generated
213
Cargo.lock
generated
|
@ -21,15 +21,6 @@ dependencies = [
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ansi_term"
|
|
||||||
version = "0.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
|
|
||||||
dependencies = [
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-stream"
|
name = "async-stream"
|
||||||
version = "0.3.2"
|
version = "0.3.2"
|
||||||
|
@ -53,9 +44,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-trait"
|
name = "async-trait"
|
||||||
version = "0.1.51"
|
version = "0.1.52"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e"
|
checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -93,9 +84,9 @@ checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.71"
|
version = "1.0.72"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd"
|
checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
|
@ -105,17 +96,26 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "2.33.3"
|
version = "3.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
|
checksum = "d17bf219fcd37199b9a29e00ba65dfb8cd5b2688b7297ec14ff829c40ac50ca9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term",
|
|
||||||
"atty",
|
"atty",
|
||||||
"bitflags",
|
"bitflags",
|
||||||
|
"indexmap",
|
||||||
|
"os_str_bytes",
|
||||||
"strsim",
|
"strsim",
|
||||||
|
"termcolor",
|
||||||
"textwrap",
|
"textwrap",
|
||||||
"unicode-width",
|
]
|
||||||
"vec_map",
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_complete"
|
||||||
|
version = "3.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "60d123fbea4c5d9799cffd44051e2125c880efd23b3b7c529baf3ea5508c8736"
|
||||||
|
dependencies = [
|
||||||
|
"clap",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -138,6 +138,7 @@ dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"atty",
|
"atty",
|
||||||
"clap",
|
"clap",
|
||||||
|
"clap_complete",
|
||||||
"clicolors-control",
|
"clicolors-control",
|
||||||
"console 0.13.0",
|
"console 0.13.0",
|
||||||
"const_format",
|
"const_format",
|
||||||
|
@ -258,9 +259,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures"
|
name = "futures"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca"
|
checksum = "28560757fe2bb34e79f907794bb6b22ae8b0e5c669b638a1132f2592b19035b4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
|
@ -273,9 +274,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-channel"
|
name = "futures-channel"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888"
|
checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-sink",
|
"futures-sink",
|
||||||
|
@ -283,15 +284,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-core"
|
name = "futures-core"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d"
|
checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-executor"
|
name = "futures-executor"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c"
|
checksum = "29d6d2ff5bb10fb95c85b8ce46538a2e5f5e7fdc755623a7d4529ab8a4ed9d2a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-task",
|
"futures-task",
|
||||||
|
@ -300,18 +301,16 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-io"
|
name = "futures-io"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377"
|
checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-macro"
|
name = "futures-macro"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb"
|
checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
|
||||||
"proc-macro-hack",
|
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn",
|
"syn",
|
||||||
|
@ -319,23 +318,22 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-sink"
|
name = "futures-sink"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11"
|
checksum = "e3055baccb68d74ff6480350f8d6eb8fcfa3aa11bdc1a1ae3afdd0514617d508"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-task"
|
name = "futures-task"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99"
|
checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-util"
|
name = "futures-util"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481"
|
checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-io",
|
"futures-io",
|
||||||
|
@ -345,8 +343,6 @@ dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"pin-utils",
|
"pin-utils",
|
||||||
"proc-macro-hack",
|
|
||||||
"proc-macro-nested",
|
|
||||||
"slab",
|
"slab",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -367,6 +363,12 @@ version = "0.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.11.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hermit-abi"
|
name = "hermit-abi"
|
||||||
version = "0.1.19"
|
version = "0.1.19"
|
||||||
|
@ -410,6 +412,16 @@ version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed"
|
checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indexmap"
|
||||||
|
version = "1.7.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"hashbrown",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indicatif"
|
name = "indicatif"
|
||||||
version = "0.17.0-beta.1"
|
version = "0.17.0-beta.1"
|
||||||
|
@ -423,18 +435,18 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itertools"
|
name = "itertools"
|
||||||
version = "0.10.1"
|
version = "0.10.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
|
checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"either",
|
"either",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "0.4.8"
|
version = "1.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
|
checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lazy_static"
|
name = "lazy_static"
|
||||||
|
@ -444,9 +456,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.105"
|
version = "0.2.112"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "869d572136620d55835903746bcb5cdc54cb2851fd0aeec53220b4bb65ef3013"
|
checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
|
@ -508,9 +520,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num_cpus"
|
name = "num_cpus"
|
||||||
version = "1.13.0"
|
version = "1.13.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
|
checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hermit-abi",
|
"hermit-abi",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -524,9 +536,18 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell"
|
name = "once_cell"
|
||||||
version = "1.8.0"
|
version = "1.9.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
|
checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "os_str_bytes"
|
||||||
|
version = "6.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "percent-encoding"
|
name = "percent-encoding"
|
||||||
|
@ -536,9 +557,9 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-project-lite"
|
name = "pin-project-lite"
|
||||||
version = "0.2.7"
|
version = "0.2.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
|
checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-utils"
|
name = "pin-utils"
|
||||||
|
@ -548,9 +569,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ppv-lite86"
|
name = "ppv-lite86"
|
||||||
version = "0.2.15"
|
version = "0.2.16"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba"
|
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro-error"
|
name = "proc-macro-error"
|
||||||
|
@ -576,23 +597,11 @@ dependencies = [
|
||||||
"version_check",
|
"version_check",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "proc-macro-hack"
|
|
||||||
version = "0.5.19"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "proc-macro-nested"
|
|
||||||
version = "0.1.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.32"
|
version = "1.0.36"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
|
checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-xid",
|
"unicode-xid",
|
||||||
]
|
]
|
||||||
|
@ -614,9 +623,9 @@ checksum = "a411616b47dce3139c0169c89899ba5ea3534e545ab4d0c1d3956460fe781bae"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.10"
|
version = "1.0.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
|
checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
@ -698,24 +707,24 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
version = "1.0.5"
|
version = "1.0.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
|
checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.130"
|
version = "1.0.133"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
|
checksum = "97565067517b60e2d1ea8b268e59ce036de907ac523ad83a0475da04e818989a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.130"
|
version = "1.0.133"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
|
checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -724,9 +733,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.68"
|
version = "1.0.74"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8"
|
checksum = "ee2bb9cd061c5865d345bb02ca49fcef1391741b672b54a0bf7b679badec3142"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
|
@ -777,15 +786,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "strsim"
|
name = "strsim"
|
||||||
version = "0.8.0"
|
version = "0.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
|
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.81"
|
version = "1.0.84"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966"
|
checksum = "ecb2e6da8ee5eb9a61068762a32fa9619cc591ceb055b3687f4cd4051ec2e06b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -794,9 +803,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sys-info"
|
name = "sys-info"
|
||||||
version = "0.7.0"
|
version = "0.9.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e5cfbd84f86389198ade41b439f72a5b1b3a8ba728e61cd589e1720d0df44c39"
|
checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -837,12 +846,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "textwrap"
|
name = "textwrap"
|
||||||
version = "0.11.0"
|
version = "0.14.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
|
checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
|
||||||
dependencies = [
|
|
||||||
"unicode-width",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
|
@ -866,9 +872,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tinyvec"
|
name = "tinyvec"
|
||||||
version = "1.5.0"
|
version = "1.5.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7"
|
checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"tinyvec_macros",
|
"tinyvec_macros",
|
||||||
]
|
]
|
||||||
|
@ -881,11 +887,10 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio"
|
name = "tokio"
|
||||||
version = "1.12.0"
|
version = "1.15.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c2c2416fdedca8443ae44b4527de1ea633af61d8f7169ffa6e72c5b53d24efcc"
|
checksum = "fbbf1c778ec206785635ce8ad57fe52b3009ae9e0c9f574a728f3049d3e55838"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
|
||||||
"bytes",
|
"bytes",
|
||||||
"libc",
|
"libc",
|
||||||
"memchr",
|
"memchr",
|
||||||
|
@ -900,9 +905,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio-macros"
|
name = "tokio-macros"
|
||||||
version = "1.5.0"
|
version = "1.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b2dd85aeaba7b68df939bd357c6afb36c87951be9e80bf9c859f2fc3e9fca0fd"
|
checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -911,9 +916,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio-stream"
|
name = "tokio-stream"
|
||||||
version = "0.1.7"
|
version = "0.1.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7b2f3f698253f03119ac0102beaa64f67a67e08074d03a22d18784104543727f"
|
checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
|
@ -1031,17 +1036,11 @@ version = "0.12.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ad9680608df133af2c1ddd5eaf1ddce91d60d61b6bc51494ef326458365a470a"
|
checksum = "ad9680608df133af2c1ddd5eaf1ddce91d60d61b6bc51494ef326458365a470a"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "vec_map"
|
|
||||||
version = "0.8.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "version_check"
|
name = "version_check"
|
||||||
version = "0.9.3"
|
version = "0.9.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
|
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasi"
|
name = "wasi"
|
||||||
|
|
|
@ -10,7 +10,8 @@ edition = "2018"
|
||||||
ansi-to-html = "0.1.0"
|
ansi-to-html = "0.1.0"
|
||||||
async-trait = "0.1.42"
|
async-trait = "0.1.42"
|
||||||
atty = "0.2"
|
atty = "0.2"
|
||||||
clap = "2.33.3"
|
clap = "3.0.0"
|
||||||
|
clap_complete = "3.0.0"
|
||||||
clicolors-control = "1"
|
clicolors-control = "1"
|
||||||
console = "0.13.0"
|
console = "0.13.0"
|
||||||
const_format = "0.2.22"
|
const_format = "0.2.22"
|
||||||
|
@ -27,7 +28,7 @@ regex = "1"
|
||||||
serde = { version = "1.0.118", features = ["derive"] }
|
serde = { version = "1.0.118", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
shell-escape = "0.1.5"
|
shell-escape = "0.1.5"
|
||||||
sys-info = "0.7.0"
|
sys-info = "0.9.0"
|
||||||
snafu = "0.6.10"
|
snafu = "0.6.10"
|
||||||
tempfile = "3.1.0"
|
tempfile = "3.1.0"
|
||||||
tokio-test = "0.4.0"
|
tokio-test = "0.4.0"
|
||||||
|
|
|
@ -17,7 +17,7 @@ in rustPlatform.buildRustPackage rec {
|
||||||
src = lib.cleanSource ./.;
|
src = lib.cleanSource ./.;
|
||||||
};
|
};
|
||||||
|
|
||||||
cargoSha256 = "sha256-YE+0jsdkzRaiUhPC71WBe/KcYERNy7nME26+ejrPRlc=";
|
cargoSha256 = "sha256-bSlDE2UkCO4jdTHnvaMdRHMl7HLSIYVpDBMiojmBv7Q=";
|
||||||
|
|
||||||
nativeBuildInputs = [ installShellFiles ];
|
nativeBuildInputs = [ installShellFiles ];
|
||||||
|
|
||||||
|
|
39
src/cli.rs
39
src/cli.rs
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
||||||
use clap::{App, AppSettings, Arg, ArgMatches, SubCommand};
|
use clap::{App, AppSettings, Arg, ArgMatches, ColorChoice};
|
||||||
|
use clap_complete::Shell;
|
||||||
use const_format::concatcp;
|
use const_format::concatcp;
|
||||||
use env_logger::fmt::WriteStyle;
|
use env_logger::fmt::WriteStyle;
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
|
@ -85,7 +86,7 @@ macro_rules! handle_command {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build_cli(include_internal: bool) -> App<'static, 'static> {
|
pub fn build_cli(include_internal: bool) -> App<'static> {
|
||||||
let version = env!("CARGO_PKG_VERSION");
|
let version = env!("CARGO_PKG_VERSION");
|
||||||
let mut app = App::new("Colmena")
|
let mut app = App::new("Colmena")
|
||||||
.bin_name("colmena")
|
.bin_name("colmena")
|
||||||
|
@ -93,14 +94,13 @@ pub fn build_cli(include_internal: bool) -> App<'static, 'static> {
|
||||||
.author("Zhaofeng Li <hello@zhaofeng.li>")
|
.author("Zhaofeng Li <hello@zhaofeng.li>")
|
||||||
.about("NixOS deployment tool")
|
.about("NixOS deployment tool")
|
||||||
.long_about(LONG_ABOUT.as_str())
|
.long_about(LONG_ABOUT.as_str())
|
||||||
.global_setting(AppSettings::ColoredHelp)
|
|
||||||
.setting(AppSettings::ArgRequiredElseHelp)
|
.setting(AppSettings::ArgRequiredElseHelp)
|
||||||
.arg(Arg::with_name("config")
|
.arg(Arg::new("config")
|
||||||
.short("f")
|
.short('f')
|
||||||
.long("config")
|
.long("config")
|
||||||
.value_name("CONFIG")
|
.value_name("CONFIG")
|
||||||
.help("Path to a Hive expression, a flake.nix, or a Nix Flake URI")
|
.help("Path to a Hive expression, a flake.nix, or a Nix Flake URI")
|
||||||
.long_help(&CONFIG_HELP)
|
.long_help(Some(CONFIG_HELP.as_str()))
|
||||||
.display_order(HELP_ORDER_FIRST)
|
.display_order(HELP_ORDER_FIRST)
|
||||||
|
|
||||||
// The default value is a lie (sort of)!
|
// The default value is a lie (sort of)!
|
||||||
|
@ -111,13 +111,13 @@ pub fn build_cli(include_internal: bool) -> App<'static, 'static> {
|
||||||
// is explicitly supplied by the user (occurrences_of > 0).
|
// is explicitly supplied by the user (occurrences_of > 0).
|
||||||
.default_value("hive.nix")
|
.default_value("hive.nix")
|
||||||
.global(true))
|
.global(true))
|
||||||
.arg(Arg::with_name("show-trace")
|
.arg(Arg::new("show-trace")
|
||||||
.long("show-trace")
|
.long("show-trace")
|
||||||
.help("Show debug information for Nix commands")
|
.help("Show debug information for Nix commands")
|
||||||
.long_help("Passes --show-trace to Nix commands")
|
.long_help("Passes --show-trace to Nix commands")
|
||||||
.global(true)
|
.global(true)
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
.arg(Arg::with_name("color")
|
.arg(Arg::new("color")
|
||||||
.long("color")
|
.long("color")
|
||||||
.help("When to colorize the output")
|
.help("When to colorize the output")
|
||||||
.long_help(r#"When to colorize the output. By default, Colmena enables colorized output when the terminal supports it.
|
.long_help(r#"When to colorize the output. By default, Colmena enables colorized output when the terminal supports it.
|
||||||
|
@ -131,15 +131,16 @@ It's also possible to specify the preference using environment variables. See <h
|
||||||
.global(true));
|
.global(true));
|
||||||
|
|
||||||
if include_internal {
|
if include_internal {
|
||||||
app = app.subcommand(SubCommand::with_name("gen-completions")
|
app = app.subcommand(App::new("gen-completions")
|
||||||
.about("Generate shell auto-completion files (Internal)")
|
.about("Generate shell auto-completion files (Internal)")
|
||||||
.setting(AppSettings::Hidden)
|
.setting(AppSettings::Hidden)
|
||||||
.arg(Arg::with_name("shell")
|
.arg(Arg::new("shell")
|
||||||
.index(1)
|
.index(1)
|
||||||
|
.possible_values(Shell::possible_values())
|
||||||
.required(true)
|
.required(true)
|
||||||
.takes_value(true)));
|
.takes_value(true)));
|
||||||
|
|
||||||
app = app.subcommand(SubCommand::with_name("gen-help-markdown")
|
app = app.subcommand(App::new("gen-help-markdown")
|
||||||
.about("Generate CLI usage guide as Markdown (Internal)")
|
.about("Generate CLI usage guide as Markdown (Internal)")
|
||||||
.setting(AppSettings::Hidden));
|
.setting(AppSettings::Hidden));
|
||||||
|
|
||||||
|
@ -178,9 +179,6 @@ pub async fn run() {
|
||||||
handle_command!(exec, matches);
|
handle_command!(exec, matches);
|
||||||
handle_command!("nix-info", nix_info, matches);
|
handle_command!("nix-info", nix_info, matches);
|
||||||
|
|
||||||
// deprecated alias
|
|
||||||
handle_command!("introspect", eval, matches);
|
|
||||||
|
|
||||||
#[cfg(debug_assertions)]
|
#[cfg(debug_assertions)]
|
||||||
handle_command!("test-progress", test_progress, matches);
|
handle_command!("test-progress", test_progress, matches);
|
||||||
|
|
||||||
|
@ -192,16 +190,18 @@ pub async fn run() {
|
||||||
return gen_help_markdown();
|
return gen_help_markdown();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// deprecated alias
|
||||||
|
handle_command!("introspect", eval, matches);
|
||||||
|
|
||||||
app.print_long_help().unwrap();
|
app.print_long_help().unwrap();
|
||||||
println!();
|
println!();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn gen_completions(args: &ArgMatches<'_>) {
|
fn gen_completions(args: &ArgMatches) {
|
||||||
let mut app = build_cli(false);
|
let mut app = build_cli(false);
|
||||||
let shell: clap::Shell = args.value_of("shell").unwrap()
|
let shell = args.value_of_t::<Shell>("shell").unwrap();
|
||||||
.parse().unwrap();
|
|
||||||
|
|
||||||
app.gen_completions_to("colmena", shell, &mut std::io::stdout());
|
clap_complete::generate(shell, &mut app, "colmena", &mut std::io::stdout());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn gen_help_markdown() {
|
fn gen_help_markdown() {
|
||||||
|
@ -226,8 +226,7 @@ fn gen_help_markdown() {
|
||||||
|
|
||||||
let mut command = {
|
let mut command = {
|
||||||
let c = command
|
let c = command
|
||||||
.setting(AppSettings::ColoredHelp)
|
.color(ColorChoice::Always);
|
||||||
.setting(AppSettings::ColorAlways);
|
|
||||||
|
|
||||||
if full_command != "colmena" {
|
if full_command != "colmena" {
|
||||||
c.bin_name(&full_command)
|
c.bin_name(&full_command)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use clap::{Arg, App, SubCommand, ArgMatches, ArgSettings};
|
use clap::{Arg, App, ArgMatches, ArgSettings};
|
||||||
|
|
||||||
use crate::nix::deployment::{
|
use crate::nix::deployment::{
|
||||||
Deployment,
|
Deployment,
|
||||||
|
@ -14,9 +14,9 @@ use crate::progress::SimpleProgressOutput;
|
||||||
use crate::nix::{NixError, NodeFilter};
|
use crate::nix::{NixError, NodeFilter};
|
||||||
use crate::util;
|
use crate::util;
|
||||||
|
|
||||||
pub fn register_deploy_args<'a, 'b>(command: App<'a, 'b>) -> App<'a, 'b> {
|
pub fn register_deploy_args<'a>(command: App<'a>) -> App<'a> {
|
||||||
command
|
command
|
||||||
.arg(Arg::with_name("eval-node-limit")
|
.arg(Arg::new("eval-node-limit")
|
||||||
.long("eval-node-limit")
|
.long("eval-node-limit")
|
||||||
.value_name("LIMIT")
|
.value_name("LIMIT")
|
||||||
.help("Evaluation node limit")
|
.help("Evaluation node limit")
|
||||||
|
@ -38,8 +38,8 @@ Set to 0 to disable the limit.
|
||||||
Err(_) => Err(String::from("The value must be a valid number")),
|
Err(_) => Err(String::from("The value must be a valid number")),
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
.arg(Arg::with_name("parallel")
|
.arg(Arg::new("parallel")
|
||||||
.short("p")
|
.short('p')
|
||||||
.long("parallel")
|
.long("parallel")
|
||||||
.value_name("LIMIT")
|
.value_name("LIMIT")
|
||||||
.help("Deploy parallelism limit")
|
.help("Deploy parallelism limit")
|
||||||
|
@ -55,7 +55,7 @@ Set to 0 to disable parallemism limit.
|
||||||
Err(_) => Err(String::from("The value must be a valid number")),
|
Err(_) => Err(String::from("The value must be a valid number")),
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
.arg(Arg::with_name("keep-result")
|
.arg(Arg::new("keep-result")
|
||||||
.long("keep-result")
|
.long("keep-result")
|
||||||
.help("Create GC roots for built profiles")
|
.help("Create GC roots for built profiles")
|
||||||
.long_help(r#"Create GC roots for built profiles.
|
.long_help(r#"Create GC roots for built profiles.
|
||||||
|
@ -64,13 +64,13 @@ The built system profiles will be added as GC roots so that they will not be rem
|
||||||
The links will be created under .gcroots in the directory the Hive configuration is located.
|
The links will be created under .gcroots in the directory the Hive configuration is located.
|
||||||
"#)
|
"#)
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
.arg(Arg::with_name("verbose")
|
.arg(Arg::new("verbose")
|
||||||
.short("v")
|
.short('v')
|
||||||
.long("verbose")
|
.long("verbose")
|
||||||
.help("Be verbose")
|
.help("Be verbose")
|
||||||
.long_help("Deactivates the progress spinner and prints every line of output.")
|
.long_help("Deactivates the progress spinner and prints every line of output.")
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
.arg(Arg::with_name("no-keys")
|
.arg(Arg::new("no-keys")
|
||||||
.long("no-keys")
|
.long("no-keys")
|
||||||
.help("Do not upload keys")
|
.help("Do not upload keys")
|
||||||
.long_help(r#"Do not upload secret keys set in `deployment.keys`.
|
.long_help(r#"Do not upload secret keys set in `deployment.keys`.
|
||||||
|
@ -79,17 +79,17 @@ By default, Colmena will upload keys set in `deployment.keys` before deploying t
|
||||||
To upload keys without building or deploying the rest of the configuration, use `colmena upload-keys`.
|
To upload keys without building or deploying the rest of the configuration, use `colmena upload-keys`.
|
||||||
"#)
|
"#)
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
.arg(Arg::with_name("no-substitutes")
|
.arg(Arg::new("no-substitutes")
|
||||||
.long("no-substitutes")
|
.long("no-substitutes")
|
||||||
.help("Do not use substitutes")
|
.help("Do not use substitutes")
|
||||||
.long_help("Disables the use of substituters when copying closures to the remote host.")
|
.long_help("Disables the use of substituters when copying closures to the remote host.")
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
.arg(Arg::with_name("no-gzip")
|
.arg(Arg::new("no-gzip")
|
||||||
.long("no-gzip")
|
.long("no-gzip")
|
||||||
.help("Do not use gzip")
|
.help("Do not use gzip")
|
||||||
.long_help("Disables the use of gzip when copying closures to the remote host.")
|
.long_help("Disables the use of gzip when copying closures to the remote host.")
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
.arg(Arg::with_name("build-on-target")
|
.arg(Arg::new("build-on-target")
|
||||||
.long("build-on-target")
|
.long("build-on-target")
|
||||||
.help("Build the system profiles on the target nodes")
|
.help("Build the system profiles on the target nodes")
|
||||||
.long_help(r#"Build the system profiles on the target nodes themselves.
|
.long_help(r#"Build the system profiles on the target nodes themselves.
|
||||||
|
@ -99,11 +99,11 @@ This overrides per-node perferences set in `deployment.buildOnTarget`.
|
||||||
To temporarily disable remote build on all nodes, use `--no-build-on-target`.
|
To temporarily disable remote build on all nodes, use `--no-build-on-target`.
|
||||||
"#)
|
"#)
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
.arg(Arg::with_name("no-build-on-target")
|
.arg(Arg::new("no-build-on-target")
|
||||||
.long("no-build-on-target")
|
.long("no-build-on-target")
|
||||||
.set(ArgSettings::Hidden)
|
.setting(ArgSettings::Hidden)
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
.arg(Arg::with_name("force-replace-unknown-profiles")
|
.arg(Arg::new("force-replace-unknown-profiles")
|
||||||
.long("force-replace-unknown-profiles")
|
.long("force-replace-unknown-profiles")
|
||||||
.help("Ignore all targeted nodes deployment.replaceUnknownProfiles setting")
|
.help("Ignore all targeted nodes deployment.replaceUnknownProfiles setting")
|
||||||
.long_help(r#"If `deployment.replaceUnknownProfiles` is set for a target, using this switch
|
.long_help(r#"If `deployment.replaceUnknownProfiles` is set for a target, using this switch
|
||||||
|
@ -111,10 +111,10 @@ will treat deployment.replaceUnknownProfiles as though it was set true and perfo
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn subcommand() -> App<'static, 'static> {
|
pub fn subcommand() -> App<'static> {
|
||||||
let command = SubCommand::with_name("apply")
|
let command = App::new("apply")
|
||||||
.about("Apply configurations on remote machines")
|
.about("Apply configurations on remote machines")
|
||||||
.arg(Arg::with_name("goal")
|
.arg(Arg::new("goal")
|
||||||
.help("Deployment goal")
|
.help("Deployment goal")
|
||||||
.long_help("Same as the targets for switch-to-configuration.\n\"push\" means only copying the closures to remote nodes.")
|
.long_help("Same as the targets for switch-to-configuration.\n\"push\" means only copying the closures to remote nodes.")
|
||||||
.default_value("switch")
|
.default_value("switch")
|
||||||
|
@ -126,7 +126,7 @@ pub fn subcommand() -> App<'static, 'static> {
|
||||||
util::register_selector_args(command)
|
util::register_selector_args(command)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run(_global_args: &ArgMatches<'_>, local_args: &ArgMatches<'_>) -> Result<(), NixError> {
|
pub async fn run(_global_args: &ArgMatches, local_args: &ArgMatches) -> Result<(), NixError> {
|
||||||
let hive = util::hive_from_args(local_args).await?;
|
let hive = util::hive_from_args(local_args).await?;
|
||||||
|
|
||||||
let ssh_config = env::var("SSH_CONFIG_FILE")
|
let ssh_config = env::var("SSH_CONFIG_FILE")
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use clap::{Arg, App, SubCommand, ArgMatches};
|
use clap::{Arg, App, ArgMatches};
|
||||||
use tokio::fs;
|
use tokio::fs;
|
||||||
use tokio::process::Command;
|
use tokio::process::Command;
|
||||||
|
|
||||||
|
@ -15,31 +15,31 @@ use crate::nix::{NixError, NodeName, host};
|
||||||
use crate::progress::SimpleProgressOutput;
|
use crate::progress::SimpleProgressOutput;
|
||||||
use crate::util;
|
use crate::util;
|
||||||
|
|
||||||
pub fn subcommand() -> App<'static, 'static> {
|
pub fn subcommand() -> App<'static> {
|
||||||
SubCommand::with_name("apply-local")
|
App::new("apply-local")
|
||||||
.about("Apply configurations on the local machine")
|
.about("Apply configurations on the local machine")
|
||||||
.arg(Arg::with_name("goal")
|
.arg(Arg::new("goal")
|
||||||
.help("Deployment goal")
|
.help("Deployment goal")
|
||||||
.long_help("Same as the targets for switch-to-configuration.\n\"push\" is noop in apply-local.")
|
.long_help("Same as the targets for switch-to-configuration.\n\"push\" is noop in apply-local.")
|
||||||
.default_value("switch")
|
.default_value("switch")
|
||||||
.index(1)
|
.index(1)
|
||||||
.possible_values(&["push", "switch", "boot", "test", "dry-activate", "keys"]))
|
.possible_values(&["push", "switch", "boot", "test", "dry-activate", "keys"]))
|
||||||
.arg(Arg::with_name("sudo")
|
.arg(Arg::new("sudo")
|
||||||
.long("sudo")
|
.long("sudo")
|
||||||
.help("Attempt to escalate privileges if not run as root"))
|
.help("Attempt to escalate privileges if not run as root"))
|
||||||
.arg(Arg::with_name("sudo-command")
|
.arg(Arg::new("sudo-command")
|
||||||
.long("sudo-command")
|
.long("sudo-command")
|
||||||
.value_name("COMMAND")
|
.value_name("COMMAND")
|
||||||
.help("Command to use to escalate privileges")
|
.help("Command to use to escalate privileges")
|
||||||
.default_value("sudo")
|
.default_value("sudo")
|
||||||
.takes_value(true))
|
.takes_value(true))
|
||||||
.arg(Arg::with_name("verbose")
|
.arg(Arg::new("verbose")
|
||||||
.short("v")
|
.short('v')
|
||||||
.long("verbose")
|
.long("verbose")
|
||||||
.help("Be verbose")
|
.help("Be verbose")
|
||||||
.long_help("Deactivates the progress spinner and prints every line of output.")
|
.long_help("Deactivates the progress spinner and prints every line of output.")
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
.arg(Arg::with_name("no-keys")
|
.arg(Arg::new("no-keys")
|
||||||
.long("no-keys")
|
.long("no-keys")
|
||||||
.help("Do not deploy keys")
|
.help("Do not deploy keys")
|
||||||
.long_help(r#"Do not deploy secret keys set in `deployment.keys`.
|
.long_help(r#"Do not deploy secret keys set in `deployment.keys`.
|
||||||
|
@ -47,17 +47,17 @@ pub fn subcommand() -> App<'static, 'static> {
|
||||||
By default, Colmena will deploy keys set in `deployment.keys` before activating the profile on this host.
|
By default, Colmena will deploy keys set in `deployment.keys` before activating the profile on this host.
|
||||||
"#)
|
"#)
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
.arg(Arg::with_name("node")
|
.arg(Arg::new("node")
|
||||||
.long("node")
|
.long("node")
|
||||||
.help("Override the node name to use")
|
.help("Override the node name to use")
|
||||||
.takes_value(true))
|
.takes_value(true))
|
||||||
.arg(Arg::with_name("we-are-launched-by-sudo")
|
.arg(Arg::new("we-are-launched-by-sudo")
|
||||||
.long("we-are-launched-by-sudo")
|
.long("we-are-launched-by-sudo")
|
||||||
.hidden(true)
|
.hide(true)
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run(_global_args: &ArgMatches<'_>, local_args: &ArgMatches<'_>) -> Result<(), NixError> {
|
pub async fn run(_global_args: &ArgMatches, local_args: &ArgMatches) -> Result<(), NixError> {
|
||||||
// Sanity check: Are we running NixOS?
|
// Sanity check: Are we running NixOS?
|
||||||
if let Ok(os_release) = fs::read_to_string("/etc/os-release").await {
|
if let Ok(os_release) = fs::read_to_string("/etc/os-release").await {
|
||||||
if !os_release.contains("ID=nixos\n") {
|
if !os_release.contains("ID=nixos\n") {
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
use clap::{Arg, App, SubCommand};
|
use clap::{Arg, App};
|
||||||
|
|
||||||
use crate::util;
|
use crate::util;
|
||||||
|
|
||||||
use super::apply;
|
use super::apply;
|
||||||
pub use super::apply::run;
|
pub use super::apply::run;
|
||||||
|
|
||||||
pub fn subcommand() -> App<'static, 'static> {
|
pub fn subcommand() -> App<'static> {
|
||||||
let command = SubCommand::with_name("build")
|
let command = App::new("build")
|
||||||
.about("Build the configuration but not push to remote machines")
|
.about("Build the configuration but not push to remote machines")
|
||||||
.long_about(r#"Build the configuration but not push to remote machines
|
.long_about(r#"Build the configuration but not push to remote machines
|
||||||
|
|
||||||
This subcommand behaves as if you invoked `apply` with the `build` goal."#)
|
This subcommand behaves as if you invoked `apply` with the `build` goal."#)
|
||||||
.arg(Arg::with_name("goal")
|
.arg(Arg::new("goal")
|
||||||
.hidden(true)
|
.hide(true)
|
||||||
.default_value("build")
|
.default_value("build")
|
||||||
.possible_values(&["build"])
|
.possible_values(&["build"])
|
||||||
.takes_value(true));
|
.takes_value(true));
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use clap::{Arg, App, AppSettings, SubCommand, ArgMatches};
|
use clap::{Arg, App, AppSettings, ArgMatches};
|
||||||
|
|
||||||
use crate::util;
|
use crate::util;
|
||||||
use crate::nix::NixError;
|
use crate::nix::NixError;
|
||||||
|
|
||||||
pub fn subcommand() -> App<'static, 'static> {
|
pub fn subcommand() -> App<'static> {
|
||||||
SubCommand::with_name("eval")
|
App::new("eval")
|
||||||
.about("Evaluate expressions using the complete configuration")
|
.about("Evaluate expressions using the complete configuration")
|
||||||
.long_about(r#"Evaluate expressions using the complete configuration
|
.long_about(r#"Evaluate expressions using the complete configuration
|
||||||
|
|
||||||
|
@ -16,29 +16,29 @@ For example, to retrieve the configuration of one node, you may write something
|
||||||
|
|
||||||
{ nodes, ... }: nodes.node-a.config.networking.hostName
|
{ nodes, ... }: nodes.node-a.config.networking.hostName
|
||||||
"#)
|
"#)
|
||||||
.arg(Arg::with_name("expression_file")
|
.arg(Arg::new("expression_file")
|
||||||
.index(1)
|
.index(1)
|
||||||
.value_name("FILE")
|
.value_name("FILE")
|
||||||
.help("The .nix file containing the expression")
|
.help("The .nix file containing the expression")
|
||||||
.takes_value(true))
|
.takes_value(true))
|
||||||
.arg(Arg::with_name("expression")
|
.arg(Arg::new("expression")
|
||||||
.short("E")
|
.short('E')
|
||||||
.value_name("EXPRESSION")
|
.value_name("EXPRESSION")
|
||||||
.help("The Nix expression")
|
.help("The Nix expression")
|
||||||
.takes_value(true))
|
.takes_value(true))
|
||||||
.arg(Arg::with_name("instantiate")
|
.arg(Arg::new("instantiate")
|
||||||
.long("instantiate")
|
.long("instantiate")
|
||||||
.help("Actually instantiate the expression")
|
.help("Actually instantiate the expression")
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn deprecated_alias() -> App<'static, 'static> {
|
pub fn deprecated_alias() -> App<'static> {
|
||||||
subcommand()
|
subcommand()
|
||||||
.name("introspect")
|
.name("introspect")
|
||||||
.setting(AppSettings::Hidden)
|
.setting(AppSettings::Hidden)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run(global_args: &ArgMatches<'_>, local_args: &ArgMatches<'_>) -> Result<(), NixError> {
|
pub async fn run(global_args: &ArgMatches, local_args: &ArgMatches) -> Result<(), NixError> {
|
||||||
if let Some("introspect") = global_args.subcommand_name() {
|
if let Some("introspect") = global_args.subcommand_name() {
|
||||||
log::warn!("`colmena introspect` has been renamed to `colmena eval`. Please update your scripts.");
|
log::warn!("`colmena introspect` has been renamed to `colmena eval`. Please update your scripts.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ use std::env;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use clap::{Arg, App, AppSettings, SubCommand, ArgMatches};
|
use clap::{Arg, App, AppSettings, ArgMatches};
|
||||||
use futures::future::join_all;
|
use futures::future::join_all;
|
||||||
use tokio::sync::Semaphore;
|
use tokio::sync::Semaphore;
|
||||||
|
|
||||||
|
@ -11,12 +11,12 @@ use crate::job::{JobMonitor, JobState, JobType};
|
||||||
use crate::progress::SimpleProgressOutput;
|
use crate::progress::SimpleProgressOutput;
|
||||||
use crate::util;
|
use crate::util;
|
||||||
|
|
||||||
pub fn subcommand() -> App<'static, 'static> {
|
pub fn subcommand() -> App<'static> {
|
||||||
let command = SubCommand::with_name("exec")
|
let command = App::new("exec")
|
||||||
.about("Run a command on remote machines")
|
.about("Run a command on remote machines")
|
||||||
.setting(AppSettings::TrailingVarArg)
|
.setting(AppSettings::TrailingVarArg)
|
||||||
.arg(Arg::with_name("parallel")
|
.arg(Arg::new("parallel")
|
||||||
.short("p")
|
.short('p')
|
||||||
.long("parallel")
|
.long("parallel")
|
||||||
.value_name("LIMIT")
|
.value_name("LIMIT")
|
||||||
.help("Deploy parallelism limit")
|
.help("Deploy parallelism limit")
|
||||||
|
@ -32,18 +32,18 @@ In `colmena exec`, the parallelism limit is disabled (0) by default.
|
||||||
Err(_) => Err(String::from("The value must be a valid number")),
|
Err(_) => Err(String::from("The value must be a valid number")),
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
.arg(Arg::with_name("verbose")
|
.arg(Arg::new("verbose")
|
||||||
.short("v")
|
.short('v')
|
||||||
.long("verbose")
|
.long("verbose")
|
||||||
.help("Be verbose")
|
.help("Be verbose")
|
||||||
.long_help("Deactivates the progress spinner and prints every line of output.")
|
.long_help("Deactivates the progress spinner and prints every line of output.")
|
||||||
.takes_value(false))
|
.takes_value(false))
|
||||||
.arg(Arg::with_name("command")
|
.arg(Arg::new("command")
|
||||||
.value_name("COMMAND")
|
.value_name("COMMAND")
|
||||||
.last(true)
|
.last(true)
|
||||||
.help("Command")
|
.help("Command")
|
||||||
.required(true)
|
.required(true)
|
||||||
.multiple(true)
|
.multiple_occurrences(true)
|
||||||
.long_help(r#"Command to run
|
.long_help(r#"Command to run
|
||||||
|
|
||||||
It's recommended to use -- to separate Colmena options from the command to run. For example:
|
It's recommended to use -- to separate Colmena options from the command to run. For example:
|
||||||
|
@ -54,7 +54,7 @@ It's recommended to use -- to separate Colmena options from the command to run.
|
||||||
util::register_selector_args(command)
|
util::register_selector_args(command)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run(_global_args: &ArgMatches<'_>, local_args: &ArgMatches<'_>) -> Result<(), NixError> {
|
pub async fn run(_global_args: &ArgMatches, local_args: &ArgMatches) -> Result<(), NixError> {
|
||||||
let hive = util::hive_from_args(local_args).await?;
|
let hive = util::hive_from_args(local_args).await?;
|
||||||
let ssh_config = env::var("SSH_CONFIG_FILE")
|
let ssh_config = env::var("SSH_CONFIG_FILE")
|
||||||
.ok().map(PathBuf::from);
|
.ok().map(PathBuf::from);
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
use clap::{App, SubCommand, ArgMatches};
|
use clap::{App, ArgMatches};
|
||||||
|
|
||||||
use crate::nix::{NixCheck, NixError};
|
use crate::nix::{NixCheck, NixError};
|
||||||
|
|
||||||
pub fn subcommand() -> App<'static, 'static> {
|
pub fn subcommand() -> App<'static> {
|
||||||
SubCommand::with_name("nix-info")
|
App::new("nix-info")
|
||||||
.about("Show information about the current Nix installation")
|
.about("Show information about the current Nix installation")
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run(_global_args: &ArgMatches<'_>, _local_args: &ArgMatches<'_>) -> Result<(), NixError> {
|
pub async fn run(_global_args: &ArgMatches, _local_args: &ArgMatches) -> Result<(), NixError> {
|
||||||
let check = NixCheck::detect().await;
|
let check = NixCheck::detect().await;
|
||||||
check.print_version_info();
|
check.print_version_info();
|
||||||
check.print_flakes_info(false);
|
check.print_flakes_info(false);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use clap::{App, AppSettings, SubCommand, ArgMatches};
|
use clap::{App, AppSettings, ArgMatches};
|
||||||
use tokio::time;
|
use tokio::time;
|
||||||
|
|
||||||
use crate::job::{JobMonitor, JobType};
|
use crate::job::{JobMonitor, JobType};
|
||||||
|
@ -13,13 +13,13 @@ macro_rules! node {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn subcommand() -> App<'static, 'static> {
|
pub fn subcommand() -> App<'static> {
|
||||||
SubCommand::with_name("test-progress")
|
App::new("test-progress")
|
||||||
.about("Run progress spinner tests")
|
.about("Run progress spinner tests")
|
||||||
.setting(AppSettings::Hidden)
|
.setting(AppSettings::Hidden)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run(_global_args: &ArgMatches<'_>, _local_args: &ArgMatches<'_>) -> Result<(), NixError> {
|
pub async fn run(_global_args: &ArgMatches, _local_args: &ArgMatches) -> Result<(), NixError> {
|
||||||
let mut output = SpinnerOutput::new();
|
let mut output = SpinnerOutput::new();
|
||||||
let (monitor, meta) = JobMonitor::new(output.get_sender());
|
let (monitor, meta) = JobMonitor::new(output.get_sender());
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
use clap::{Arg, App, SubCommand};
|
use clap::{Arg, App};
|
||||||
|
|
||||||
use crate::util;
|
use crate::util;
|
||||||
|
|
||||||
use super::apply;
|
use super::apply;
|
||||||
pub use super::apply::run;
|
pub use super::apply::run;
|
||||||
|
|
||||||
pub fn subcommand() -> App<'static, 'static> {
|
pub fn subcommand() -> App<'static> {
|
||||||
let command = SubCommand::with_name("upload-keys")
|
let command = App::new("upload-keys")
|
||||||
.about("Upload keys to remote hosts")
|
.about("Upload keys to remote hosts")
|
||||||
.long_about(r#"Upload keys to remote hosts
|
.long_about(r#"Upload keys to remote hosts
|
||||||
|
|
||||||
This subcommand behaves as if you invoked `apply` with the pseudo `keys` goal."#)
|
This subcommand behaves as if you invoked `apply` with the pseudo `keys` goal."#)
|
||||||
.arg(Arg::with_name("goal")
|
.arg(Arg::new("goal")
|
||||||
.hidden(true)
|
.hide(true)
|
||||||
.default_value("keys")
|
.default_value("keys")
|
||||||
.possible_values(&["keys"])
|
.possible_values(&["keys"])
|
||||||
.takes_value(true));
|
.takes_value(true));
|
||||||
|
|
|
@ -10,8 +10,8 @@ use clap::ArgMatches;
|
||||||
use crate::nix::NixError;
|
use crate::nix::NixError;
|
||||||
|
|
||||||
/// Runs a closure and tries to troubleshoot if it returns an error.
|
/// Runs a closure and tries to troubleshoot if it returns an error.
|
||||||
pub async fn run_wrapped<'a, F, U, T>(global_args: &'a ArgMatches<'a>, local_args: &'a ArgMatches<'a>, f: U) -> T
|
pub async fn run_wrapped<'a, F, U, T>(global_args: &'a ArgMatches, local_args: &'a ArgMatches, f: U) -> T
|
||||||
where U: FnOnce(&'a ArgMatches<'a>, &'a ArgMatches<'a>) -> F,
|
where U: FnOnce(&'a ArgMatches, &'a ArgMatches) -> F,
|
||||||
F: Future<Output = Result<T, NixError>>,
|
F: Future<Output = Result<T, NixError>>,
|
||||||
{
|
{
|
||||||
match f(global_args, local_args).await {
|
match f(global_args, local_args).await {
|
||||||
|
@ -30,7 +30,7 @@ pub async fn run_wrapped<'a, F, U, T>(global_args: &'a ArgMatches<'a>, local_arg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn troubleshoot(global_args: &ArgMatches<'_>, _local_args: &ArgMatches<'_>, error: &NixError) -> Result<(), NixError> {
|
fn troubleshoot(global_args: &ArgMatches, _local_args: &ArgMatches, error: &NixError) -> Result<(), NixError> {
|
||||||
if let NixError::NoFlakesSupport = error {
|
if let NixError::NoFlakesSupport = error {
|
||||||
// People following the tutorial might put hive.nix directly
|
// People following the tutorial might put hive.nix directly
|
||||||
// in their Colmena checkout, and encounter NoFlakesSupport
|
// in their Colmena checkout, and encounter NoFlakesSupport
|
||||||
|
|
|
@ -81,7 +81,7 @@ impl CommandExecution {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn hive_from_args(args: &ArgMatches<'_>) -> NixResult<Hive> {
|
pub async fn hive_from_args(args: &ArgMatches) -> NixResult<Hive> {
|
||||||
let path = match args.occurrences_of("config") {
|
let path = match args.occurrences_of("config") {
|
||||||
0 => {
|
0 => {
|
||||||
// traverse upwards until we find hive.nix
|
// traverse upwards until we find hive.nix
|
||||||
|
@ -157,9 +157,9 @@ pub async fn hive_from_args(args: &ArgMatches<'_>) -> NixResult<Hive> {
|
||||||
Ok(hive)
|
Ok(hive)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn register_selector_args<'a, 'b>(command: App<'a, 'b>) -> App<'a, 'b> {
|
pub fn register_selector_args<'a>(command: App<'a>) -> App<'a> {
|
||||||
command
|
command
|
||||||
.arg(Arg::with_name("on")
|
.arg(Arg::new("on")
|
||||||
.long("on")
|
.long("on")
|
||||||
.value_name("NODES")
|
.value_name("NODES")
|
||||||
.help("Node selector")
|
.help("Node selector")
|
||||||
|
|
Loading…
Reference in a new issue