Migrate to clap 0.3

This commit is contained in:
Zhaofeng Li 2022-01-03 10:37:03 -08:00
parent 6e90b710bb
commit 81e2982bbb
14 changed files with 204 additions and 205 deletions

213
Cargo.lock generated
View file

@ -21,15 +21,6 @@ dependencies = [
"thiserror",
]
[[package]]
name = "ansi_term"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
dependencies = [
"winapi",
]
[[package]]
name = "async-stream"
version = "0.3.2"
@ -53,9 +44,9 @@ dependencies = [
[[package]]
name = "async-trait"
version = "0.1.51"
version = "0.1.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e"
checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"
dependencies = [
"proc-macro2",
"quote",
@ -93,9 +84,9 @@ checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
[[package]]
name = "cc"
version = "1.0.71"
version = "1.0.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd"
checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
[[package]]
name = "cfg-if"
@ -105,17 +96,26 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "clap"
version = "2.33.3"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
checksum = "d17bf219fcd37199b9a29e00ba65dfb8cd5b2688b7297ec14ff829c40ac50ca9"
dependencies = [
"ansi_term",
"atty",
"bitflags",
"indexmap",
"os_str_bytes",
"strsim",
"termcolor",
"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]]
@ -138,6 +138,7 @@ dependencies = [
"async-trait",
"atty",
"clap",
"clap_complete",
"clicolors-control",
"console 0.13.0",
"const_format",
@ -258,9 +259,9 @@ dependencies = [
[[package]]
name = "futures"
version = "0.3.17"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca"
checksum = "28560757fe2bb34e79f907794bb6b22ae8b0e5c669b638a1132f2592b19035b4"
dependencies = [
"futures-channel",
"futures-core",
@ -273,9 +274,9 @@ dependencies = [
[[package]]
name = "futures-channel"
version = "0.3.17"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888"
checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b"
dependencies = [
"futures-core",
"futures-sink",
@ -283,15 +284,15 @@ dependencies = [
[[package]]
name = "futures-core"
version = "0.3.17"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d"
checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7"
[[package]]
name = "futures-executor"
version = "0.3.17"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c"
checksum = "29d6d2ff5bb10fb95c85b8ce46538a2e5f5e7fdc755623a7d4529ab8a4ed9d2a"
dependencies = [
"futures-core",
"futures-task",
@ -300,18 +301,16 @@ dependencies = [
[[package]]
name = "futures-io"
version = "0.3.17"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377"
checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2"
[[package]]
name = "futures-macro"
version = "0.3.17"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb"
checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c"
dependencies = [
"autocfg",
"proc-macro-hack",
"proc-macro2",
"quote",
"syn",
@ -319,23 +318,22 @@ dependencies = [
[[package]]
name = "futures-sink"
version = "0.3.17"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11"
checksum = "e3055baccb68d74ff6480350f8d6eb8fcfa3aa11bdc1a1ae3afdd0514617d508"
[[package]]
name = "futures-task"
version = "0.3.17"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99"
checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72"
[[package]]
name = "futures-util"
version = "0.3.17"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481"
checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164"
dependencies = [
"autocfg",
"futures-channel",
"futures-core",
"futures-io",
@ -345,8 +343,6 @@ dependencies = [
"memchr",
"pin-project-lite",
"pin-utils",
"proc-macro-hack",
"proc-macro-nested",
"slab",
]
@ -367,6 +363,12 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
[[package]]
name = "hashbrown"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
[[package]]
name = "hermit-abi"
version = "0.1.19"
@ -410,6 +412,16 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
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]]
name = "indicatif"
version = "0.17.0-beta.1"
@ -423,18 +435,18 @@ dependencies = [
[[package]]
name = "itertools"
version = "0.10.1"
version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "0.4.8"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
[[package]]
name = "lazy_static"
@ -444,9 +456,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.105"
version = "0.2.112"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "869d572136620d55835903746bcb5cdc54cb2851fd0aeec53220b4bb65ef3013"
checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125"
[[package]]
name = "log"
@ -508,9 +520,9 @@ dependencies = [
[[package]]
name = "num_cpus"
version = "1.13.0"
version = "1.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
dependencies = [
"hermit-abi",
"libc",
@ -524,9 +536,18 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
[[package]]
name = "once_cell"
version = "1.8.0"
version = "1.9.0"
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]]
name = "percent-encoding"
@ -536,9 +557,9 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
[[package]]
name = "pin-project-lite"
version = "0.2.7"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
[[package]]
name = "pin-utils"
@ -548,9 +569,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "ppv-lite86"
version = "0.2.15"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba"
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
[[package]]
name = "proc-macro-error"
@ -576,23 +597,11 @@ dependencies = [
"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]]
name = "proc-macro2"
version = "1.0.32"
version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
dependencies = [
"unicode-xid",
]
@ -614,9 +623,9 @@ checksum = "a411616b47dce3139c0169c89899ba5ea3534e545ab4d0c1d3956460fe781bae"
[[package]]
name = "quote"
version = "1.0.10"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d"
dependencies = [
"proc-macro2",
]
@ -698,24 +707,24 @@ dependencies = [
[[package]]
name = "ryu"
version = "1.0.5"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
[[package]]
name = "serde"
version = "1.0.130"
version = "1.0.133"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
checksum = "97565067517b60e2d1ea8b268e59ce036de907ac523ad83a0475da04e818989a"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.130"
version = "1.0.133"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537"
dependencies = [
"proc-macro2",
"quote",
@ -724,9 +733,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.68"
version = "1.0.74"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8"
checksum = "ee2bb9cd061c5865d345bb02ca49fcef1391741b672b54a0bf7b679badec3142"
dependencies = [
"itoa",
"ryu",
@ -777,15 +786,15 @@ dependencies = [
[[package]]
name = "strsim"
version = "0.8.0"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "syn"
version = "1.0.81"
version = "1.0.84"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966"
checksum = "ecb2e6da8ee5eb9a61068762a32fa9619cc591ceb055b3687f4cd4051ec2e06b"
dependencies = [
"proc-macro2",
"quote",
@ -794,9 +803,9 @@ dependencies = [
[[package]]
name = "sys-info"
version = "0.7.0"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5cfbd84f86389198ade41b439f72a5b1b3a8ba728e61cd589e1720d0df44c39"
checksum = "0b3a0d0aba8bf96a0e1ddfdc352fc53b3df7f39318c71854910c3c4b024ae52c"
dependencies = [
"cc",
"libc",
@ -837,12 +846,9 @@ dependencies = [
[[package]]
name = "textwrap"
version = "0.11.0"
version = "0.14.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
dependencies = [
"unicode-width",
]
checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
[[package]]
name = "thiserror"
@ -866,9 +872,9 @@ dependencies = [
[[package]]
name = "tinyvec"
version = "1.5.0"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f83b2a3d4d9091d0abd7eba4dc2710b1718583bd4d8992e2190720ea38f391f7"
checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
dependencies = [
"tinyvec_macros",
]
@ -881,11 +887,10 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
[[package]]
name = "tokio"
version = "1.12.0"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2c2416fdedca8443ae44b4527de1ea633af61d8f7169ffa6e72c5b53d24efcc"
checksum = "fbbf1c778ec206785635ce8ad57fe52b3009ae9e0c9f574a728f3049d3e55838"
dependencies = [
"autocfg",
"bytes",
"libc",
"memchr",
@ -900,9 +905,9 @@ dependencies = [
[[package]]
name = "tokio-macros"
version = "1.5.0"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2dd85aeaba7b68df939bd357c6afb36c87951be9e80bf9c859f2fc3e9fca0fd"
checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
dependencies = [
"proc-macro2",
"quote",
@ -911,9 +916,9 @@ dependencies = [
[[package]]
name = "tokio-stream"
version = "0.1.7"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b2f3f698253f03119ac0102beaa64f67a67e08074d03a22d18784104543727f"
checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3"
dependencies = [
"futures-core",
"pin-project-lite",
@ -1031,17 +1036,11 @@ version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad9680608df133af2c1ddd5eaf1ddce91d60d61b6bc51494ef326458365a470a"
[[package]]
name = "vec_map"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]]
name = "version_check"
version = "0.9.3"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "wasi"

View file

@ -10,7 +10,8 @@ edition = "2018"
ansi-to-html = "0.1.0"
async-trait = "0.1.42"
atty = "0.2"
clap = "2.33.3"
clap = "3.0.0"
clap_complete = "3.0.0"
clicolors-control = "1"
console = "0.13.0"
const_format = "0.2.22"
@ -27,7 +28,7 @@ regex = "1"
serde = { version = "1.0.118", features = ["derive"] }
serde_json = "1.0"
shell-escape = "0.1.5"
sys-info = "0.7.0"
sys-info = "0.9.0"
snafu = "0.6.10"
tempfile = "3.1.0"
tokio-test = "0.4.0"

View file

@ -17,7 +17,7 @@ in rustPlatform.buildRustPackage rec {
src = lib.cleanSource ./.;
};
cargoSha256 = "sha256-YE+0jsdkzRaiUhPC71WBe/KcYERNy7nME26+ejrPRlc=";
cargoSha256 = "sha256-bSlDE2UkCO4jdTHnvaMdRHMl7HLSIYVpDBMiojmBv7Q=";
nativeBuildInputs = [ installShellFiles ];

View file

@ -2,7 +2,8 @@
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 env_logger::fmt::WriteStyle;
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 mut app = App::new("Colmena")
.bin_name("colmena")
@ -93,14 +94,13 @@ pub fn build_cli(include_internal: bool) -> App<'static, 'static> {
.author("Zhaofeng Li <hello@zhaofeng.li>")
.about("NixOS deployment tool")
.long_about(LONG_ABOUT.as_str())
.global_setting(AppSettings::ColoredHelp)
.setting(AppSettings::ArgRequiredElseHelp)
.arg(Arg::with_name("config")
.short("f")
.arg(Arg::new("config")
.short('f')
.long("config")
.value_name("CONFIG")
.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)
// 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).
.default_value("hive.nix")
.global(true))
.arg(Arg::with_name("show-trace")
.arg(Arg::new("show-trace")
.long("show-trace")
.help("Show debug information for Nix commands")
.long_help("Passes --show-trace to Nix commands")
.global(true)
.takes_value(false))
.arg(Arg::with_name("color")
.arg(Arg::new("color")
.long("color")
.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.
@ -131,15 +131,16 @@ It's also possible to specify the preference using environment variables. See <h
.global(true));
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)")
.setting(AppSettings::Hidden)
.arg(Arg::with_name("shell")
.arg(Arg::new("shell")
.index(1)
.possible_values(Shell::possible_values())
.required(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)")
.setting(AppSettings::Hidden));
@ -178,9 +179,6 @@ pub async fn run() {
handle_command!(exec, matches);
handle_command!("nix-info", nix_info, matches);
// deprecated alias
handle_command!("introspect", eval, matches);
#[cfg(debug_assertions)]
handle_command!("test-progress", test_progress, matches);
@ -192,16 +190,18 @@ pub async fn run() {
return gen_help_markdown();
};
// deprecated alias
handle_command!("introspect", eval, matches);
app.print_long_help().unwrap();
println!();
}
fn gen_completions(args: &ArgMatches<'_>) {
fn gen_completions(args: &ArgMatches) {
let mut app = build_cli(false);
let shell: clap::Shell = args.value_of("shell").unwrap()
.parse().unwrap();
let shell = args.value_of_t::<Shell>("shell").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() {
@ -226,8 +226,7 @@ fn gen_help_markdown() {
let mut command = {
let c = command
.setting(AppSettings::ColoredHelp)
.setting(AppSettings::ColorAlways);
.color(ColorChoice::Always);
if full_command != "colmena" {
c.bin_name(&full_command)

View file

@ -1,7 +1,7 @@
use std::env;
use std::path::PathBuf;
use clap::{Arg, App, SubCommand, ArgMatches, ArgSettings};
use clap::{Arg, App, ArgMatches, ArgSettings};
use crate::nix::deployment::{
Deployment,
@ -14,9 +14,9 @@ use crate::progress::SimpleProgressOutput;
use crate::nix::{NixError, NodeFilter};
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
.arg(Arg::with_name("eval-node-limit")
.arg(Arg::new("eval-node-limit")
.long("eval-node-limit")
.value_name("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")),
}
}))
.arg(Arg::with_name("parallel")
.short("p")
.arg(Arg::new("parallel")
.short('p')
.long("parallel")
.value_name("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")),
}
}))
.arg(Arg::with_name("keep-result")
.arg(Arg::new("keep-result")
.long("keep-result")
.help("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.
"#)
.takes_value(false))
.arg(Arg::with_name("verbose")
.short("v")
.arg(Arg::new("verbose")
.short('v')
.long("verbose")
.help("Be verbose")
.long_help("Deactivates the progress spinner and prints every line of output.")
.takes_value(false))
.arg(Arg::with_name("no-keys")
.arg(Arg::new("no-keys")
.long("no-keys")
.help("Do not upload 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`.
"#)
.takes_value(false))
.arg(Arg::with_name("no-substitutes")
.arg(Arg::new("no-substitutes")
.long("no-substitutes")
.help("Do not use substitutes")
.long_help("Disables the use of substituters when copying closures to the remote host.")
.takes_value(false))
.arg(Arg::with_name("no-gzip")
.arg(Arg::new("no-gzip")
.long("no-gzip")
.help("Do not use gzip")
.long_help("Disables the use of gzip when copying closures to the remote host.")
.takes_value(false))
.arg(Arg::with_name("build-on-target")
.arg(Arg::new("build-on-target")
.long("build-on-target")
.help("Build the system profiles on the target nodes")
.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`.
"#)
.takes_value(false))
.arg(Arg::with_name("no-build-on-target")
.arg(Arg::new("no-build-on-target")
.long("no-build-on-target")
.set(ArgSettings::Hidden)
.setting(ArgSettings::Hidden)
.takes_value(false))
.arg(Arg::with_name("force-replace-unknown-profiles")
.arg(Arg::new("force-replace-unknown-profiles")
.long("force-replace-unknown-profiles")
.help("Ignore all targeted nodes deployment.replaceUnknownProfiles setting")
.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))
}
pub fn subcommand() -> App<'static, 'static> {
let command = SubCommand::with_name("apply")
pub fn subcommand() -> App<'static> {
let command = App::new("apply")
.about("Apply configurations on remote machines")
.arg(Arg::with_name("goal")
.arg(Arg::new("goal")
.help("Deployment goal")
.long_help("Same as the targets for switch-to-configuration.\n\"push\" means only copying the closures to remote nodes.")
.default_value("switch")
@ -126,7 +126,7 @@ pub fn subcommand() -> App<'static, 'static> {
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 ssh_config = env::var("SSH_CONFIG_FILE")

View file

@ -1,7 +1,7 @@
use std::env;
use std::collections::HashMap;
use clap::{Arg, App, SubCommand, ArgMatches};
use clap::{Arg, App, ArgMatches};
use tokio::fs;
use tokio::process::Command;
@ -15,31 +15,31 @@ use crate::nix::{NixError, NodeName, host};
use crate::progress::SimpleProgressOutput;
use crate::util;
pub fn subcommand() -> App<'static, 'static> {
SubCommand::with_name("apply-local")
pub fn subcommand() -> App<'static> {
App::new("apply-local")
.about("Apply configurations on the local machine")
.arg(Arg::with_name("goal")
.arg(Arg::new("goal")
.help("Deployment goal")
.long_help("Same as the targets for switch-to-configuration.\n\"push\" is noop in apply-local.")
.default_value("switch")
.index(1)
.possible_values(&["push", "switch", "boot", "test", "dry-activate", "keys"]))
.arg(Arg::with_name("sudo")
.arg(Arg::new("sudo")
.long("sudo")
.help("Attempt to escalate privileges if not run as root"))
.arg(Arg::with_name("sudo-command")
.arg(Arg::new("sudo-command")
.long("sudo-command")
.value_name("COMMAND")
.help("Command to use to escalate privileges")
.default_value("sudo")
.takes_value(true))
.arg(Arg::with_name("verbose")
.short("v")
.arg(Arg::new("verbose")
.short('v')
.long("verbose")
.help("Be verbose")
.long_help("Deactivates the progress spinner and prints every line of output.")
.takes_value(false))
.arg(Arg::with_name("no-keys")
.arg(Arg::new("no-keys")
.long("no-keys")
.help("Do not deploy 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.
"#)
.takes_value(false))
.arg(Arg::with_name("node")
.arg(Arg::new("node")
.long("node")
.help("Override the node name to use")
.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")
.hidden(true)
.hide(true)
.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?
if let Ok(os_release) = fs::read_to_string("/etc/os-release").await {
if !os_release.contains("ID=nixos\n") {

View file

@ -1,18 +1,18 @@
use clap::{Arg, App, SubCommand};
use clap::{Arg, App};
use crate::util;
use super::apply;
pub use super::apply::run;
pub fn subcommand() -> App<'static, 'static> {
let command = SubCommand::with_name("build")
pub fn subcommand() -> App<'static> {
let command = App::new("build")
.about("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."#)
.arg(Arg::with_name("goal")
.hidden(true)
.arg(Arg::new("goal")
.hide(true)
.default_value("build")
.possible_values(&["build"])
.takes_value(true));

View file

@ -1,12 +1,12 @@
use std::path::PathBuf;
use clap::{Arg, App, AppSettings, SubCommand, ArgMatches};
use clap::{Arg, App, AppSettings, ArgMatches};
use crate::util;
use crate::nix::NixError;
pub fn subcommand() -> App<'static, 'static> {
SubCommand::with_name("eval")
pub fn subcommand() -> App<'static> {
App::new("eval")
.about("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
"#)
.arg(Arg::with_name("expression_file")
.arg(Arg::new("expression_file")
.index(1)
.value_name("FILE")
.help("The .nix file containing the expression")
.takes_value(true))
.arg(Arg::with_name("expression")
.short("E")
.arg(Arg::new("expression")
.short('E')
.value_name("EXPRESSION")
.help("The Nix expression")
.takes_value(true))
.arg(Arg::with_name("instantiate")
.arg(Arg::new("instantiate")
.long("instantiate")
.help("Actually instantiate the expression")
.takes_value(false))
}
pub fn deprecated_alias() -> App<'static, 'static> {
pub fn deprecated_alias() -> App<'static> {
subcommand()
.name("introspect")
.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() {
log::warn!("`colmena introspect` has been renamed to `colmena eval`. Please update your scripts.");
}

View file

@ -2,7 +2,7 @@ use std::env;
use std::path::PathBuf;
use std::sync::Arc;
use clap::{Arg, App, AppSettings, SubCommand, ArgMatches};
use clap::{Arg, App, AppSettings, ArgMatches};
use futures::future::join_all;
use tokio::sync::Semaphore;
@ -11,12 +11,12 @@ use crate::job::{JobMonitor, JobState, JobType};
use crate::progress::SimpleProgressOutput;
use crate::util;
pub fn subcommand() -> App<'static, 'static> {
let command = SubCommand::with_name("exec")
pub fn subcommand() -> App<'static> {
let command = App::new("exec")
.about("Run a command on remote machines")
.setting(AppSettings::TrailingVarArg)
.arg(Arg::with_name("parallel")
.short("p")
.arg(Arg::new("parallel")
.short('p')
.long("parallel")
.value_name("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")),
}
}))
.arg(Arg::with_name("verbose")
.short("v")
.arg(Arg::new("verbose")
.short('v')
.long("verbose")
.help("Be verbose")
.long_help("Deactivates the progress spinner and prints every line of output.")
.takes_value(false))
.arg(Arg::with_name("command")
.arg(Arg::new("command")
.value_name("COMMAND")
.last(true)
.help("Command")
.required(true)
.multiple(true)
.multiple_occurrences(true)
.long_help(r#"Command to run
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)
}
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 ssh_config = env::var("SSH_CONFIG_FILE")
.ok().map(PathBuf::from);

View file

@ -1,13 +1,13 @@
use clap::{App, SubCommand, ArgMatches};
use clap::{App, ArgMatches};
use crate::nix::{NixCheck, NixError};
pub fn subcommand() -> App<'static, 'static> {
SubCommand::with_name("nix-info")
pub fn subcommand() -> App<'static> {
App::new("nix-info")
.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;
check.print_version_info();
check.print_flakes_info(false);

View file

@ -1,6 +1,6 @@
use std::time::Duration;
use clap::{App, AppSettings, SubCommand, ArgMatches};
use clap::{App, AppSettings, ArgMatches};
use tokio::time;
use crate::job::{JobMonitor, JobType};
@ -13,13 +13,13 @@ macro_rules! node {
}
}
pub fn subcommand() -> App<'static, 'static> {
SubCommand::with_name("test-progress")
pub fn subcommand() -> App<'static> {
App::new("test-progress")
.about("Run progress spinner tests")
.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 (monitor, meta) = JobMonitor::new(output.get_sender());

View file

@ -1,18 +1,18 @@
use clap::{Arg, App, SubCommand};
use clap::{Arg, App};
use crate::util;
use super::apply;
pub use super::apply::run;
pub fn subcommand() -> App<'static, 'static> {
let command = SubCommand::with_name("upload-keys")
pub fn subcommand() -> App<'static> {
let command = App::new("upload-keys")
.about("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."#)
.arg(Arg::with_name("goal")
.hidden(true)
.arg(Arg::new("goal")
.hide(true)
.default_value("keys")
.possible_values(&["keys"])
.takes_value(true));

View file

@ -10,8 +10,8 @@ use clap::ArgMatches;
use crate::nix::NixError;
/// 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
where U: FnOnce(&'a ArgMatches<'a>, &'a ArgMatches<'a>) -> F,
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 ArgMatches) -> F,
F: Future<Output = Result<T, NixError>>,
{
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 {
// People following the tutorial might put hive.nix directly
// in their Colmena checkout, and encounter NoFlakesSupport

View file

@ -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") {
0 => {
// traverse upwards until we find hive.nix
@ -157,9 +157,9 @@ pub async fn hive_from_args(args: &ArgMatches<'_>) -> NixResult<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
.arg(Arg::with_name("on")
.arg(Arg::new("on")
.long("on")
.value_name("NODES")
.help("Node selector")