aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2021-06-05 13:11:03 +0200
committerTeddy Wing2021-06-05 13:11:03 +0200
commit2a05b269344ab324aa73a634256a0b82fa79f201 (patch)
treef88049c86dc293a6f5423893b23183a569fa2012
parent3964a27da7cf61b540992387e8553382dffecb46 (diff)
downloadreflectub-2a05b269344ab324aa73a634256a0b82fa79f201.tar.bz2
Add command line option parsing
Define the options we want to take. Not using them yet.
-rw-r--r--Cargo.lock23
-rw-r--r--Cargo.toml2
-rw-r--r--src/main.rs44
3 files changed, 69 insertions, 0 deletions
diff --git a/Cargo.lock b/Cargo.lock
index cdb8e4e..27edc85 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -228,6 +228,12 @@ dependencies = [
]
[[package]]
+name = "exitcode"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de853764b47027c2e862a995c34978ffa63c1501f2e15f987ba11bd4f9bba193"
+
+[[package]]
name = "filetime"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -381,6 +387,15 @@ dependencies = [
]
[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
name = "getrandom"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1024,7 +1039,9 @@ version = "0.0.1"
dependencies = [
"anyhow",
"chrono",
+ "exitcode",
"filetime",
+ "getopts",
"git2",
"reqwest",
"serde",
@@ -1588,6 +1605,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"
[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
name = "unicode-xid"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index 18ec2a4..827aba2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,7 +6,9 @@ edition = "2018"
[dependencies]
anyhow = "1.0.40"
chrono = "0.4.19"
+exitcode = "1.1.2"
filetime = "0.2.14"
+getopts = "0.2.21"
git2 = "0.13.20"
reqwest = { version = "0.11.3", features = ["json"] }
serde = { version = "1.0.126", features = ["derive"] }
diff --git a/src/main.rs b/src/main.rs
index e20e860..f21f00a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,18 +1,55 @@
use anyhow::{self, Context};
use chrono::DateTime;
+use exitcode;
use filetime;
+use getopts::Options;
use sqlx;
use tokio;
use reflectub::{database, git, github};
+use std::env;
use std::fs;
use std::io;
use std::path::{Path, PathBuf};
+use std::process;
#[tokio::main]
async fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let mut opts = Options::new();
+
+ opts.optopt("d", "database", "SQLite database file path (required)", "DATABASE_FILE");
+ opts.optopt("", "cgitrc", "base cgitrc file to copy to mirrored repositories", "CGITRC_FILE");
+ opts.optflag("h", "help", "print this help menu");
+ opts.optflag("V", "version", "show the program version");
+
+ let opt_matches = match opts.parse(&args[1..]) {
+ Ok(m) => m,
+ Err(e) => {
+ eprintln!("error: {}", e);
+
+ process::exit(exitcode::SOFTWARE);
+ },
+ };
+
+ if opt_matches.opt_present("h") {
+ print_usage(&opts);
+ process::exit(exitcode::USAGE);
+ }
+
+ if opt_matches.opt_present("V") {
+ println!("{}", env!("CARGO_PKG_VERSION"));
+ process::exit(exitcode::OK);
+ }
+
+ if opt_matches.free.len() != 2 {
+ print_usage(&opts);
+ process::exit(exitcode::USAGE);
+ }
+
// let repos = github::fetch_repos("teddywing").await.unwrap();
//
// dbg!(&repos);
@@ -29,6 +66,13 @@ async fn main() {
run().await.unwrap();
}
+fn print_usage(opts: &Options) {
+ print!(
+ "{}",
+ opts.usage("usage: reflectub [options] -d DATABASE <github_username> <repository_path>"),
+ );
+}
+
async fn run() -> anyhow::Result<()> {
let test_repos = vec![
github::Repo {