From 6495268f002e1eeb27d13c58eec34ac4fa9b4ee6 Mon Sep 17 00:00:00 2001 From: Mica White Date: Mon, 30 Mar 2026 21:06:31 -0400 Subject: Refactor out config type --- src/bin/git-autosave-daemon.rs | 5 ++--- src/bin/git-autosave.rs | 4 ++-- src/bin/git-init-autosave.rs | 6 +++--- src/bin/git-restore-autosave.rs | 4 ++-- src/lib.rs | 41 ++++------------------------------------- 5 files changed, 13 insertions(+), 47 deletions(-) diff --git a/src/bin/git-autosave-daemon.rs b/src/bin/git-autosave-daemon.rs index 39df4b8..2c27ab2 100644 --- a/src/bin/git-autosave-daemon.rs +++ b/src/bin/git-autosave-daemon.rs @@ -44,7 +44,7 @@ impl DebounceEventHandler for ConfigWatcher log::error!("Failed to acquire thread key when reloading config. This is a bug!"); return; }; - let config = match git_autosave::load_config() { + let config = match Config::load() { Ok(config) => config, Err(e) => { log::error!("Failed to reload autosave config: {e}"); @@ -172,8 +172,7 @@ fn main() -> Result<(), anyhow::Error> { colog::init(); log::info!("Loading autosave config..."); - let config: &'static Mutex = - Box::leak(Box::new(Mutex::new(git_autosave::load_config()?))); + let config: &'static Mutex = Box::leak(Box::new(Mutex::new(Config::load()?))); log::info!("Loaded autosave config"); log::info!("Starting repository watcher..."); diff --git a/src/bin/git-autosave.rs b/src/bin/git-autosave.rs index 4a85206..fa0d9e6 100644 --- a/src/bin/git-autosave.rs +++ b/src/bin/git-autosave.rs @@ -5,11 +5,11 @@ use git2::{RemoteCallbacks, Repository}; fn main() -> Result<(), anyhow::Error> { let repository = Repository::discover(".")?; let gitconfig = repository.config()?; - let config: &'static mut Config = Box::leak(Box::new(git_autosave::load_config()?)); + let config: &'static mut Config = Box::leak(Box::new(Config::load()?)); if std::env::args().any(|arg| arg == "--init") { let id = git_autosave::init(&repository, Some(config))?; - git_autosave::save_config(config)?; + config.save()?; println!("Initialized autosave for repository: {id}"); } diff --git a/src/bin/git-init-autosave.rs b/src/bin/git-init-autosave.rs index 8e72a9e..77ee4e4 100644 --- a/src/bin/git-init-autosave.rs +++ b/src/bin/git-init-autosave.rs @@ -1,11 +1,11 @@ -use git_autosave::{init, load_config, save_config}; +use git_autosave::{Config, init}; use git2::Repository; fn main() -> Result<(), anyhow::Error> { let repository = Repository::discover(".")?; - let mut config = load_config()?; + let mut config = Config::load()?; let id = init(&repository, Some(&mut config))?; - save_config(&config)?; + config.save()?; println!("Initialized autosave for repository: {id}"); diff --git a/src/bin/git-restore-autosave.rs b/src/bin/git-restore-autosave.rs index 8613e15..b948cc2 100644 --- a/src/bin/git-restore-autosave.rs +++ b/src/bin/git-restore-autosave.rs @@ -14,7 +14,7 @@ use std::fmt::Display; use auth_git2::GitAuthenticator; use chrono::Local; -use git_autosave::{Autosave, authenticate::Inquirer}; +use git_autosave::{Autosave, Config, authenticate::Inquirer}; use git2::{RemoteCallbacks, Repository, build::CheckoutBuilder}; struct AutosaveOption { @@ -42,7 +42,7 @@ fn main() -> Result<(), anyhow::Error> { let branch = git_autosave::current_branch(&repository)?; let earliest_time = repository.head()?.peel_to_commit()?.time(); - let config: &'static _ = Box::leak(Box::new(git_autosave::load_config()?)); + let config: &'static _ = Box::leak(Box::new(Config::load()?)); let auth = GitAuthenticator::new().set_prompter(Inquirer(config)); let mut callbacks = RemoteCallbacks::new(); callbacks.credentials(auth.credentials(&gitconfig)); diff --git a/src/lib.rs b/src/lib.rs index 9535bf7..dd8ee86 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -27,45 +27,20 @@ * git repair-autosave */ -use std::collections::{HashMap, HashSet}; -use std::path::{Path, PathBuf}; +use std::path::Path; -use confy::ConfyError; use git2::{ Commit, FetchOptions, MergeOptions, Oid, PushOptions, Reference, RemoteCallbacks, Repository, Signature, Time, Tree, }; use is_executable::is_executable; -use serde::{Deserialize, Serialize}; use thiserror::Error; use uuid::Uuid; pub mod authenticate; +pub mod config; -#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct Config { - repositories: HashSet, - passwords: HashMap, String)>, - passphrases: HashMap, -} - -impl Config { - pub fn repositories(&self) -> &HashSet { - &self.repositories - } - - pub fn username_for_url(&self, url: &str) -> Option<&String> { - self.passwords.get(url)?.0.as_ref() - } - - pub fn password_for_url(&self, url: &str) -> Option<&String> { - Some(&self.passwords.get(url)?.1) - } - - pub fn passphrase_for_key(&self, key: &Path) -> Option<&String> { - self.passphrases.get(key) - } -} +pub use config::Config; #[derive(Debug, Error)] pub enum TreeError { @@ -75,14 +50,6 @@ pub enum TreeError { Git(#[from] git2::Error), } -pub fn load_config() -> Result { - confy::load("git-autosave", "git-autosaved") -} - -pub fn save_config(config: &Config) -> Result<(), ConfyError> { - confy::store("git-autosave", "git-autosaved", config) -} - pub fn repository_id(repository: &Repository) -> Result { repository .config()? @@ -106,7 +73,7 @@ pub fn init(repository: &Repository, config: Option<&mut Config>) -> Result