diff options
author | Stephan Dilly <dilly.stephan@gmail.com> | 2021-05-16 17:02:09 +0200 |
---|---|---|
committer | Stephan Dilly <dilly.stephan@gmail.com> | 2021-05-16 17:02:09 +0200 |
commit | d4455a2657b13267f28a0969aee8a55c6d50746d (patch) | |
tree | 64499820871d92ff4434e9376ad5f01fba7ccb89 /src/main.rs | |
parent | fc5deec42428ab9fd1d99157a55bed924fe73cfe (diff) |
move args stuff into separate file
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 113 |
1 files changed, 4 insertions, 109 deletions
diff --git a/src/main.rs b/src/main.rs index 1930da3e..048e0370 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,6 +15,7 @@ // #![deny(clippy::expect_used)] mod app; +mod args; mod bug_report; mod clipboard; mod cmdbar; @@ -30,14 +31,10 @@ mod tabs; mod ui; mod version; -use crate::app::App; -use anyhow::{anyhow, bail, Result}; +use crate::{app::App, args::process_cmdline}; +use anyhow::{bail, Result}; use asyncgit::AsyncNotification; use backtrace::Backtrace; -use clap::{ - crate_authors, crate_description, crate_name, crate_version, - App as ClapApp, Arg, -}; use crossbeam_channel::{tick, unbounded, Receiver, Select}; use crossterm::{ terminal::{ @@ -51,15 +48,10 @@ use keys::KeyConfig; use profiler::Profiler; use scopeguard::defer; use scopetime::scope_time; -use simplelog::{Config, LevelFilter, WriteLogger}; use spinner::Spinner; use std::{ - env, fs, - fs::File, io::{self, Write}, - panic, - path::PathBuf, - process, + panic, process, time::{Duration, Instant}, }; use tui::{ @@ -80,10 +72,6 @@ pub enum QueueEvent { InputEvent(InputEvent), } -struct CliArgs { - theme: PathBuf, -} - fn main() -> Result<()> { let cliargs = process_cmdline()?; @@ -259,99 +247,6 @@ fn start_terminal<W: Write>( Ok(terminal) } -fn get_app_cache_path() -> Result<PathBuf> { - let mut path = dirs_next::cache_dir() - .ok_or_else(|| anyhow!("failed to find os cache dir."))?; - - path.push("gitui"); - fs::create_dir_all(&path)?; - Ok(path) -} - -fn get_app_config_path() -> Result<PathBuf> { - let mut path = if cfg!(target_os = "macos") { - dirs_next::home_dir().map(|h| h.join(".config")) - } else { - dirs_next::config_dir() - } - .ok_or_else(|| anyhow!("failed to find os config dir."))?; - - path.push("gitui"); - fs::create_dir_all(&path)?; - Ok(path) -} - -fn setup_logging() -> Result<()> { - let mut path = get_app_cache_path()?; - path.push("gitui.log"); - - let _ = WriteLogger::init( - LevelFilter::Trace, - Config::default(), - File::create(path)?, - ); - - Ok(()) -} - -fn process_cmdline() -> Result<CliArgs> { - let app = ClapApp::new(crate_name!()) - .author(crate_authors!()) - .version(crate_version!()) - .about(crate_description!()) - .arg( - Arg::with_name("theme") - .help("Set the color theme (defaults to theme.ron)") - .short("t") - .long("theme") - .value_name("THEME") - .takes_value(true), - ) - .arg( - Arg::with_name("logging") - .help("Stores logging output into a cache directory") - .short("l") - .long("logging"), - ) - .arg( - Arg::with_name("bugreport") - .help("Generate a bug report") - .long("bugreport"), - ) - .arg( - Arg::with_name("directory") - .help("Set the working directory") - .short("d") - .long("directory") - .takes_value(true), - ); - - let arg_matches = app.get_matches(); - if arg_matches.is_present("bugreport") { - bug_report::generate_bugreport()?; - std::process::exit(0); - } - if arg_matches.is_present("logging") { - setup_logging()?; - } - if arg_matches.is_present("directory") { - let directory = - arg_matches.value_of("directory").unwrap_or("."); - env::set_current_dir(directory)?; - } - let arg_theme = - arg_matches.value_of("theme").unwrap_or("theme.ron"); - if get_app_config_path()?.join(arg_theme).is_file() { - Ok(CliArgs { - theme: get_app_config_path()?.join(arg_theme), - }) - } else { - Ok(CliArgs { - theme: get_app_config_path()?.join("theme.ron"), - }) - } -} - fn set_panic_handlers() -> Result<()> { // regular panic handler panic::set_hook(Box::new(|e| { |