515da0f8
Add a collab_db server config option defaulting beside the repos
a73x 2026-09-06 07:41
Commit message
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" |