Use structOpt to replace clap
This commit is contained in:
parent
2795b8672f
commit
ff986cce1f
65
tools/copy_bom/Cargo.lock
generated
65
tools/copy_bom/Cargo.lock
generated
@ -83,7 +83,6 @@ dependencies = [
|
||||
name = "copy_bom"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"data-encoding",
|
||||
"elf",
|
||||
"env_logger",
|
||||
@ -94,6 +93,7 @@ dependencies = [
|
||||
"serde_yaml",
|
||||
"sha2",
|
||||
"shellexpand",
|
||||
"structopt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -196,6 +196,15 @@ version = "0.11.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
|
||||
dependencies = [
|
||||
"unicode-segmentation",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.1.19"
|
||||
@ -260,6 +269,30 @@ version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||
dependencies = [
|
||||
"proc-macro-error-attr",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error-attr"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.29"
|
||||
@ -374,6 +407,30 @@ version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
|
||||
|
||||
[[package]]
|
||||
name = "structopt"
|
||||
version = "0.3.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf9d950ef167e25e0bdb073cf1d68e9ad2795ac826f2f3f59647817cf23c0bfa"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"lazy_static",
|
||||
"structopt-derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "structopt-derive"
|
||||
version = "0.4.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "134d838a2c9943ac3125cf6df165eda53493451b719f3255b2a26b85f772d0ba"
|
||||
dependencies = [
|
||||
"heck",
|
||||
"proc-macro-error",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.75"
|
||||
@ -409,6 +466,12 @@ version = "1.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-segmentation"
|
||||
version = "1.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.8"
|
||||
|
@ -10,10 +10,10 @@ serde = { version = "1.0", features = ["derive"] }
|
||||
serde_yaml = "0.8"
|
||||
log = "0.4.14"
|
||||
env_logger = "0.9.0"
|
||||
clap = "2.33.3"
|
||||
sha2 = "0.9.5"
|
||||
data-encoding = "2.3.2"
|
||||
lazy_static = "1.4.0"
|
||||
regex = "1.5.4"
|
||||
shellexpand = "2.1"
|
||||
elf = "0.0.10"
|
||||
structopt = "0.3.23"
|
||||
|
@ -7,53 +7,31 @@ extern crate env_logger;
|
||||
extern crate regex;
|
||||
extern crate shellexpand;
|
||||
use bom::Bom;
|
||||
use clap::{App, Arg, ArgMatches};
|
||||
use env_logger::Env;
|
||||
use structopt::StructOpt;
|
||||
|
||||
mod bom;
|
||||
mod error;
|
||||
mod util;
|
||||
|
||||
/// The command line options
|
||||
#[derive(Debug, Clone)]
|
||||
/// copy files described in a bom file to a given dest root dir
|
||||
#[derive(Debug, Clone, StructOpt)]
|
||||
struct CopyBomOption {
|
||||
// The top bom file
|
||||
/// Set the bom file to copy
|
||||
#[structopt(short = "f", long = "file")]
|
||||
bom_file: String,
|
||||
// the root dir where we try to copy files to
|
||||
/// The dest root dir
|
||||
#[structopt(long = "root")]
|
||||
root_dir: String,
|
||||
// set dry run mode. If this flag is set, no real options will done
|
||||
/// Dry run mode
|
||||
#[structopt(long = "dry-run")]
|
||||
dry_run: bool,
|
||||
// indicate which dirs to find included bom files
|
||||
/// Set the paths where to find included bom files
|
||||
#[structopt(long = "include-dir")]
|
||||
included_dirs: Vec<String>,
|
||||
}
|
||||
|
||||
impl CopyBomOption {
|
||||
// use clap to parse command lines options
|
||||
fn parse_command_line() -> Self {
|
||||
let arg_matches = read_command_line_options();
|
||||
// unwrap can never fail
|
||||
let bom_file = arg_matches
|
||||
.value_of("bom-file")
|
||||
.map(|s| s.to_string())
|
||||
.unwrap();
|
||||
let root_dir = arg_matches
|
||||
.value_of("root-dir")
|
||||
.map(|s| s.to_string())
|
||||
.unwrap();
|
||||
let dry_run = arg_matches.is_present("dry-run");
|
||||
let included_dirs = match arg_matches.values_of("include-dirs") {
|
||||
None => Vec::new(),
|
||||
Some(values) => values.into_iter().map(|s| s.to_string()).collect(),
|
||||
};
|
||||
CopyBomOption {
|
||||
bom_file,
|
||||
root_dir,
|
||||
dry_run,
|
||||
included_dirs,
|
||||
}
|
||||
}
|
||||
|
||||
/// copy files based on command line options
|
||||
fn copy_files(&self) {
|
||||
let CopyBomOption {
|
||||
bom_file,
|
||||
@ -66,47 +44,11 @@ impl CopyBomOption {
|
||||
}
|
||||
}
|
||||
|
||||
/// use clap to read command line options
|
||||
fn read_command_line_options<'a>() -> ArgMatches<'a> {
|
||||
App::new("copy_bom")
|
||||
.version("v0.1")
|
||||
.about("copy files described in a bom file to a given dest root dir")
|
||||
.arg(
|
||||
Arg::with_name("bom-file")
|
||||
.short("f")
|
||||
.long("file")
|
||||
.required(true)
|
||||
.takes_value(true)
|
||||
.help("Set the bom file to copy"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("root-dir")
|
||||
.long("root")
|
||||
.required(true)
|
||||
.takes_value(true)
|
||||
.help("The dest root dir"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("dry-run")
|
||||
.long("dry-run")
|
||||
.help("Dry run mode"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("include-dirs")
|
||||
.long("include-dir")
|
||||
.short("i")
|
||||
.multiple(true)
|
||||
.takes_value(true)
|
||||
.help("Set the paths where to find included bom files"),
|
||||
)
|
||||
.get_matches()
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// the copy_bom log environmental variable
|
||||
let env = Env::new().filter("OCCLUM_LOG_LEVEL");
|
||||
env_logger::init_from_env(env);
|
||||
|
||||
let copy_bom_option = CopyBomOption::parse_command_line();
|
||||
let copy_bom_option = CopyBomOption::from_args();
|
||||
copy_bom_option.copy_files();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user