use clap_complete::Shell;
use miette::IntoDiagnostic;
use miette::Result;
-use quire::Config;
use quire::Quire;
use tracing_subscriber::EnvFilter;
use tracing_subscriber::fmt;
return Ok(());
};
- let quire = Quire::new(Config::default());
+ let quire = Quire::default();
match command {
Commands::Serve => commands::serve::run(&quire).await?,
+++ /dev/null
-use std::path::PathBuf;
-
-/// Application configuration.
-#[derive(Debug, Clone)]
-pub struct Config {
- /// Root directory containing bare Git repositories.
- pub repos_dir: PathBuf,
-}
-
-impl Default for Config {
- fn default() -> Self {
- Self {
- repos_dir: PathBuf::from("/var/quire/repos"),
- }
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn default_repos_dir() {
- let config = Config::default();
- assert_eq!(config.repos_dir, PathBuf::from("/var/quire/repos"));
- }
-}
use miette::{IntoDiagnostic, Result, ensure};
-use crate::config::Config;
-
/// A resolved repository path.
///
/// Created by `Quire::repo` after validating the name.
/// Application runtime context.
///
/// Carries configuration and provides resolved paths to repositories.
-/// Commands receive a `&Quire` instead of threading `&Config` around.
+/// Commands receive a `&Quire` instead of threading config around.
pub struct Quire {
- config: Config,
+ repos_dir: PathBuf,
+ config_path: PathBuf,
}
-impl Quire {
- pub fn new(config: Config) -> Self {
- Self { config }
+impl Default for Quire {
+ fn default() -> Self {
+ Self {
+ repos_dir: PathBuf::from("/var/quire/repos"),
+ config_path: PathBuf::from("/var/quire/config.fnl"),
+ }
}
+}
+impl Quire {
pub fn repos_dir(&self) -> &Path {
- &self.config.repos_dir
+ &self.repos_dir
+ }
+
+ pub fn config_path(&self) -> &Path {
+ &self.config_path
}
/// Validate a repository name and return its resolved path.
pub fn repo(&self, name: &str) -> Result<Repo> {
validate_repo_name(name)?;
Ok(Repo {
- path: self.config.repos_dir.join(name),
+ path: self.repos_dir.join(name),
})
}
/// List all repository names under the repos directory.
pub fn repos(&self) -> Result<impl Iterator<Item = String> + '_> {
- let entries = fs_err::read_dir(&self.config.repos_dir).into_diagnostic()?;
+ let entries = fs_err::read_dir(&self.repos_dir).into_diagnostic()?;
let mut repos: Vec<String> = Vec::new();
for entry in entries {
continue;
}
- let Ok(relative) = path.strip_prefix(&self.config.repos_dir) else {
+ let Ok(relative) = path.strip_prefix(&self.repos_dir) else {
continue;
};
let name = relative.to_string_lossy();
use super::*;
fn quire() -> Quire {
- Quire::new(Config::default())
+ Quire::default()
+ }
+
+ #[test]
+ fn default_paths() {
+ let q = Quire::default();
+ assert_eq!(q.repos_dir(), Path::new("/var/quire/repos"));
+ assert_eq!(q.config_path(), Path::new("/var/quire/config.fnl"));
}
#[test]