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"
|
name = "copy_bom"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
|
||||||
"data-encoding",
|
"data-encoding",
|
||||||
"elf",
|
"elf",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
@ -94,6 +93,7 @@ dependencies = [
|
|||||||
"serde_yaml",
|
"serde_yaml",
|
||||||
"sha2",
|
"sha2",
|
||||||
"shellexpand",
|
"shellexpand",
|
||||||
|
"structopt",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -196,6 +196,15 @@ version = "0.11.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
|
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]]
|
[[package]]
|
||||||
name = "hermit-abi"
|
name = "hermit-abi"
|
||||||
version = "0.1.19"
|
version = "0.1.19"
|
||||||
@ -260,6 +269,30 @@ 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 = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
|
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]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.29"
|
version = "1.0.29"
|
||||||
@ -374,6 +407,30 @@ version = "0.8.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
|
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]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.75"
|
version = "1.0.75"
|
||||||
@ -409,6 +466,12 @@ version = "1.13.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06"
|
checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-segmentation"
|
||||||
|
version = "1.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-width"
|
name = "unicode-width"
|
||||||
version = "0.1.8"
|
version = "0.1.8"
|
||||||
|
@ -10,10 +10,10 @@ serde = { version = "1.0", features = ["derive"] }
|
|||||||
serde_yaml = "0.8"
|
serde_yaml = "0.8"
|
||||||
log = "0.4.14"
|
log = "0.4.14"
|
||||||
env_logger = "0.9.0"
|
env_logger = "0.9.0"
|
||||||
clap = "2.33.3"
|
|
||||||
sha2 = "0.9.5"
|
sha2 = "0.9.5"
|
||||||
data-encoding = "2.3.2"
|
data-encoding = "2.3.2"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
regex = "1.5.4"
|
regex = "1.5.4"
|
||||||
shellexpand = "2.1"
|
shellexpand = "2.1"
|
||||||
elf = "0.0.10"
|
elf = "0.0.10"
|
||||||
|
structopt = "0.3.23"
|
||||||
|
@ -7,53 +7,31 @@ extern crate env_logger;
|
|||||||
extern crate regex;
|
extern crate regex;
|
||||||
extern crate shellexpand;
|
extern crate shellexpand;
|
||||||
use bom::Bom;
|
use bom::Bom;
|
||||||
use clap::{App, Arg, ArgMatches};
|
|
||||||
use env_logger::Env;
|
use env_logger::Env;
|
||||||
|
use structopt::StructOpt;
|
||||||
|
|
||||||
mod bom;
|
mod bom;
|
||||||
mod error;
|
mod error;
|
||||||
mod util;
|
mod util;
|
||||||
|
|
||||||
/// The command line options
|
/// copy files described in a bom file to a given dest root dir
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone, StructOpt)]
|
||||||
struct CopyBomOption {
|
struct CopyBomOption {
|
||||||
// The top bom file
|
/// Set the bom file to copy
|
||||||
|
#[structopt(short = "f", long = "file")]
|
||||||
bom_file: String,
|
bom_file: String,
|
||||||
// the root dir where we try to copy files to
|
/// The dest root dir
|
||||||
|
#[structopt(long = "root")]
|
||||||
root_dir: String,
|
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,
|
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>,
|
included_dirs: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CopyBomOption {
|
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) {
|
fn copy_files(&self) {
|
||||||
let CopyBomOption {
|
let CopyBomOption {
|
||||||
bom_file,
|
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() {
|
fn main() {
|
||||||
// the copy_bom log environmental variable
|
// the copy_bom log environmental variable
|
||||||
let env = Env::new().filter("OCCLUM_LOG_LEVEL");
|
let env = Env::new().filter("OCCLUM_LOG_LEVEL");
|
||||||
env_logger::init_from_env(env);
|
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();
|
copy_bom_option.copy_files();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user