switch to clap's derive macros

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2020-11-09 06:48:47 +05:30
parent 5eff1508ac
commit 27e73863ec
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
2 changed files with 39 additions and 43 deletions

View file

@ -1,54 +1,19 @@
pub(crate) mod cli;
pub(crate) mod git;
pub(crate) mod model;
use clap::Clap;
use cli::Opts;
use cli::SubCommand;
use git::freeze_repos;
use git::thaw_repos;
use anyhow::anyhow;
use clap::{crate_version, App, AppSettings, Arg};
fn main() -> anyhow::Result<()> {
let matches = App::new("gitice")
.about("Command-line tool for backing up and restoring multiple Git repositories from a directory")
.version(crate_version!())
.setting(AppSettings::ColoredHelp)
.setting(AppSettings::DeriveDisplayOrder)
.setting(AppSettings::SubcommandRequiredElseHelp)
.subcommand(
App::new("freeze")
.about("Generate a gitice.lock file with all the repositories in the given directory")
.setting(AppSettings::ColoredHelp)
.args(&[Arg::new("directory")
.about("Directory to look for Git repos in")
.required(true)
.index(1)]),
)
.subcommand(
App::new("thaw")
.about("Given a gitice.lock and a directory, clones back all the repositories from the lockfile in the directory")
.setting(AppSettings::ColoredHelp)
.args(&[
Arg::new("directory")
.about("Directory to restore repositories in")
.required(true)
.index(1),
Arg::new("lockfile")
.about("The lockfile to restore repositories from")
.short('l')
.long("lockfile")
.required(false)
.default_value("gitice.lock")
]),
)
.get_matches();
let opts = Opts::parse();
match matches.subcommand().unwrap() {
("freeze", m) => freeze_repos(m.value_of("directory").unwrap())?,
("thaw", m) => thaw_repos(
m.value_of("directory").unwrap(),
m.value_of("lockfile").unwrap(),
)?,
(cmd, _) => return Err(anyhow!("unknown subcommand: {}", cmd)),
match opts.subcommand {
SubCommand::Freeze(p) => freeze_repos(&p.directory)?,
SubCommand::Thaw(p) => thaw_repos(&p.directory, &p.lockfile)?,
}
Ok(())