summaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorStephan Dilly <dilly.stephan@gmail.com>2021-05-16 17:02:09 +0200
committerStephan Dilly <dilly.stephan@gmail.com>2021-05-16 17:02:09 +0200
commitd4455a2657b13267f28a0969aee8a55c6d50746d (patch)
tree64499820871d92ff4434e9376ad5f01fba7ccb89 /src/main.rs
parentfc5deec42428ab9fd1d99157a55bed924fe73cfe (diff)
move args stuff into separate file
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs113
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| {