a73x

515da0f8

Add a collab_db server config option defaulting beside the repos

a73x   2026-09-06 07:41

Commit message
Add a collab_db server config option defaulting beside the repos

src/server/config.rs
Old New
@@ -15,6 +15,10 @@ pub struct ServerConfig {
15 pub site_title: String, 15 pub site_title: String,
16 #[serde(default = "default_max_release_size")] 16 #[serde(default = "default_max_release_size")]
17 pub max_release_size: u64, 17 pub max_release_size: u64,
18 /// Where the collaboration database (leases, and in later phases issues
19 /// and reviews) lives. Defaults beside the repos: `{repos_dir}/collab.db`.
20 #[serde(default)]
21 pub collab_db: Option<PathBuf>,
18 } 22 }
19 23
20 fn default_http_bind() -> SocketAddr { 24 fn default_http_bind() -> SocketAddr {
@@ -34,6 +38,12 @@ fn default_max_release_size() -> u64 {
34 } 38 }
35 39
36 impl ServerConfig { 40 impl ServerConfig {
41 pub fn collab_db_path(&self) -> PathBuf {
42 self.collab_db
43 .clone()
44 .unwrap_or_else(|| self.repos_dir.join("collab.db"))
45 }
46
37 pub fn from_toml(content: &str) -> Result<Self, toml_edit::de::Error> { 47 pub fn from_toml(content: &str) -> Result<Self, toml_edit::de::Error> {
38 toml_edit::de::from_str(content) 48 toml_edit::de::from_str(content)
39 } 49 }
@@ -103,6 +113,27 @@ authorized_keys = "/keys"
103 } 113 }
104 114
105 #[test] 115 #[test]
116 fn collab_db_defaults_beside_the_repos() {
117 let toml = r#"
118 repos_dir = "/srv/git"
119 authorized_keys = "/keys"
120 "#;
121 let config = ServerConfig::from_toml(toml).unwrap();
122 assert_eq!(config.collab_db_path(), PathBuf::from("/srv/git/collab.db"));
123 }
124
125 #[test]
126 fn explicit_collab_db_wins() {
127 let toml = r#"
128 repos_dir = "/srv/git"
129 authorized_keys = "/keys"
130 collab_db = "/elsewhere/x.db"
131 "#;
132 let config = ServerConfig::from_toml(toml).unwrap();
133 assert_eq!(config.collab_db_path(), PathBuf::from("/elsewhere/x.db"));
134 }
135
136 #[test]
106 fn parse_max_release_size() { 137 fn parse_max_release_size() {
107 let toml = r#" 138 let toml = r#"
108 repos_dir = "/srv/git" 139 repos_dir = "/srv/git"