#![doc(html_root_url = "https://docs.rs/cargo-sync-rdme/0.3.2")]
#![warn(
elided_lifetimes_in_paths,
explicit_outlives_requirements,
keyword_idents,
missing_copy_implementations,
missing_debug_implementations,
missing_docs,
single_use_lifetimes,
unreachable_pub,
unused
)]
use std::{env, io};
use clap::Parser;
use tracing::Level;
use tracing_subscriber::EnvFilter;
#[macro_use]
mod macros;
mod cli;
mod config;
mod diff;
mod sync;
mod traits;
mod vcs;
mod with_source;
pub use self::cli::App;
pub type Error = miette::Error;
pub type Result<T> = miette::Result<T>;
pub fn main() -> Result<()> {
let args = env::args().enumerate().filter_map(|(idx, arg)| {
if idx == 1 && arg == "sync-rdme" {
None
} else {
Some(arg)
}
});
let app = App::parse_from(args);
install_logger(app.verbosity.into())?;
let workspace = app.workspace.metadata()?;
for package in app.package.packages(&workspace)? {
sync::sync_all(&app, &workspace, package)?;
}
Ok(())
}
fn install_logger(verbosity: Option<Level>) -> Result<()> {
if env::var_os("RUST_LOG").is_none() {
match verbosity {
Some(Level::ERROR) => env::set_var("RUST_LOG", "error"),
Some(Level::WARN) => env::set_var("RUST_LOG", "warn"),
Some(Level::INFO) => env::set_var("RUST_LOG", "info"),
Some(Level::DEBUG) => env::set_var("RUST_LOG", "debug"),
Some(Level::TRACE) => env::set_var("RUST_LOG", "trace"),
None => env::set_var("RUST_LOG", "off"),
}
}
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.with_writer(io::stderr)
.with_target(false)
.try_init()
.map_err(|e| miette!(e))?;
Ok(())
}