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