summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMica White <botahamec@outlook.com>2026-03-30 21:06:31 -0400
committerMica White <botahamec@outlook.com>2026-03-30 21:06:31 -0400
commit6495268f002e1eeb27d13c58eec34ac4fa9b4ee6 (patch)
tree6ee642663b614eb9b469b0a4f6771a2e88f547fc
parente5692c42d3f2323cba6f10a4fc1e98b60507df51 (diff)
Refactor out config type
-rw-r--r--src/bin/git-autosave-daemon.rs5
-rw-r--r--src/bin/git-autosave.rs4
-rw-r--r--src/bin/git-init-autosave.rs6
-rw-r--r--src/bin/git-restore-autosave.rs4
-rw-r--r--src/lib.rs41
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<Cache: FileIdCache + Send + 'static> 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<Config> =
- Box::leak(Box::new(Mutex::new(git_autosave::load_config()?)));
+ let config: &'static Mutex<Config> = 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<PathBuf>,
- passwords: HashMap<String, (Option<String>, String)>,
- passphrases: HashMap<PathBuf, String>,
-}
-
-impl Config {
- pub fn repositories(&self) -> &HashSet<PathBuf> {
- &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<Config, ConfyError> {
- 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<String, git2::Error> {
repository
.config()?
@@ -106,7 +73,7 @@ pub fn init(repository: &Repository, config: Option<&mut Config>) -> Result<Uuid
if let Some(config) = config
&& let Some(workdir) = workdir
{
- config.repositories.insert(workdir.into());
+ config.repositories_mut().insert(workdir.into());
}
Ok(id)