From 675ea4d40aa0c9c13af5cefb9618383f894a2c03 Mon Sep 17 00:00:00 2001 From: Matt Kline Date: Fri, 26 Mar 2021 00:48:12 -0700 Subject: [PATCH] Provide color choices via simplelog fork Waiting for https://github.com/Drakulix/simplelog.rs/pull/72 to hopefully land. Meantime, use the fork. --- Cargo.lock | 150 ++++++---------------------------------------------- Cargo.toml | 7 ++- src/main.rs | 36 +++++++++++-- 3 files changed, 52 insertions(+), 141 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 002e27a..1bef24e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -30,18 +30,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06e97b4e522f9e55523001238ac59d13a8603af57f69980de5d8de4bbbe8ada6" -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "assert_cmd" version = "1.0.3" @@ -79,6 +67,7 @@ version = "0.1.0" dependencies = [ "anyhow", "assert_cmd", + "atty", "chrono", "enum-map", "env_logger", @@ -104,29 +93,12 @@ dependencies = [ "zstd", ] -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - [[package]] name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -[[package]] -name = "blake2b_simd" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] - [[package]] name = "block-buffer" version = "0.9.0" @@ -162,12 +134,6 @@ dependencies = [ "jobserver", ] -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -203,12 +169,6 @@ dependencies = [ "vec_map", ] -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "cpuid-bool" version = "0.1.2" @@ -221,7 +181,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", ] @@ -231,7 +191,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] @@ -242,7 +202,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", "lazy_static", "memoffset", @@ -256,7 +216,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49" dependencies = [ "autocfg", - "cfg-if 1.0.0", + "cfg-if", "lazy_static", ] @@ -275,27 +235,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "dirs" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3" -dependencies = [ - "cfg-if 0.1.10", - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "doc-comment" version = "0.3.3" @@ -358,26 +297,15 @@ dependencies = [ "version_check", ] -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi", ] [[package]] @@ -475,7 +403,7 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -517,7 +445,7 @@ checksum = "b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2" dependencies = [ "bitflags", "cc", - "cfg-if 1.0.0", + "cfg-if", "libc", ] @@ -658,7 +586,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" dependencies = [ - "getrandom 0.2.2", + "getrandom", ] [[package]] @@ -695,12 +623,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "redox_syscall" -version = "0.1.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" - [[package]] name = "redox_syscall" version = "0.2.5" @@ -710,17 +632,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "redox_users" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" -dependencies = [ - "getrandom 0.1.16", - "redox_syscall 0.1.57", - "rust-argon2", -] - [[package]] name = "regex" version = "1.4.5" @@ -756,18 +667,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rust-argon2" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" -dependencies = [ - "base64", - "blake2b_simd", - "constant_time_eq", - "crossbeam-utils", -] - [[package]] name = "ryu" version = "1.0.5" @@ -843,7 +742,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa827a14b29ab7f44778d14a88d3cb76e949c45083f7dbfa507d0cb699dc12de" dependencies = [ "block-buffer", - "cfg-if 1.0.0", + "cfg-if", "cpuid-bool", "digest", "opaque-debug", @@ -851,13 +750,12 @@ dependencies = [ [[package]] name = "simplelog" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf9a002ccce717d066b3ccdb8a28829436249867229291e91b25d99bd723f0d" +version = "0.10.0" +source = "git+https://github.com/mrkline/simplelog.rs?branch=optional-color#a17ca28ffad2e61cadfff27f85245509f99cfe95" dependencies = [ "chrono", "log", - "term", + "termcolor", ] [[package]] @@ -907,24 +805,14 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "rand", - "redox_syscall 0.2.5", + "redox_syscall", "remove_dir_all", "winapi", ] -[[package]] -name = "term" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0863a3345e70f61d613eab32ee046ccd1bcc5f9105fe402c61fcd0c13eeb8b5" -dependencies = [ - "dirs", - "winapi", -] - [[package]] name = "termcolor" version = "1.1.2" @@ -1015,12 +903,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" diff --git a/Cargo.toml b/Cargo.toml index d25cb47..8b53350 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,7 @@ incremental = true # Iterate faster debug = true [dependencies] +atty = "0.2" anyhow = "1.0" enum-map = "0.6" fastcdc = "1.0" @@ -37,8 +38,10 @@ version = "0.4" features = ["serde"] [dependencies.simplelog] -version = "0.7" -features = ["test"] +version = "0.10" +git = "https://github.com/mrkline/simplelog.rs" +branch = "optional-color" +features = ["test", "termcolor"] [dependencies.zstd] version = "0.5" diff --git a/src/main.rs b/src/main.rs index 36e57d5..7a6bf99 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::path::PathBuf; use anyhow::*; use simplelog::*; +use structopt::clap::arg_enum; use structopt::StructOpt; use backpak::counters; @@ -14,6 +15,10 @@ struct Args { #[structopt(short, long, parse(from_occurrences))] verbose: u8, + #[structopt(short, long, case_insensitive = true, default_value = "auto")] + #[structopt(name = "always/auto/never")] + color: Color, + /// Prepend ISO-8601 timestamps to all trace messages (from --verbose). /// Useful for benchmarking. #[structopt(short, long)] @@ -26,6 +31,15 @@ struct Args { subcommand: Subcommand, } +arg_enum! { + #[derive(Debug)] + enum Color { + Auto, + Always, + Never + } +} + #[derive(Debug, StructOpt)] enum Subcommand { /// Initialize a backup repository @@ -44,7 +58,7 @@ enum Subcommand { fn main() -> Result<()> { let args = Args::from_args(); - init_logger(args.verbose, args.timestamps)?; + init_logger(&args)?; match args.subcommand { Subcommand::Init => init::run(&args.repository), @@ -63,20 +77,20 @@ fn main() -> Result<()> { } /// Set up simplelog to spit messages to stderr. -fn init_logger(verbosity: u8, timestamps: bool) -> Result<()> { +fn init_logger(args: &Args) -> Result<()> { let mut builder = ConfigBuilder::new(); // Shut a bunch of stuff off - we're just spitting to stderr. builder.set_location_level(LevelFilter::Trace); builder.set_target_level(LevelFilter::Off); builder.set_thread_level(LevelFilter::Off); - if timestamps { + if args.timestamps { builder.set_time_format_str("%+"); builder.set_time_level(LevelFilter::Error); } else { builder.set_time_level(LevelFilter::Off); } - let level = match verbosity { + let level = match args.verbose { 0 => LevelFilter::Warn, 1 => LevelFilter::Info, 2 => LevelFilter::Debug, @@ -88,7 +102,19 @@ fn init_logger(verbosity: u8, timestamps: bool) -> Result<()> { if cfg!(test) { TestLogger::init(level, config).context("Couldn't init test logger") } else { - TermLogger::init(level, config.clone(), TerminalMode::Stderr) + let color = match args.color { + Color::Always => ColorChoice::AlwaysAnsi, + Color::Auto => { + if atty::is(atty::Stream::Stderr) { + ColorChoice::Auto + } else { + ColorChoice::Never + } + } + Color::Never => ColorChoice::Never, + }; + + TermLogger::init(level, config.clone(), TerminalMode::Stderr, color) .or_else(|_| SimpleLogger::init(level, config)) .context("Couldn't init logger") }