add subcommand to generate bash completions
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
shimun 2020-09-03 14:44:03 +02:00
parent 2266754a95
commit e1f762ddc9
Signed by: shimun
GPG Key ID: E81D8382DC2F971B
2 changed files with 23 additions and 0 deletions

View File

@ -11,8 +11,10 @@ license=('MPL-2.0')
build() { build() {
cargo build --release --locked --all-features --target-dir=target cargo build --release --locked --all-features --target-dir=target
./target/release/fido2luks completions bash target
} }
package() { package() {
install -Dm 755 target/release/${pkgname} -t "${pkgdir}/usr/bin" install -Dm 755 target/release/${pkgname} -t "${pkgdir}/usr/bin"
install -Dm 644 target/fido2luks.bash "${pkgdir}/usr/share/bash-completion/completions/fido2luks"
} }

View File

@ -1,6 +1,7 @@
use crate::error::*; use crate::error::*;
use crate::*; use crate::*;
use structopt::clap::{AppSettings, Shell};
use structopt::StructOpt; use structopt::StructOpt;
use ctap::{FidoCredential, FidoErrorKind}; use ctap::{FidoCredential, FidoErrorKind};
@ -303,6 +304,14 @@ pub enum Command {
#[structopt(name = "connected")] #[structopt(name = "connected")]
Connected, Connected,
Token(TokenCommand), Token(TokenCommand),
/// Generate bash completion scripts
#[structopt(name = "completions", setting = AppSettings::Hidden)]
GenerateCompletions {
/// Shell to generate completions for: bash, fish
#[structopt(possible_values = &["bash", "fish"])]
shell: String,
out_dir: PathBuf,
},
} }
///LUKS2 token related operations ///LUKS2 token related operations
@ -725,5 +734,17 @@ pub fn run_cli() -> Fido2LuksResult<()> {
Ok(()) Ok(())
} }
}, },
Command::GenerateCompletions { shell, out_dir } => {
Args::clap().gen_completions(
env!("CARGO_PKG_NAME"),
match shell.as_ref() {
"bash" => Shell::Bash,
"fish" => Shell::Fish,
_ => unreachable!("structopt shouldn't allow us to reach this point"),
},
&out_dir,
);
Ok(())
}
} }
} }